Documentation Source Text

Hex Artifact Content
Login

Artifact 0c7bcc43ea7ceb3f2ff90c22f3e6f73c383cba34a8fb0a3bb03d55e6df1c2928:


0000: 3c 74 69 74 6c 65 3e 51 75 65 72 79 20 4c 61 6e  <title>Query Lan
0010: 67 75 61 67 65 20 55 6e 64 65 72 73 74 6f 6f 64  guage Understood
0020: 20 62 79 20 53 51 4c 69 74 65 3c 2f 74 69 74 6c   by SQLite</titl
0030: 65 3e 0a 0a 3c 68 31 20 61 6c 69 67 6e 3d 63 65  e>..<h1 align=ce
0040: 6e 74 65 72 3e 53 51 4c 20 41 73 20 55 6e 64 65  nter>SQL As Unde
0050: 72 73 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65  rstood By SQLite
0060: 3c 2f 68 31 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65  </h1>..<p>SQLite
0070: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6d 6f 73   understands mos
0080: 74 20 6f 66 20 74 68 65 20 73 74 61 6e 64 61 72  t of the standar
0090: 64 20 53 51 4c 0a 6c 61 6e 67 75 61 67 65 2e 20  d SQL.language. 
00a0: 20 42 75 74 20 69 74 20 64 6f 65 73 20 3c 61 20   But it does <a 
00b0: 68 72 65 66 3d 22 6f 6d 69 74 74 65 64 2e 68 74  href="omitted.ht
00c0: 6d 6c 22 3e 6f 6d 69 74 20 73 6f 6d 65 20 66 65  ml">omit some fe
00d0: 61 74 75 72 65 73 3c 2f 61 3e 0a 77 68 69 6c 65  atures</a>.while
00e0: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
00f0: 65 0a 61 64 64 69 6e 67 20 61 20 66 65 77 20 66  e.adding a few f
0100: 65 61 74 75 72 65 73 20 6f 66 20 69 74 73 20 6f  eatures of its o
0110: 77 6e 2e 20 20 54 68 69 73 20 64 6f 63 75 6d 65  wn.  This docume
0120: 6e 74 20 61 74 74 65 6d 70 74 73 20 74 6f 0a 64  nt attempts to.d
0130: 65 73 63 72 69 62 65 20 70 72 65 63 69 73 65 6c  escribe precisel
0140: 79 20 77 68 61 74 20 70 61 72 74 73 20 6f 66 20  y what parts of 
0150: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
0160: 20 53 51 4c 69 74 65 20 64 6f 65 73 0a 61 6e 64   SQLite does.and
0170: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
0180: 74 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 5b 53  t.  A list of [S
0190: 51 4c 20 6b 65 79 77 6f 72 64 73 5d 20 69 73 20  QL keywords] is 
01a0: 0a 61 6c 73 6f 20 70 72 6f 76 69 64 65 64 2e 20  .also provided. 
01b0: 20 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67   The SQL languag
01c0: 65 20 73 79 6e 74 61 78 20 69 73 20 64 65 73 63  e syntax is desc
01d0: 72 69 62 65 64 20 62 79 0a 5b 73 79 6e 74 61 78  ribed by.[syntax
01e0: 20 64 69 61 67 72 61 6d 73 5d 2e 0a 0a 3c 70 3e   diagrams]...<p>
01f0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79  The following sy
0200: 6e 74 61 78 20 64 6f 63 75 6d 65 6e 74 61 74 69  ntax documentati
0210: 6f 6e 20 74 6f 70 69 63 73 20 61 72 65 20 61 76  on topics are av
0220: 61 69 6c 61 62 6c 65 3a 3c 2f 70 3e 0a 0a 3c 74  ailable:</p>..<t
0230: 61 62 6c 65 20 77 69 64 74 68 3d 22 31 30 30 25  able width="100%
0240: 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 35  " cellpadding="5
0250: 22 20 62 6f 72 64 65 72 3d 22 30 22 3e 0a 3c 74  " border="0">.<t
0260: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
0270: 70 22 3e 3c 75 6c 3e 0a 0a 3c 74 63 6c 3e 0a 20  p"><ul>..<tcl>. 
0280: 20 73 65 74 20 69 20 30 0a 20 20 73 65 74 20 6c   set i 0.  set l
0290: 61 6e 67 5f 73 65 63 74 69 6f 6e 5f 6c 69 73 74  ang_section_list
02a0: 20 7b 0a 20 20 20 20 7b 7b 43 52 45 41 54 45 20   {.    {{CREATE 
02b0: 54 41 42 4c 45 7d 20 63 72 65 61 74 65 74 61 62  TABLE} createtab
02c0: 6c 65 7d 0a 20 20 20 20 7b 7b 43 52 45 41 54 45  le}.    {{CREATE
02d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 20   VIRTUAL TABLE} 
02e0: 63 72 65 61 74 65 76 74 61 62 7d 0a 20 20 20 20  createvtab}.    
02f0: 7b 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20  {{CREATE INDEX} 
0300: 63 72 65 61 74 65 69 6e 64 65 78 7d 0a 20 20 20  createindex}.   
0310: 20 7b 56 41 43 55 55 4d 20 76 61 63 75 75 6d 7d   {VACUUM vacuum}
0320: 0a 20 20 20 20 7b 7b 44 52 4f 50 20 54 41 42 4c  .    {{DROP TABL
0330: 45 7d 20 64 72 6f 70 74 61 62 6c 65 7d 0a 20 20  E} droptable}.  
0340: 20 20 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20    {{DROP INDEX} 
0350: 64 72 6f 70 69 6e 64 65 78 7d 0a 20 20 20 20 7b  dropindex}.    {
0360: 49 4e 53 45 52 54 20 69 6e 73 65 72 74 7d 0a 20  INSERT insert}. 
0370: 20 20 20 7b 55 50 53 45 52 54 20 75 70 73 65 72     {UPSERT upser
0380: 74 7d 0a 20 20 20 20 7b 52 45 50 4c 41 43 45 20  t}.    {REPLACE 
0390: 72 65 70 6c 61 63 65 7d 0a 20 20 20 20 7b 44 45  replace}.    {DE
03a0: 4c 45 54 45 20 64 65 6c 65 74 65 7d 0a 20 20 20  LETE delete}.   
03b0: 20 7b 55 50 44 41 54 45 20 75 70 64 61 74 65 7d   {UPDATE update}
03c0: 0a 20 20 20 20 7b 53 45 4c 45 43 54 20 73 65 6c  .    {SELECT sel
03d0: 65 63 74 7d 0a 20 20 20 20 7b 7b 57 49 54 48 20  ect}.    {{WITH 
03e0: 63 6c 61 75 73 65 7d 20 77 69 74 68 63 6c 61 75  clause} withclau
03f0: 73 65 7d 0a 20 20 20 20 7b 63 6f 6d 6d 65 6e 74  se}.    {comment
0400: 20 63 6f 6d 6d 65 6e 74 7d 0a 20 20 20 20 7b 45   comment}.    {E
0410: 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 7d 0a  XPLAIN explain}.
0420: 20 20 20 20 7b 65 78 70 72 65 73 73 69 6f 6e 20      {expression 
0430: 65 78 70 72 7d 0a 20 20 20 20 7b 7b 42 45 47 49  expr}.    {{BEGI
0440: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74  N TRANSACTION} t
0450: 72 61 6e 73 61 63 74 69 6f 6e 7d 0a 20 20 20 20  ransaction}.    
0460: 7b 7b 43 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43  {{COMMIT TRANSAC
0470: 54 49 4f 4e 7d 20 74 72 61 6e 73 61 63 74 69 6f  TION} transactio
0480: 6e 20 43 4f 4d 4d 49 54 7d 0a 20 20 20 20 7b 7b  n COMMIT}.    {{
0490: 45 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  END TRANSACTION}
04a0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 43 4f 4d   transaction COM
04b0: 4d 49 54 7d 0a 20 20 20 20 7b 7b 52 4f 4c 4c 42  MIT}.    {{ROLLB
04c0: 41 43 4b 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  ACK TRANSACTION}
04d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 52 4f 4c   transaction ROL
04e0: 4c 42 41 43 4b 7d 0a 20 20 20 20 7b 53 41 56 45  LBACK}.    {SAVE
04f0: 50 4f 49 4e 54 20 73 61 76 65 70 6f 69 6e 74 7d  POINT savepoint}
0500: 0a 20 20 20 20 7b 7b 52 45 4c 45 41 53 45 20 53  .    {{RELEASE S
0510: 41 56 45 50 4f 49 4e 54 7d 20 73 61 76 65 70 6f  AVEPOINT} savepo
0520: 69 6e 74 20 53 41 56 45 50 4f 49 4e 54 7d 0a 20  int SAVEPOINT}. 
0530: 20 20 20 7b 50 52 41 47 4d 41 20 70 72 61 67 6d     {PRAGMA pragm
0540: 61 2e 68 74 6d 6c 7d 0a 20 20 20 20 7b 7b 4f 4e  a.html}.    {{ON
0550: 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
0560: 7d 20 63 6f 6e 66 6c 69 63 74 7d 0a 20 20 20 20  } conflict}.    
0570: 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20 63  {{CREATE VIEW} c
0580: 72 65 61 74 65 76 69 65 77 7d 0a 20 20 20 20 7b  reateview}.    {
0590: 7b 44 52 4f 50 20 56 49 45 57 7d 20 64 72 6f 70  {DROP VIEW} drop
05a0: 76 69 65 77 7d 0a 20 20 20 20 7b 7b 43 52 45 41  view}.    {{CREA
05b0: 54 45 20 54 52 49 47 47 45 52 7d 20 63 72 65 61  TE TRIGGER} crea
05c0: 74 65 74 72 69 67 67 65 72 7d 0a 20 20 20 20 7b  tetrigger}.    {
05d0: 7b 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64  {DROP TRIGGER} d
05e0: 72 6f 70 74 72 69 67 67 65 72 7d 0a 20 20 20 20  roptrigger}.    
05f0: 7b 7b 41 54 54 41 43 48 20 44 41 54 41 42 41 53  {{ATTACH DATABAS
0600: 45 7d 20 61 74 74 61 63 68 7d 0a 20 20 20 20 7b  E} attach}.    {
0610: 7b 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45  {DETACH DATABASE
0620: 7d 20 64 65 74 61 63 68 7d 0a 20 20 20 20 20 20  } detach}.      
0630: 7b 52 45 49 4e 44 45 58 20 72 65 69 6e 64 65 78  {REINDEX reindex
0640: 7d 0a 20 20 20 20 7b 7b 41 4c 54 45 52 20 54 41  }.    {{ALTER TA
0650: 42 4c 45 7d 20 61 6c 74 65 72 74 61 62 6c 65 7d  BLE} altertable}
0660: 0a 20 20 20 20 7b 7b 41 4e 41 4c 59 5a 45 7d 20  .    {{ANALYZE} 
0670: 61 6e 61 6c 79 7a 65 7d 0a 20 20 20 20 7b 7b 49  analyze}.    {{I
0680: 4e 44 45 58 45 44 20 42 59 7d 20 69 6e 64 65 78  NDEXED BY} index
0690: 65 64 62 79 7d 0a 20 20 20 20 7b 7b 61 67 67 72  edby}.    {{aggr
06a0: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 7d  egate functions}
06b0: 20 61 67 67 66 75 6e 63 20 61 67 67 66 75 6e 63   aggfunc aggfunc
06c0: 7d 0a 20 20 20 20 7b 7b 63 6f 72 65 20 66 75 6e  }.    {{core fun
06d0: 63 74 69 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63  ctions} corefunc
06e0: 20 63 6f 72 65 66 75 6e 63 7d 0a 20 20 20 20 7b   corefunc}.    {
06f0: 7b 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66  {date and time f
0700: 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75  unctions} datefu
0710: 6e 63 20 64 61 74 65 66 75 6e 63 7d 0a 20 20 20  nc datefunc}.   
0720: 20 7b 6b 65 79 77 6f 72 64 73 20 6b 65 79 77 6f   {keywords keywo
0730: 72 64 73 20 7b 53 51 4c 20 6b 65 79 77 6f 72 64  rds {SQL keyword
0740: 73 7d 7d 0a 20 20 7d 0a 20 20 73 65 74 20 6c 78  s}}.  }.  set lx
0750: 20 7b 7d 0a 20 20 66 6f 72 65 61 63 68 20 7b 73   {}.  foreach {s
0760: 65 63 74 69 6f 6e 7d 20 5b 6c 73 6f 72 74 20 2d  ection} [lsort -
0770: 69 6e 64 65 78 20 30 20 2d 64 69 63 74 69 6f 6e  index 0 -diction
0780: 61 72 79 20 24 6c 61 6e 67 5f 73 65 63 74 69 6f  ary $lang_sectio
0790: 6e 5f 6c 69 73 74 5d 20 7b 0a 20 20 20 20 66 6f  n_list] {.    fo
07a0: 72 65 61 63 68 20 7b 73 5f 74 69 74 6c 65 20 73  reach {s_title s
07b0: 5f 74 61 67 20 73 5f 6b 77 7d 20 24 73 65 63 74  _tag s_kw} $sect
07c0: 69 6f 6e 20 7b 7d 0a 20 20 20 20 69 66 20 7b 24  ion {}.    if {$
07d0: 73 5f 6b 77 20 3d 3d 20 22 22 7d 20 7b 0a 20 20  s_kw == ""} {.  
07e0: 20 20 20 20 73 65 74 20 73 5f 6b 77 20 24 73 5f      set s_kw $s_
07f0: 74 69 74 6c 65 0a 20 20 20 20 7d 0a 20 20 20 20  title.    }.    
0800: 6c 61 70 70 65 6e 64 20 6c 78 20 5b 6c 69 73 74  lappend lx [list
0810: 20 24 73 5f 6b 77 20 24 73 5f 74 69 74 6c 65 20   $s_kw $s_title 
0820: 30 5d 0a 20 20 7d 0a 20 20 68 64 5f 6c 69 73 74  0].  }.  hd_list
0830: 5f 6f 66 5f 6c 69 6e 6b 73 20 7b 7d 20 33 34 30  _of_links {} 340
0840: 20 24 6c 78 0a 3c 2f 74 63 6c 3e 0a 3c 2f 75 6c   $lx.</tcl>.</ul
0850: 3e 3c 2f 74 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62  ></td></tr></tab
0860: 6c 65 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 6f 75  le>..<p>^The rou
0870: 74 69 6e 65 73 20 5b 73 71 6c 69 74 65 33 5f 70  tines [sqlite3_p
0880: 72 65 70 61 72 65 5f 76 32 28 29 5d 2c 20 5b 73  repare_v2()], [s
0890: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
08a0: 5d 2c 0a 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  ],.[sqlite3_prep
08b0: 61 72 65 31 36 28 29 5d 2c 20 5b 73 71 6c 69 74  are16()], [sqlit
08c0: 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32 28  e3_prepare16_v2(
08d0: 29 5d 2c 20 0a 5b 73 71 6c 69 74 65 33 5f 65 78  )], .[sqlite3_ex
08e0: 65 63 28 29 5d 2c 20 61 6e 64 20 5b 73 71 6c 69  ec()], and [sqli
08f0: 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 28 29 5d  te3_get_table()]
0900: 20 61 63 63 65 70 74 0a 61 6e 20 53 51 4c 20 73   accept.an SQL s
0910: 74 61 74 65 6d 65 6e 74 20 6c 69 73 74 20 28 73  tatement list (s
0920: 71 6c 2d 73 74 6d 74 2d 6c 69 73 74 29 20 77 68  ql-stmt-list) wh
0930: 69 63 68 20 69 73 20 61 20 73 65 6d 69 63 6f 6c  ich is a semicol
0940: 6f 6e 2d 73 65 70 61 72 61 74 65 64 0a 6c 69 73  on-separated.lis
0950: 74 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  t of statements.
0960: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c  </p>..<tcl>Bubbl
0970: 65 44 69 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d  eDiagram sql-stm
0980: 74 2d 6c 69 73 74 3c 2f 74 63 6c 3e 0a 0a 3c 70  t-list</tcl>..<p
0990: 3e 45 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d  >Each SQL statem
09a0: 65 6e 74 20 69 6e 20 74 68 65 20 73 74 61 74 65  ent in the state
09b0: 6d 65 6e 74 20 6c 69 73 74 20 69 73 20 61 6e 20  ment list is an 
09c0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 0a  instance of the.
09d0: 66 6f 6c 6c 6f 77 69 6e 67 3a 3c 2f 70 3e 0a 0a  following:</p>..
09e0: 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
09f0: 61 6d 20 73 71 6c 2d 73 74 6d 74 3c 2f 74 63 6c  am sql-stmt</tcl
0a00: 3e 0a 0a 3c 74 63 6c 3e 0a 70 72 6f 63 20 4f 70  >..<tcl>.proc Op
0a10: 65 72 61 74 6f 72 20 7b 6e 61 6d 65 7d 20 7b 0a  erator {name} {.
0a20: 20 20 72 65 74 75 72 6e 20 22 3c 66 6f 6e 74 20    return "<font 
0a30: 63 6f 6c 6f 72 3d 5c 22 23 32 63 32 63 66 30 5c  color=\"#2c2cf0\
0a40: 22 3e 3c 62 69 67 3e 24 6e 61 6d 65 3c 2f 62 69  "><big>$name</bi
0a50: 67 3e 3c 2f 66 6f 6e 74 3e 22 0a 7d 0a 70 72 6f  g></font>".}.pro
0a60: 63 20 4e 6f 6e 74 65 72 6d 69 6e 61 6c 20 7b 6e  c Nonterminal {n
0a70: 61 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20  ame} {.  return 
0a80: 22 3c 69 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  "<i><font color=
0a90: 5c 22 23 66 66 33 34 33 34 5c 22 3e 24 6e 61 6d  \"#ff3434\">$nam
0aa0: 65 3c 2f 66 6f 6e 74 3e 3c 2f 69 3e 22 0a 7d 0a  e</font></i>".}.
0ab0: 70 72 6f 63 20 4b 65 79 77 6f 72 64 20 7b 6e 61  proc Keyword {na
0ac0: 6d 65 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 22  me} {.  return "
0ad0: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 23 32  <font color=\"#2
0ae0: 63 32 63 66 30 5c 22 3e 24 6e 61 6d 65 3c 2f 66  c2cf0\">$name</f
0af0: 6f 6e 74 3e 22 0a 7d 0a 70 72 6f 63 20 45 78 61  ont>".}.proc Exa
0b00: 6d 70 6c 65 20 7b 74 65 78 74 7d 20 7b 0a 20 20  mple {text} {.  
0b10: 68 64 5f 70 75 74 73 20 22 3c 62 6c 6f 63 6b 71  hd_puts "<blockq
0b20: 75 6f 74 65 3e 3c 70 72 65 3e 24 74 65 78 74 3c  uote><pre>$text<
0b30: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
0b40: 65 3e 22 0a 7d 0a 0a 70 72 6f 63 20 53 65 63 74  e>".}..proc Sect
0b50: 69 6f 6e 20 7b 6e 61 6d 65 20 6c 61 62 65 6c 20  ion {name label 
0b60: 6b 65 79 77 6f 72 64 73 7d 20 7b 0a 20 20 67 6c  keywords} {.  gl
0b70: 6f 62 61 6c 20 44 4f 43 0a 20 20 68 64 5f 63 6c  obal DOC.  hd_cl
0b80: 6f 73 65 5f 6d 61 69 6e 0a 20 20 68 64 5f 6f 70  ose_main.  hd_op
0b90: 65 6e 5f 6d 61 69 6e 20 6c 61 6e 67 5f 24 6c 61  en_main lang_$la
0ba0: 62 65 6c 2e 68 74 6d 6c 0a 20 20 68 64 5f 68 65  bel.html.  hd_he
0bb0: 61 64 65 72 20 22 53 51 4c 69 74 65 20 51 75 65  ader "SQLite Que
0bc0: 72 79 20 4c 61 6e 67 75 61 67 65 3a 20 24 6e 61  ry Language: $na
0bd0: 6d 65 22 20 24 44 4f 43 2f 70 61 67 65 73 2f 6c  me" $DOC/pages/l
0be0: 61 6e 67 2e 69 6e 0a 20 20 65 76 61 6c 20 68 64  ang.in.  eval hd
0bf0: 5f 6b 65 79 77 6f 72 64 73 20 24 6b 65 79 77 6f  _keywords $keywo
0c00: 72 64 73 0a 20 20 69 66 20 7b 5b 6c 73 65 61 72  rds.  if {[lsear
0c10: 63 68 20 24 6b 65 79 77 6f 72 64 73 20 24 6e 61  ch $keywords $na
0c20: 6d 65 5d 20 3d 3d 20 2d 31 20 26 26 20 5b 6c 73  me] == -1 && [ls
0c30: 65 61 72 63 68 20 24 6b 65 79 77 6f 72 64 73 20  earch $keywords 
0c40: 2a 24 6e 61 6d 65 5d 20 3d 3d 20 2d 31 7d 20 7b  *$name] == -1} {
0c50: 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79  .    eval hd_key
0c60: 77 6f 72 64 73 20 7b 20 24 6e 61 6d 65 20 7d 0a  words { $name }.
0c70: 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c    }.  hd_puts {<
0c80: 64 69 76 20 63 6c 61 73 73 3d 6e 6f 73 65 61 72  div class=nosear
0c90: 63 68 3e 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b  ch>}.  hd_puts {
0ca0: 3c 68 31 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <h1 align="cente
0cb0: 72 22 3e 53 51 4c 20 41 73 20 55 6e 64 65 72 73  r">SQL As Unders
0cc0: 74 6f 6f 64 20 42 79 20 53 51 4c 69 74 65 3c 2f  tood By SQLite</
0cd0: 68 31 3e 7d 0a 20 20 68 64 5f 70 75 74 73 20 7b  h1>}.  hd_puts {
0ce0: 3c 70 3e 3c 61 20 68 72 65 66 3d 22 6c 61 6e 67  <p><a href="lang
0cf0: 2e 68 74 6d 6c 22 3e 5b 54 6f 70 5d 3c 2f 61 3e  .html">[Top]</a>
0d00: 3c 2f 70 3e 7d 0a 20 20 68 64 5f 70 75 74 73 20  </p>}.  hd_puts 
0d10: 22 3c 68 32 3e 24 6e 61 6d 65 3c 2f 68 32 3e 22  "<h2>$name</h2>"
0d20: 0a 20 20 68 64 5f 70 75 74 73 20 7b 3c 2f 64 69  .  hd_puts {</di
0d30: 76 3e 7d 0a 7d 0a 0a 23 23 23 23 23 23 23 23 23  v>}.}..#########
0d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d80: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
0d90: 41 4c 54 45 52 20 54 41 42 4c 45 7d 20 61 6c 74  ALTER TABLE} alt
0da0: 65 72 74 61 62 6c 65 20 7b 7b 41 4c 54 45 52 20  ertable {{ALTER 
0db0: 54 41 42 4c 45 7d 20 7b 2a 41 4c 54 45 52 7d 7d  TABLE} {*ALTER}}
0dc0: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
0dd0: 65 44 69 61 67 72 61 6d 20 61 6c 74 65 72 2d 74  eDiagram alter-t
0de0: 61 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  able-stmt.</tcl>
0df0: 0a 0a 3c 70 3e 53 51 4c 69 74 65 20 73 75 70 70  ..<p>SQLite supp
0e00: 6f 72 74 73 20 61 20 6c 69 6d 69 74 65 64 20 73  orts a limited s
0e10: 75 62 73 65 74 20 6f 66 20 41 4c 54 45 52 20 54  ubset of ALTER T
0e20: 41 42 4c 45 2e 0a 54 68 65 20 41 4c 54 45 52 20  ABLE..The ALTER 
0e30: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 6e  TABLE command in
0e40: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74   SQLite allows t
0e50: 68 65 20 75 73 65 72 20 74 6f 20 72 65 6e 61 6d  he user to renam
0e60: 65 20 61 20 74 61 62 6c 65 2c 0a 74 6f 20 72 65  e a table,.to re
0e70: 6e 61 6d 65 20 61 20 63 6f 6c 75 6d 6e 20 77 69  name a column wi
0e80: 74 68 69 6e 20 61 20 74 61 62 6c 65 2c 20 6f 72  thin a table, or
0e90: 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f   to add a new co
0ea0: 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73 74  lumn to an exist
0eb0: 69 6e 67 20 74 61 62 6c 65 2e 0a 0a 3c 74 63 6c  ing table...<tcl
0ec0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 61 6c 74  >hd_fragment alt
0ed0: 65 72 74 61 62 72 65 6e 61 6d 65 20 7b 41 4c 54  ertabrename {ALT
0ee0: 45 52 20 54 41 42 4c 45 20 52 45 4e 41 4d 45 7d  ER TABLE RENAME}
0ef0: 20 7b 72 65 6e 61 6d 65 20 74 61 62 6c 65 7d 3c   {rename table}<
0f00: 2f 74 63 6c 3e 0a 3c 68 33 3e 41 4c 54 45 52 20  /tcl>.<h3>ALTER 
0f10: 54 41 42 4c 45 20 52 45 4e 41 4d 45 3c 2f 68 33  TABLE RENAME</h3
0f20: 3e 0a 0a 3c 70 3e 20 5e 28 54 68 65 20 52 45 4e  >..<p> ^(The REN
0f30: 41 4d 45 20 54 4f 20 73 79 6e 74 61 78 20 63 68  AME TO syntax ch
0f40: 61 6e 67 65 73 20 74 68 65 20 6e 61 6d 65 20 6f  anges the name o
0f50: 66 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d  f <yyterm>table-
0f60: 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 74 6f  name</yyterm>.to
0f70: 20 3c 79 79 74 65 72 6d 3e 6e 65 77 2d 74 61 62   <yyterm>new-tab
0f80: 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
0f90: 2e 29 5e 0a 54 68 69 73 20 63 6f 6d 6d 61 6e 64  .)^.This command
0fa0: 20 0a 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64   .cannot be used
0fb0: 20 74 6f 20 6d 6f 76 65 20 61 20 74 61 62 6c 65   to move a table
0fc0: 20 62 65 74 77 65 65 6e 20 61 74 74 61 63 68 65   between attache
0fd0: 64 20 64 61 74 61 62 61 73 65 73 2c 20 6f 6e 6c  d databases, onl
0fe0: 79 20 74 6f 20 72 65 6e 61 6d 65 20 0a 61 20 74  y to rename .a t
0ff0: 61 62 6c 65 20 77 69 74 68 69 6e 20 74 68 65 20  able within the 
1000: 73 61 6d 65 20 64 61 74 61 62 61 73 65 2e 0a 5e  same database..^
1010: 49 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  If the table bei
1020: 6e 67 20 72 65 6e 61 6d 65 64 20 68 61 73 20 74  ng renamed has t
1030: 72 69 67 67 65 72 73 20 6f 72 20 69 6e 64 69 63  riggers or indic
1040: 65 73 2c 20 74 68 65 6e 20 74 68 65 73 65 20 72  es, then these r
1050: 65 6d 61 69 6e 0a 61 74 74 61 63 68 65 64 20 74  emain.attached t
1060: 6f 20 74 68 65 20 74 61 62 6c 65 20 61 66 74 65  o the table afte
1070: 72 20 69 74 20 68 61 73 20 62 65 65 6e 20 72 65  r it has been re
1080: 6e 61 6d 65 64 2e 0a 0a 3c 62 6c 6f 63 6b 71 75  named...<blockqu
1090: 6f 74 65 20 73 74 79 6c 65 3d 27 62 61 63 6b 67  ote style='backg
10a0: 72 6f 75 6e 64 2d 63 6f 6c 6f 72 3a 20 23 66 66  round-color: #ff
10b0: 64 30 64 30 3b 27 3e 0a 3c 62 3e 43 6f 6d 70 61  d0d0;'>.<b>Compa
10c0: 74 69 62 69 6c 69 74 79 20 4e 6f 74 65 3a 3c 2f  tibility Note:</
10d0: 62 3e 0a 54 68 65 20 62 65 68 61 76 69 6f 72 20  b>.The behavior 
10e0: 6f 66 20 41 4c 54 45 52 20 54 41 42 4c 45 20 77  of ALTER TABLE w
10f0: 68 65 6e 20 72 65 6e 61 6d 69 6e 67 20 61 20 74  hen renaming a t
1100: 61 62 6c 65 20 77 61 73 20 65 6e 68 61 6e 63 65  able was enhance
1110: 64 0a 69 6e 20 76 65 72 73 69 6f 6e 73 20 33 2e  d.in versions 3.
1120: 32 35 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e  25.0 ([dateof:3.
1130: 32 35 2e 30 5d 29 20 61 6e 64 20 33 2e 32 36 2e  25.0]) and 3.26.
1140: 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e 32 36 2e  0 ([dateof:3.26.
1150: 30 5d 29 0a 69 6e 20 6f 72 64 65 72 20 74 6f 20  0]).in order to 
1160: 63 61 72 72 79 20 74 68 65 20 72 65 6e 61 6d 65  carry the rename
1170: 20 6f 70 65 72 61 74 69 6f 6e 20 66 6f 72 77 61   operation forwa
1180: 72 64 20 69 6e 74 6f 20 74 72 69 67 67 65 72 73  rd into triggers
1190: 20 61 6e 64 0a 76 69 65 77 73 20 74 68 61 74 20   and.views that 
11a0: 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 72 65  reference the re
11b0: 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 20 54 68  named table.  Th
11c0: 69 73 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  is is considered
11d0: 20 61 6e 0a 69 6d 70 72 6f 76 65 6d 65 6e 74 2e   an.improvement.
11e0: 20 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68   Applications th
11f0: 61 74 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 65  at depend on the
1200: 20 6f 6c 64 65 72 20 28 61 6e 64 0a 61 72 67 75   older (and.argu
1210: 61 62 6c 79 20 62 75 67 67 79 29 20 62 65 68 61  ably buggy) beha
1220: 76 69 6f 72 20 63 61 6e 20 75 73 65 20 74 68 65  vior can use the
1230: 0a 5b 50 52 41 47 4d 41 20 6c 65 67 61 63 79 5f  .[PRAGMA legacy_
1240: 61 6c 74 65 72 5f 74 61 62 6c 65 3d 4f 4e 5d 20  alter_table=ON] 
1250: 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 6d 61 6b  statement to mak
1260: 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20 52 45  e ALTER TABLE RE
1270: 4e 41 4d 45 0a 62 65 68 61 76 65 20 61 73 20 69  NAME.behave as i
1280: 74 20 64 69 64 20 70 72 69 6f 72 20 74 6f 20 76  t did prior to v
1290: 65 72 73 69 6f 6e 20 33 2e 32 35 2e 30 2e 0a 3c  ersion 3.25.0..<
12a0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
12b0: 3e 0a 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  >.Beginning with
12c0: 20 72 65 6c 65 61 73 65 20 33 2e 32 35 2e 30 20   release 3.25.0 
12d0: 28 5b 64 61 74 65 6f 66 3a 33 2e 32 35 2e 30 5d  ([dateof:3.25.0]
12e0: 29 2c 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  ), references to
12f0: 20 74 68 65 20 74 61 62 6c 65 0a 77 69 74 68 69   the table.withi
1300: 6e 20 74 72 69 67 67 65 72 20 62 6f 64 69 65 73  n trigger bodies
1310: 20 61 6e 64 20 76 69 65 77 20 64 65 66 69 6e 69   and view defini
1320: 74 69 6f 6e 73 20 61 72 65 20 61 6c 73 6f 20 72  tions are also r
1330: 65 6e 61 6d 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70  enamed..</p>..<p
1340: 3e 20 50 72 69 6f 72 20 74 6f 20 76 65 72 73 69  > Prior to versi
1350: 6f 6e 20 33 2e 32 36 2e 30 20 28 5b 64 61 74 65  on 3.26.0 ([date
1360: 6f 66 3a 33 2e 32 36 2e 30 5d 29 2c 20 46 4f 52  of:3.26.0]), FOR
1370: 45 49 47 4e 20 4b 45 59 20 72 65 66 65 72 65 6e  EIGN KEY referen
1380: 63 65 73 0a 74 6f 20 61 20 74 61 62 6c 65 20 74  ces.to a table t
1390: 68 61 74 20 69 73 20 72 65 6e 61 6d 65 64 20 77  hat is renamed w
13a0: 65 72 65 20 6f 6e 6c 79 20 65 64 69 74 65 64 20  ere only edited 
13b0: 69 66 20 74 68 65 0a 5b 50 52 41 47 4d 41 20 66  if the.[PRAGMA f
13c0: 6f 72 65 69 67 6e 5f 6b 65 79 73 3d 4f 4e 5d 2c  oreign_keys=ON],
13d0: 20 6f 72 20 69 6e 20 6f 74 68 65 72 20 77 6f 72   or in other wor
13e0: 64 73 20 69 66 0a 5b 66 6f 72 65 69 67 6e 20 6b  ds if.[foreign k
13f0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20  ey constraints] 
1400: 77 65 72 65 20 62 65 67 69 6e 20 65 6e 66 6f 72  were begin enfor
1410: 63 65 64 2e 20 20 57 69 74 68 0a 5b 50 52 41 47  ced.  With.[PRAG
1420: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3d  MA foreign_keys=
1430: 4f 46 46 5d 2c 20 46 4f 52 45 49 47 4e 20 4b 45  OFF], FOREIGN KE
1440: 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 6f  Y constraints wo
1450: 75 6c 64 20 6e 6f 74 20 62 65 20 63 68 61 6e 67  uld not be chang
1460: 65 64 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c  ed.when the tabl
1470: 65 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69  e that the forei
1480: 67 6e 20 6b 65 79 20 72 65 66 65 72 72 65 64 20  gn key referred 
1490: 74 6f 20 28 74 68 65 20 22 5b 70 61 72 65 6e 74  to (the "[parent
14a0: 20 74 61 62 6c 65 5d 22 29 0a 77 61 73 20 72 65   table]").was re
14b0: 6e 61 6d 65 64 2e 20 20 42 65 67 69 6e 6e 69 6e  named.  Beginnin
14c0: 67 20 77 69 74 68 20 76 65 72 73 69 6f 6e 20 33  g with version 3
14d0: 2e 32 36 2e 30 2c 20 46 4f 52 45 49 47 4e 20 4b  .26.0, FOREIGN K
14e0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 61  EY constraints.a
14f0: 72 65 20 61 6c 77 61 79 73 20 63 6f 6e 76 65 72  re always conver
1500: 74 65 64 20 77 68 65 6e 20 61 20 74 61 62 6c 65  ted when a table
1510: 20 69 73 20 72 65 6e 61 6d 65 64 2c 20 75 6e 6c   is renamed, unl
1520: 65 73 73 20 74 68 65 0a 5b 50 52 41 47 4d 41 20  ess the.[PRAGMA 
1530: 6c 65 67 61 63 79 5f 61 6c 74 65 72 5f 74 61 62  legacy_alter_tab
1540: 6c 65 3d 4f 4e 5d 20 73 65 74 74 69 6e 67 20 69  le=ON] setting i
1550: 73 20 65 6e 67 61 67 65 64 2e 20 20 54 68 65 20  s engaged.  The 
1560: 66 6f 6c 6c 6f 77 69 6e 67 0a 74 61 62 6c 65 20  following.table 
1570: 73 75 6d 6d 61 72 69 65 73 20 74 68 65 20 64 69  summaries the di
1580: 66 66 65 72 65 6e 63 65 3a 3c 2f 70 3e 0a 0a 3c  fference:</p>..<
1590: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62  blockquote>.<tab
15a0: 6c 65 20 62 6f 72 64 65 72 3d 22 31 22 20 63 65  le border="1" ce
15b0: 6c 6c 70 61 64 64 69 6e 67 3d 22 32 22 20 63 65  llpadding="2" ce
15c0: 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c  llspacing="0">.<
15d0: 74 72 3e 0a 3c 74 68 3e 50 52 41 47 4d 41 20 66  tr>.<th>PRAGMA f
15e0: 6f 72 65 69 67 6e 5f 6b 65 79 73 0a 3c 74 68 3e  oreign_keys.<th>
15f0: 50 52 41 47 4d 41 20 6c 65 67 61 63 79 5f 61 6c  PRAGMA legacy_al
1600: 74 65 72 5f 74 61 62 6c 65 0a 3c 74 68 3e 5b 70  ter_table.<th>[p
1610: 61 72 65 6e 74 20 74 61 62 6c 65 7c 50 61 72 65  arent table|Pare
1620: 6e 74 20 54 61 62 6c 65 5d 0a 72 65 66 65 72 65  nt Table].refere
1630: 6e 63 65 73 20 61 72 65 20 75 70 64 61 74 65 64  nces are updated
1640: 0a 3c 74 68 3e 53 51 4c 69 74 65 20 76 65 72 73  .<th>SQLite vers
1650: 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ion.<tr><td alig
1660: 6e 3d 22 63 65 6e 74 65 72 22 3e 4f 66 66 3c 74  n="center">Off<t
1670: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
1680: 3e 4f 66 66 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >Off<td align="c
1690: 65 6e 74 65 72 22 3e 4e 6f 3c 74 64 20 61 6c 69  enter">No<td ali
16a0: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 26 6c 74 3b  gn="center">&lt;
16b0: 20 33 2e 32 36 2e 30 0a 3c 74 72 3e 3c 74 64 20   3.26.0.<tr><td 
16c0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4f  align="center">O
16d0: 66 66 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  ff<td align="cen
16e0: 74 65 72 22 3e 4f 66 66 3c 74 64 20 61 6c 69 67  ter">Off<td alig
16f0: 6e 3d 22 63 65 6e 74 65 72 22 3e 59 65 73 3c 74  n="center">Yes<t
1700: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
1710: 3e 26 67 74 3b 3d 20 33 2e 32 36 2e 30 0a 3c 74  >&gt;= 3.26.0.<t
1720: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  r><td align="cen
1730: 74 65 72 22 3e 4f 6e 3c 74 64 20 61 6c 69 67 6e  ter">On<td align
1740: 3d 22 63 65 6e 74 65 72 22 3e 4f 66 66 3c 74 64  ="center">Off<td
1750: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
1760: 59 65 73 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  Yes<td align="ce
1770: 6e 74 65 72 22 3e 61 6c 6c 0a 3c 74 72 3e 3c 74  nter">all.<tr><t
1780: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
1790: 3e 4f 66 66 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >Off<td align="c
17a0: 65 6e 74 65 72 22 3e 4f 6e 3c 74 64 20 61 6c 69  enter">On<td ali
17b0: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 6f 3c 74  gn="center">No<t
17c0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
17d0: 3e 61 6c 6c 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  >all.<tr><td ali
17e0: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4f 6e 3c 74  gn="center">On<t
17f0: 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
1800: 3e 4f 6e 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  >On<td align="ce
1810: 6e 74 65 72 22 3e 59 65 73 3c 74 64 20 61 6c 69  nter">Yes<td ali
1820: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 61 6c 6c 0a  gn="center">all.
1830: 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b  </table>.</block
1840: 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  quote>..<tcl>hd_
1850: 66 72 61 67 6d 65 6e 74 20 61 6c 74 65 72 74 61  fragment alterta
1860: 62 6d 76 63 6f 6c 20 7b 41 4c 54 45 52 20 54 41  bmvcol {ALTER TA
1870: 42 4c 45 20 52 45 4e 41 4d 45 20 43 4f 4c 55 4d  BLE RENAME COLUM
1880: 4e 7d 20 7b 72 65 6e 61 6d 65 20 63 6f 6c 75 6d  N} {rename colum
1890: 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 41 4c 54  n}</tcl>.<h3>ALT
18a0: 45 52 20 54 41 42 4c 45 20 52 45 4e 41 4d 45 20  ER TABLE RENAME 
18b0: 43 4f 4c 55 4d 4e 3c 2f 68 33 3e 0a 0a 3c 70 3e  COLUMN</h3>..<p>
18c0: 20 54 68 65 20 52 45 4e 41 4d 45 20 43 4f 4c 55   The RENAME COLU
18d0: 4d 4e 20 54 4f 20 73 79 6e 74 61 78 20 63 68 61  MN TO syntax cha
18e0: 6e 67 65 73 20 74 68 65 0a 3c 79 79 74 65 72 6d  nges the.<yyterm
18f0: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79  >column-name</yy
1900: 74 65 72 6d 3e 20 6f 66 20 74 61 62 6c 65 20 3c  term> of table <
1910: 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d  yyterm>table-nam
1920: 65 3c 2f 79 79 74 65 72 6d 3e 0a 69 6e 74 6f 20  e</yyterm>.into 
1930: 3c 79 79 74 65 72 6d 3e 6e 65 77 2d 63 6f 6c 75  <yyterm>new-colu
1940: 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  mn-name</yyterm>
1950: 2e 20 20 54 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  .  The column na
1960: 6d 65 20 69 73 20 63 68 61 6e 67 65 64 20 62 6f  me is changed bo
1970: 74 68 0a 77 69 74 68 69 6e 20 74 68 65 20 74 61  th.within the ta
1980: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ble definition i
1990: 74 73 65 6c 66 20 61 6e 64 20 61 6c 73 6f 20 77  tself and also w
19a0: 69 74 68 69 6e 20 61 6c 6c 20 69 6e 64 65 78 65  ithin all indexe
19b0: 73 2c 20 74 72 69 67 67 65 72 73 2c 0a 61 6e 64  s, triggers,.and
19c0: 20 76 69 65 77 73 20 74 68 61 74 20 72 65 66 65   views that refe
19d0: 72 65 6e 63 65 20 74 68 65 20 63 6f 6c 75 6d 6e  rence the column
19e0: 2e 20 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  .  If the column
19f0: 20 6e 61 6d 65 20 63 68 61 6e 67 65 20 77 6f 75   name change wou
1a00: 6c 64 0a 72 65 73 75 6c 74 20 69 6e 20 61 20 73  ld.result in a s
1a10: 65 6d 61 6e 74 69 63 20 61 6d 62 69 67 75 69 74  emantic ambiguit
1a20: 79 20 69 6e 20 61 20 74 72 69 67 67 65 72 20 6f  y in a trigger o
1a30: 72 20 76 69 65 77 2c 20 74 68 65 6e 20 74 68 65  r view, then the
1a40: 20 52 45 4e 41 4d 45 0a 43 4f 4c 55 4d 4e 20 66   RENAME.COLUMN f
1a50: 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72 72  ails with an err
1a60: 6f 72 20 61 6e 64 20 6e 6f 20 63 68 61 6e 67 65  or and no change
1a70: 73 20 61 72 65 20 61 70 70 6c 69 65 64 2e 0a 0a  s are applied...
1a80: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
1a90: 20 61 6c 74 65 72 74 61 62 61 64 64 63 6f 6c 20   altertabaddcol 
1aa0: 7b 41 4c 54 45 52 20 54 41 42 4c 45 20 41 44 44  {ALTER TABLE ADD
1ab0: 20 43 4f 4c 55 4d 4e 7d 20 7b 61 64 64 20 63 6f   COLUMN} {add co
1ac0: 6c 75 6d 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  lumn}</tcl>.<h3>
1ad0: 41 4c 54 45 52 20 54 41 42 4c 45 20 41 44 44 20  ALTER TABLE ADD 
1ae0: 43 4f 4c 55 4d 4e 3c 2f 68 33 3e 0a 0a 3c 70 3e  COLUMN</h3>..<p>
1af0: 20 5e 54 68 65 20 41 44 44 20 43 4f 4c 55 4d 4e   ^The ADD COLUMN
1b00: 20 73 79 6e 74 61 78 0a 69 73 20 75 73 65 64 20   syntax.is used 
1b10: 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
1b20: 75 6d 6e 20 74 6f 20 61 6e 20 65 78 69 73 74 69  umn to an existi
1b30: 6e 67 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6e  ng table..^The n
1b40: 65 77 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6c 77  ew column is alw
1b50: 61 79 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20  ays appended to 
1b60: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c  the end of the l
1b70: 69 73 74 20 6f 66 20 65 78 69 73 74 69 6e 67 20  ist of existing 
1b80: 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65 20 5b 63 6f  columns..The [co
1b90: 6c 75 6d 6e 2d 64 65 66 5d 20 72 75 6c 65 20 64  lumn-def] rule d
1ba0: 65 66 69 6e 65 73 20 74 68 65 20 63 68 61 72 61  efines the chara
1bb0: 63 74 65 72 69 73 74 69 63 73 20 6f 66 20 74 68  cteristics of th
1bc0: 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 2e 0a 5e 28  e new column..^(
1bd0: 54 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 6d  The new column m
1be0: 61 79 20 74 61 6b 65 20 61 6e 79 20 6f 66 20 74  ay take any of t
1bf0: 68 65 20 66 6f 72 6d 73 20 70 65 72 6d 69 73 73  he forms permiss
1c00: 69 62 6c 65 20 69 6e 20 61 20 5b 43 52 45 41 54  ible in a [CREAT
1c10: 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d 65  E TABLE].stateme
1c20: 6e 74 2c 20 77 69 74 68 20 74 68 65 20 66 6f 6c  nt, with the fol
1c30: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
1c40: 6f 6e 73 3a 29 5e 0a 3c 75 6c 3e 0a 3c 6c 69 3e  ons:)^.<ul>.<li>
1c50: 5e 54 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20  ^The column may 
1c60: 6e 6f 74 20 68 61 76 65 20 61 20 50 52 49 4d 41  not have a PRIMA
1c70: 52 59 20 4b 45 59 20 6f 72 20 55 4e 49 51 55 45  RY KEY or UNIQUE
1c80: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 3c 2f 6c 69   constraint.</li
1c90: 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d  >.<li>^The colum
1ca0: 6e 20 6d 61 79 20 6e 6f 74 20 68 61 76 65 20 61  n may not have a
1cb0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
1cc0: 66 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20  f CURRENT_TIME, 
1cd0: 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 0a 20  CURRENT_DATE, . 
1ce0: 20 20 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53     CURRENT_TIMES
1cf0: 54 41 4d 50 2c 20 6f 72 20 61 6e 20 65 78 70 72  TAMP, or an expr
1d00: 65 73 73 69 6f 6e 20 69 6e 20 70 61 72 65 6e 74  ession in parent
1d10: 68 65 73 65 73 2e 3c 2f 6c 69 3e 0a 3c 6c 69 3e  heses.</li>.<li>
1d20: 5e 49 66 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63  ^If a NOT NULL c
1d30: 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 73 70 65  onstraint is spe
1d40: 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68 65  cified, then the
1d50: 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68 61 76   column must hav
1d60: 65 20 61 0a 20 20 20 20 64 65 66 61 75 6c 74 20  e a.    default 
1d70: 76 61 6c 75 65 20 6f 74 68 65 72 20 74 68 61 6e  value other than
1d80: 20 4e 55 4c 4c 2e 0a 3c 6c 69 3e 5e 49 66 20 5b   NULL..<li>^If [
1d90: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
1da0: 74 72 61 69 6e 74 73 5d 20 61 72 65 20 5b 66 6f  traints] are [fo
1db0: 72 65 69 67 6e 5f 6b 65 79 73 20 70 72 61 67 6d  reign_keys pragm
1dc0: 61 20 7c 20 65 6e 61 62 6c 65 64 5d 20 61 6e 64  a | enabled] and
1dd0: 0a 20 20 20 20 61 20 63 6f 6c 75 6d 6e 20 77 69  .    a column wi
1de0: 74 68 20 61 20 5b 66 6f 72 65 69 67 6e 2d 6b 65  th a [foreign-ke
1df0: 79 2d 63 6c 61 75 73 65 20 7c 20 52 45 46 45 52  y-clause | REFER
1e00: 45 4e 43 45 53 20 63 6c 61 75 73 65 5d 0a 20 20  ENCES clause].  
1e10: 20 20 69 73 20 61 64 64 65 64 2c 20 74 68 65 20    is added, the 
1e20: 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 68 61 76 65  column must have
1e30: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
1e40: 20 6f 66 20 4e 55 4c 4c 2e 0a 3c 2f 75 6c 3e 0a   of NULL..</ul>.
1e50: 0a 3c 70 3e 5e 4e 6f 74 65 20 61 6c 73 6f 20 74  .<p>^Note also t
1e60: 68 61 74 20 77 68 65 6e 20 61 64 64 69 6e 67 20  hat when adding 
1e70: 61 20 5b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  a [CHECK constra
1e80: 69 6e 74 5d 2c 20 74 68 65 20 43 48 45 43 4b 20  int], the CHECK 
1e90: 63 6f 6e 73 74 72 61 69 6e 74 0a 69 73 20 6e 6f  constraint.is no
1ea0: 74 20 74 65 73 74 65 64 20 61 67 61 69 6e 73 74  t tested against
1eb0: 20 70 72 65 65 78 69 73 74 69 6e 67 20 72 6f 77   preexisting row
1ec0: 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 0a  s of the table..
1ed0: 5e 54 68 69 73 20 63 61 6e 20 72 65 73 75 6c 74  ^This can result
1ee0: 20 69 6e 20 61 20 74 61 62 6c 65 20 74 68 61 74   in a table that
1ef0: 20 63 6f 6e 74 61 69 6e 73 20 64 61 74 61 20 74   contains data t
1f00: 68 61 74 0a 69 73 20 69 6e 20 76 69 6f 6c 61 74  hat.is in violat
1f10: 69 6f 6e 20 6f 66 20 74 68 65 20 43 48 45 43 4b  ion of the CHECK
1f20: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 20 46 75   constraint.  Fu
1f30: 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66  ture versions of
1f40: 20 53 51 4c 69 74 65 20 6d 69 67 68 74 0a 63 68   SQLite might.ch
1f50: 61 6e 67 65 20 74 6f 20 76 61 6c 69 64 61 74 65  ange to validate
1f60: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
1f70: 74 73 20 61 73 20 74 68 65 79 20 61 72 65 20 61  ts as they are a
1f80: 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  dded.</p>..<p>Th
1f90: 65 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 6f  e ALTER TABLE co
1fa0: 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79 20 6d  mmand works by m
1fb0: 6f 64 69 66 79 69 6e 67 20 74 68 65 20 53 51 4c  odifying the SQL
1fc0: 20 74 65 78 74 20 6f 66 20 74 68 65 20 73 63 68   text of the sch
1fd0: 65 6d 61 0a 73 74 6f 72 65 64 20 69 6e 20 74 68  ema.stored in th
1fe0: 65 20 5b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  e [sqlite_master
1ff0: 20 74 61 62 6c 65 5d 2e 0a 4e 6f 20 63 68 61 6e   table]..No chan
2000: 67 65 73 20 61 72 65 20 6d 61 64 65 20 74 6f 20  ges are made to 
2010: 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 2e 0a 42  table content..B
2020: 65 63 61 75 73 65 20 6f 66 20 74 68 69 73 2c 0a  ecause of this,.
2030: 74 68 65 20 65 78 65 63 75 74 69 6f 6e 20 74 69  the execution ti
2040: 6d 65 20 6f 66 20 74 68 65 20 41 4c 54 45 52 20  me of the ALTER 
2050: 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 69 73  TABLE command is
2060: 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 6f 66 0a   independent of.
2070: 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 64 61  the amount of da
2080: 74 61 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ta in the table.
2090: 20 20 54 68 65 20 41 4c 54 45 52 20 54 41 42 4c    The ALTER TABL
20a0: 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 61  E command runs a
20b0: 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20 61 20 74  s quickly.on a t
20c0: 61 62 6c 65 20 77 69 74 68 20 31 30 20 6d 69 6c  able with 10 mil
20d0: 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20 69 74 20  lion rows as it 
20e0: 64 6f 65 73 20 6f 6e 20 61 20 74 61 62 6c 65 20  does on a table 
20f0: 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c 2f 70 3e  with 1 row..</p>
2100: 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44 44 20 43  ..<p>After ADD C
2110: 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65 6e 20 72  OLUMN has been r
2120: 75 6e 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65  un on a database
2130: 2c 20 74 68 61 74 20 64 61 74 61 62 61 73 65 20  , that database 
2140: 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72 65 61 64  will not.be read
2150: 61 62 6c 65 20 62 79 20 53 51 4c 69 74 65 20 76  able by SQLite v
2160: 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20 28 5b 64  ersion 3.1.3 ([d
2170: 61 74 65 6f 66 3a 33 2e 31 2e 33 5d 29 20 61 6e  ateof:3.1.3]) an
2180: 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70 3e 0a 0a  d earlier.</p>..
2190: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
21a0: 20 6f 74 68 65 72 61 6c 74 65 72 20 7b 67 65 6e   otheralter {gen
21b0: 65 72 61 6c 69 7a 65 64 20 41 4c 54 45 52 20 54  eralized ALTER T
21c0: 41 42 4c 45 20 70 72 6f 63 65 64 75 72 65 7d 3c  ABLE procedure}<
21d0: 2f 74 63 6c 3e 0a 3c 68 33 3e 4d 61 6b 69 6e 67  /tcl>.<h3>Making
21e0: 20 4f 74 68 65 72 20 4b 69 6e 64 73 20 4f 66 20   Other Kinds Of 
21f0: 54 61 62 6c 65 20 53 63 68 65 6d 61 20 43 68 61  Table Schema Cha
2200: 6e 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 54  nges</h3>..<p> T
2210: 68 65 20 6f 6e 6c 79 20 73 63 68 65 6d 61 20 61  he only schema a
2220: 6c 74 65 72 69 6e 67 20 63 6f 6d 6d 61 6e 64 73  ltering commands
2230: 20 64 69 72 65 63 74 6c 79 20 73 75 70 70 6f 72   directly suppor
2240: 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 61 72  ted by SQLite ar
2250: 65 20 74 68 65 0a 22 5b 72 65 6e 61 6d 65 20 74  e the."[rename t
2260: 61 62 6c 65 5d 22 2c 20 22 5b 72 65 6e 61 6d 65  able]", "[rename
2270: 20 63 6f 6c 75 6d 6e 5d 22 2c 20 61 6e 64 20 22   column]", and "
2280: 5b 61 64 64 20 63 6f 6c 75 6d 6e 5d 22 20 63 6f  [add column]" co
2290: 6d 6d 61 6e 64 73 20 73 68 6f 77 6e 20 61 62 6f  mmands shown abo
22a0: 76 65 2e 20 20 0a 48 6f 77 65 76 65 72 2c 20 61  ve.  .However, a
22b0: 70 70 6c 69 63 61 74 69 6f 6e 73 0a 63 61 6e 20  pplications.can 
22c0: 6d 61 6b 65 20 6f 74 68 65 72 20 61 72 62 69 74  make other arbit
22d0: 72 61 72 79 20 63 68 61 6e 67 65 73 20 74 6f 20  rary changes to 
22e0: 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20  the format of a 
22f0: 74 61 62 6c 65 20 75 73 69 6e 67 20 61 20 73 69  table using a si
2300: 6d 70 6c 65 0a 73 65 71 75 65 6e 63 65 20 6f 66  mple.sequence of
2310: 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 54 68 65   operations..The
2320: 20 73 74 65 70 73 20 74 6f 20 6d 61 6b 65 20 61   steps to make a
2330: 72 62 69 74 72 61 72 79 20 63 68 61 6e 67 65 73  rbitrary changes
2340: 20 74 6f 20 74 68 65 20 73 63 68 65 6d 61 20 64   to the schema d
2350: 65 73 69 67 6e 20 6f 66 20 73 6f 6d 65 20 74 61  esign of some ta
2360: 62 6c 65 20 58 0a 61 72 65 20 61 73 20 66 6f 6c  ble X.are as fol
2370: 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  lows:..<ol>.<li>
2380: 3c 70 3e 0a 49 66 20 66 6f 72 65 69 67 6e 20 6b  <p>.If foreign k
2390: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  ey constraints a
23a0: 72 65 20 65 6e 61 62 6c 65 64 2c 20 64 69 73 61  re enabled, disa
23b0: 62 6c 65 20 74 68 65 6d 20 75 73 69 6e 67 20 5b  ble them using [
23c0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
23d0: 65 79 73 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c  eys=OFF]...<li><
23e0: 70 3e 0a 53 74 61 72 74 20 61 20 74 72 61 6e 73  p>.Start a trans
23f0: 61 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e  action...<li><p>
2400: 0a 52 65 6d 65 6d 62 65 72 20 74 68 65 20 66 6f  .Remember the fo
2410: 72 6d 61 74 20 6f 66 20 61 6c 6c 20 69 6e 64 65  rmat of all inde
2420: 78 65 73 20 61 6e 64 20 74 72 69 67 67 65 72 73  xes and triggers
2430: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2440: 20 74 61 62 6c 65 20 58 2e 0a 54 68 69 73 20 69   table X..This i
2450: 6e 66 6f 72 6d 61 74 69 6f 6e 20 77 69 6c 6c 20  nformation will 
2460: 62 65 20 6e 65 65 64 65 64 20 69 6e 20 73 74 65  be needed in ste
2470: 70 20 38 20 62 65 6c 6f 77 2e 20 20 4f 6e 65 20  p 8 below.  One 
2480: 77 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69  way to do this i
2490: 73 0a 74 6f 20 72 75 6e 20 61 20 71 75 65 72 79  s.to run a query
24a0: 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77   like the follow
24b0: 69 6e 67 3a 0a 53 45 4c 45 43 54 20 74 79 70 65  ing:.SELECT type
24c0: 2c 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74  , sql FROM sqlit
24d0: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  e_master WHERE t
24e0: 62 6c 5f 6e 61 6d 65 3d 27 58 27 2e 0a 0a 3c 6c  bl_name='X'...<l
24f0: 69 3e 3c 70 3e 0a 55 73 65 20 5b 43 52 45 41 54  i><p>.Use [CREAT
2500: 45 20 54 41 42 4c 45 5d 20 74 6f 20 63 6f 6e 73  E TABLE] to cons
2510: 74 72 75 63 74 20 61 20 6e 65 77 20 74 61 62 6c  truct a new tabl
2520: 65 20 22 6e 65 77 5f 58 22 20 74 68 61 74 20 69  e "new_X" that i
2530: 73 20 69 6e 20 74 68 65 20 64 65 73 69 72 65 64  s in the desired
2540: 0a 72 65 76 69 73 65 64 20 66 6f 72 6d 61 74 20  .revised format 
2550: 6f 66 20 74 61 62 6c 65 20 58 2e 20 20 4d 61 6b  of table X.  Mak
2560: 65 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20  e sure that the 
2570: 6e 61 6d 65 20 22 6e 65 77 5f 58 22 20 64 6f 65  name "new_X" doe
2580: 73 20 6e 6f 74 20 63 6f 6c 6c 69 64 65 0a 77 69  s not collide.wi
2590: 74 68 20 61 6e 79 20 65 78 69 73 74 69 6e 67 20  th any existing 
25a0: 74 61 62 6c 65 20 6e 61 6d 65 2c 20 6f 66 20 63  table name, of c
25b0: 6f 75 72 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ourse...<li><p>.
25c0: 54 72 61 6e 73 66 65 72 20 63 6f 6e 74 65 6e 74  Transfer content
25d0: 20 66 72 6f 6d 20 58 20 69 6e 74 6f 20 6e 65 77   from X into new
25e0: 5f 58 20 75 73 69 6e 67 20 61 20 73 74 61 74 65  _X using a state
25f0: 6d 65 6e 74 0a 6c 69 6b 65 3a 20 49 4e 53 45 52  ment.like: INSER
2600: 54 20 49 4e 54 4f 20 6e 65 77 5f 58 20 53 45 4c  T INTO new_X SEL
2610: 45 43 54 20 2e 2e 2e 20 46 52 4f 4d 20 58 2e 0a  ECT ... FROM X..
2620: 0a 3c 6c 69 3e 3c 70 3e 0a 44 72 6f 70 20 74 68  .<li><p>.Drop th
2630: 65 20 6f 6c 64 20 74 61 62 6c 65 20 58 3a 20 20  e old table X:  
2640: 5b 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 44 52  [DROP TABLE | DR
2650: 4f 50 20 54 41 42 4c 45 20 58 5d 2e 0a 0a 3c 6c  OP TABLE X]...<l
2660: 69 3e 3c 70 3e 0a 43 68 61 6e 67 65 20 74 68 65  i><p>.Change the
2670: 20 6e 61 6d 65 20 6f 66 20 6e 65 77 5f 58 20 74   name of new_X t
2680: 6f 20 58 20 75 73 69 6e 67 3a 20 41 4c 54 45 52  o X using: ALTER
2690: 20 54 41 42 4c 45 20 6e 65 77 5f 58 20 52 45 4e   TABLE new_X REN
26a0: 41 4d 45 20 54 4f 20 58 2e 0a 0a 3c 6c 69 3e 3c  AME TO X...<li><
26b0: 70 3e 0a 55 73 65 20 5b 43 52 45 41 54 45 20 49  p>.Use [CREATE I
26c0: 4e 44 45 58 5d 20 61 6e 64 20 5b 43 52 45 41 54  NDEX] and [CREAT
26d0: 45 20 54 52 49 47 47 45 52 5d 20 74 6f 20 72 65  E TRIGGER] to re
26e0: 63 6f 6e 73 74 72 75 63 74 20 69 6e 64 65 78 65  construct indexe
26f0: 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61  s and triggers.a
2700: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
2710: 61 62 6c 65 20 58 2e 20 20 50 65 72 68 61 70 73  able X.  Perhaps
2720: 20 75 73 65 20 74 68 65 20 6f 6c 64 20 66 6f 72   use the old for
2730: 6d 61 74 20 6f 66 20 74 68 65 20 74 72 69 67 67  mat of the trigg
2740: 65 72 73 20 61 6e 64 0a 69 6e 64 65 78 65 73 20  ers and.indexes 
2750: 73 61 76 65 64 20 66 72 6f 6d 20 73 74 65 70 20  saved from step 
2760: 33 20 61 62 6f 76 65 20 61 73 20 61 20 67 75 69  3 above as a gui
2770: 64 65 2c 20 6d 61 6b 69 6e 67 20 63 68 61 6e 67  de, making chang
2780: 65 73 20 61 73 20 61 70 70 72 6f 70 72 69 61 74  es as appropriat
2790: 65 0a 66 6f 72 20 74 68 65 20 61 6c 74 65 72 61  e.for the altera
27a0: 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 49 66  tion...<li><p>If
27b0: 20 61 6e 79 20 76 69 65 77 73 20 72 65 66 65 72   any views refer
27c0: 20 74 6f 20 74 61 62 6c 65 20 58 20 69 6e 20 61   to table X in a
27d0: 20 77 61 79 20 74 68 61 74 20 69 73 20 61 66 66   way that is aff
27e0: 65 63 74 65 64 20 62 79 20 74 68 65 0a 73 63 68  ected by the.sch
27f0: 65 6d 61 20 63 68 61 6e 67 65 2c 20 74 68 65 6e  ema change, then
2800: 20 64 72 6f 70 20 74 68 6f 73 65 20 76 69 65 77   drop those view
2810: 73 20 75 73 69 6e 67 20 5b 44 52 4f 50 20 56 49  s using [DROP VI
2820: 45 57 5d 20 61 6e 64 20 72 65 63 72 65 61 74 65  EW] and recreate
2830: 20 74 68 65 6d 0a 77 69 74 68 20 77 68 61 74 65   them.with whate
2840: 76 65 72 20 63 68 61 6e 67 65 73 20 61 72 65 20  ver changes are 
2850: 6e 65 63 65 73 73 61 72 79 20 74 6f 20 61 63 63  necessary to acc
2860: 6f 6d 6d 6f 64 61 74 65 20 74 68 65 20 73 63 68  ommodate the sch
2870: 65 6d 61 20 63 68 61 6e 67 65 0a 75 73 69 6e 67  ema change.using
2880: 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2e 0a   [CREATE VIEW]..
2890: 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65  .<li><p>.If fore
28a0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
28b0: 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69 6e 61  nts were origina
28c0: 6c 6c 79 20 65 6e 61 62 6c 65 64 0a 74 68 65 6e  lly enabled.then
28d0: 20 72 75 6e 20 5b 50 52 41 47 4d 41 20 66 6f 72   run [PRAGMA for
28e0: 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 5d 20  eign_key_check] 
28f0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
2900: 68 65 20 73 63 68 65 6d 61 0a 63 68 61 6e 67 65  he schema.change
2910: 20 64 69 64 20 6e 6f 74 20 62 72 65 61 6b 20 61   did not break a
2920: 6e 79 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ny foreign key c
2930: 6f 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 0a 3c 6c  onstraints....<l
2940: 69 3e 3c 70 3e 0a 43 6f 6d 6d 69 74 20 74 68 65  i><p>.Commit the
2950: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61   transaction sta
2960: 72 74 65 64 20 69 6e 20 73 74 65 70 20 32 2e 0a  rted in step 2..
2970: 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65  .<li><p>.If fore
2980: 69 67 6e 20 6b 65 79 73 20 63 6f 6e 73 74 72 61  ign keys constra
2990: 69 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69 6e  ints were origin
29a0: 61 6c 6c 79 20 65 6e 61 62 6c 65 64 2c 20 72 65  ally enabled, re
29b0: 65 6e 61 62 6c 65 20 74 68 65 6d 20 6e 6f 77 2e  enable them now.
29c0: 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  .</ol>..<tcl>hd_
29d0: 66 72 61 67 6d 65 6e 74 20 63 61 75 74 69 6f 6e  fragment caution
29e0: 3c 2f 74 63 6c 3e 0a 3c 70 3e 0a 3c 62 3e 43 61  </tcl>.<p>.<b>Ca
29f0: 75 74 69 6f 6e 3a 3c 2f 62 3e 0a 54 61 6b 65 20  ution:</b>.Take 
2a00: 63 61 72 65 20 74 6f 20 66 6f 6c 6c 6f 77 20 74  care to follow t
2a10: 68 65 20 70 72 6f 63 65 64 75 72 65 20 61 62 6f  he procedure abo
2a20: 76 65 20 70 72 65 63 69 73 65 6c 79 2e 20 20 54  ve precisely.  T
2a30: 68 65 20 62 6f 78 65 73 20 62 65 6c 6f 77 0a 73  he boxes below.s
2a40: 75 6d 6d 61 72 69 7a 65 20 74 77 6f 20 70 72 6f  ummarize two pro
2a50: 63 65 64 75 72 65 73 20 66 6f 72 20 6d 6f 64 69  cedures for modi
2a60: 66 79 69 6e 67 20 61 20 74 61 62 6c 65 20 64 65  fying a table de
2a70: 66 69 6e 69 74 69 6f 6e 2e 20 20 41 74 20 66 69  finition.  At fi
2a80: 72 73 74 0a 67 6c 61 6e 63 65 2c 20 74 68 65 79  rst.glance, they
2a90: 20 62 6f 74 68 20 61 70 70 65 61 72 20 74 6f 20   both appear to 
2aa0: 61 63 63 6f 6d 70 6c 69 73 68 20 74 68 65 20 73  accomplish the s
2ab0: 61 6d 65 20 74 68 69 6e 67 2e 20 20 48 6f 77 65  ame thing.  Howe
2ac0: 76 65 72 2c 20 74 68 65 0a 70 72 6f 63 65 64 75  ver, the.procedu
2ad0: 72 65 20 6f 6e 20 74 68 65 20 72 69 67 68 74 20  re on the right 
2ae0: 64 6f 65 73 20 6e 6f 74 20 61 6c 77 61 79 73 20  does not always 
2af0: 77 6f 72 6b 2c 20 65 73 70 65 63 69 61 6c 6c 79  work, especially
2b00: 20 77 69 74 68 20 74 68 65 0a 65 6e 68 61 6e 63   with the.enhanc
2b10: 65 64 20 5b 72 65 6e 61 6d 65 20 74 61 62 6c 65  ed [rename table
2b20: 5d 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 61  ] capabilities a
2b30: 64 64 65 64 20 62 79 20 76 65 72 73 69 6f 6e 73  dded by versions
2b40: 20 33 2e 32 35 2e 30 20 61 6e 64 0a 33 2e 32 36   3.25.0 and.3.26
2b50: 2e 30 2e 20 20 49 6e 20 74 68 65 20 70 72 6f 63  .0.  In the proc
2b60: 65 64 75 72 65 20 6f 6e 20 74 68 65 20 72 69 67  edure on the rig
2b70: 68 74 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 20  ht, the initial 
2b80: 72 65 6e 61 6d 65 20 6f 66 20 74 68 65 0a 74 61  rename of the.ta
2b90: 62 6c 65 20 74 6f 20 61 20 74 65 6d 70 6f 72 61  ble to a tempora
2ba0: 72 79 20 6e 61 6d 65 20 6d 69 67 68 74 20 63 6f  ry name might co
2bb0: 72 72 75 70 74 20 72 65 66 65 72 65 6e 63 65 73  rrupt references
2bc0: 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 69   to that table i
2bd0: 6e 0a 74 72 69 67 67 65 72 73 2c 20 76 69 65 77  n.triggers, view
2be0: 73 2c 20 61 6e 64 20 66 6f 72 65 69 67 6e 20 6b  s, and foreign k
2bf0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  ey constraints. 
2c00: 20 54 68 65 20 73 61 66 65 20 70 72 6f 63 65 64   The safe proced
2c10: 75 72 65 20 6f 6e 0a 74 68 65 20 6c 65 66 74 20  ure on.the left 
2c20: 63 6f 6e 73 74 72 75 63 74 73 20 74 68 65 20 72  constructs the r
2c30: 65 76 69 73 65 64 20 74 61 62 6c 65 20 64 65 66  evised table def
2c40: 69 6e 69 74 69 6f 6e 20 75 73 69 6e 67 20 61 20  inition using a 
2c50: 6e 65 77 20 74 65 6d 70 6f 72 61 72 79 0a 6e 61  new temporary.na
2c60: 6d 65 2c 20 74 68 65 6e 20 72 65 6e 61 6d 65 73  me, then renames
2c70: 20 74 68 65 20 74 61 62 6c 65 20 69 6e 74 6f 20   the table into 
2c80: 69 74 73 20 66 69 6e 61 6c 20 6e 61 6d 65 2c 20  its final name, 
2c90: 77 68 69 63 68 20 64 6f 65 73 20 6e 6f 74 20 62  which does not b
2ca0: 72 65 61 6b 0a 6c 69 6e 6b 73 2e 0a 0a 3c 63 65  reak.links...<ce
2cb0: 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  nter>.<table bor
2cc0: 64 65 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 64  der="1" cellpadd
2cd0: 69 6e 67 3d 22 31 30 22 20 63 65 6c 6c 73 70 61  ing="10" cellspa
2ce0: 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 0a 3c  cing="0">.<tr>.<
2cf0: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
2d00: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 43 72 65 61 74 65  .<ol>.<li>Create
2d10: 20 6e 65 77 20 74 61 62 6c 65 0a 3c 6c 69 3e 43   new table.<li>C
2d20: 6f 70 79 20 64 61 74 61 0a 3c 6c 69 3e 44 72 6f  opy data.<li>Dro
2d30: 70 20 6f 6c 64 20 74 61 62 6c 65 0a 3c 6c 69 3e  p old table.<li>
2d40: 52 65 6e 61 6d 65 20 6e 65 77 20 69 6e 74 6f 20  Rename new into 
2d50: 6f 6c 64 0a 3c 2f 6f 6c 3e 0a 3c 74 64 20 76 61  old.</ol>.<td va
2d60: 6c 69 67 6e 3d 22 74 6f 70 22 3e 0a 3c 6f 6c 3e  lign="top">.<ol>
2d70: 0a 3c 6c 69 3e 52 65 6e 61 6d 65 20 6f 6c 64 20  .<li>Rename old 
2d80: 74 61 62 6c 65 0a 3c 6c 69 3e 43 72 65 61 74 65  table.<li>Create
2d90: 20 6e 65 77 20 74 61 62 6c 65 0a 3c 6c 69 3e 43   new table.<li>C
2da0: 6f 70 79 20 64 61 74 61 0a 3c 6c 69 3e 44 72 6f  opy data.<li>Dro
2db0: 70 20 6f 6c 64 20 74 61 62 6c 65 0a 3c 2f 6f 6c  p old table.</ol
2dc0: 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 26 75 61 72 72  >.<tr>.<th>&uarr
2dd0: 3b 3c 62 72 3e 43 6f 72 72 65 63 74 0a 3c 74 68  ;<br>Correct.<th
2de0: 3e 26 75 61 72 72 3b 3c 62 72 3e 49 6e 63 6f 72  >&uarr;<br>Incor
2df0: 72 65 63 74 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  rect.</table>.</
2e00: 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 54 68 65 20  center>..<p>The 
2e10: 31 32 2d 73 74 65 70 20 5b 67 65 6e 65 72 61 6c  12-step [general
2e20: 69 7a 65 64 20 41 4c 54 45 52 20 54 41 42 4c 45  ized ALTER TABLE
2e30: 20 70 72 6f 63 65 64 75 72 65 5d 0a 61 62 6f 76   procedure].abov
2e40: 65 20 77 69 6c 6c 20 77 6f 72 6b 20 65 76 65 6e  e will work even
2e50: 20 69 66 20 74 68 65 0a 73 63 68 65 6d 61 20 63   if the.schema c
2e60: 68 61 6e 67 65 20 63 61 75 73 65 73 20 74 68 65  hange causes the
2e70: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 74 6f   information sto
2e80: 72 65 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  red in the table
2e90: 20 74 6f 20 63 68 61 6e 67 65 2e 0a 53 6f 20 74   to change..So t
2ea0: 68 65 20 66 75 6c 6c 20 31 32 2d 73 74 65 70 20  he full 12-step 
2eb0: 70 72 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20  procedure above 
2ec0: 69 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  is appropriate f
2ed0: 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20 63 6f  or dropping a co
2ee0: 6c 75 6d 6e 2c 0a 63 68 61 6e 67 69 6e 67 20 74  lumn,.changing t
2ef0: 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75  he order of colu
2f00: 6d 6e 73 2c 20 61 64 64 69 6e 67 20 6f 72 20 72  mns, adding or r
2f10: 65 6d 6f 76 69 6e 67 20 61 20 55 4e 49 51 55 45  emoving a UNIQUE
2f20: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 6f 72 20 50   constraint.or P
2f30: 52 49 4d 41 52 59 20 4b 45 59 2c 20 61 64 64 69  RIMARY KEY, addi
2f40: 6e 67 20 43 48 45 43 4b 20 6f 72 20 46 4f 52 45  ng CHECK or FORE
2f50: 49 47 4e 20 4b 45 59 20 6f 72 20 4e 4f 54 20 4e  IGN KEY or NOT N
2f60: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  ULL constraints,
2f70: 0a 6f 72 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .or changing the
2f80: 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 61 20   datatype for a 
2f90: 63 6f 6c 75 6d 6e 2c 20 66 6f 72 20 65 78 61 6d  column, for exam
2fa0: 70 6c 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 61  ple.  However, a
2fb0: 20 73 69 6d 70 6c 65 72 0a 61 6e 64 20 66 61 73   simpler.and fas
2fc0: 74 65 72 20 70 72 6f 63 65 64 75 72 65 20 63 61  ter procedure ca
2fd0: 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20  n optionally be 
2fe0: 75 73 65 64 20 66 6f 72 0a 73 6f 6d 65 20 63 68  used for.some ch
2ff0: 61 6e 67 65 73 20 74 68 61 74 20 64 6f 20 6e 6f  anges that do no
3000: 20 61 66 66 65 63 74 20 74 68 65 20 6f 6e 2d 64   affect the on-d
3010: 69 73 6b 20 63 6f 6e 74 65 6e 74 20 69 6e 20 61  isk content in a
3020: 6e 79 20 77 61 79 2e 0a 54 68 65 20 66 6f 6c 6c  ny way..The foll
3030: 6f 77 69 6e 67 20 73 69 6d 70 6c 65 72 20 70 72  owing simpler pr
3040: 6f 63 65 64 75 72 65 20 69 73 20 61 70 70 72 6f  ocedure is appro
3050: 70 72 69 61 74 65 20 66 6f 72 20 72 65 6d 6f 76  priate for remov
3060: 69 6e 67 0a 43 48 45 43 4b 20 6f 72 20 46 4f 52  ing.CHECK or FOR
3070: 45 49 47 4e 20 4b 45 59 20 6f 72 20 4e 4f 54 20  EIGN KEY or NOT 
3080: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73  NULL constraints
3090: 2c 0a 6f 72 20 61 64 64 69 6e 67 2c 20 72 65 6d  ,.or adding, rem
30a0: 6f 76 69 6e 67 2c 20 6f 72 20 63 68 61 6e 67 69  oving, or changi
30b0: 6e 67 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ng default value
30c0: 73 20 6f 6e 0a 61 20 63 6f 6c 75 6d 6e 2e 0a 0a  s on.a column...
30d0: 3c 6f 6c 3e 0a 3c 6c 49 3e 3c 70 3e 20 53 74 61  <ol>.<lI><p> Sta
30e0: 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
30f0: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20 5b  ...<li><p> Run [
3100: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
3110: 72 73 69 6f 6e 5d 20 74 6f 20 64 65 74 65 72 6d  rsion] to determ
3120: 69 6e 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ine the current 
3130: 73 63 68 65 6d 61 0a 76 65 72 73 69 6f 6e 20 6e  schema.version n
3140: 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6e 75 6d  umber.  This num
3150: 62 65 72 20 77 69 6c 6c 20 62 65 20 6e 65 65 64  ber will be need
3160: 65 64 20 66 6f 72 20 73 74 65 70 20 36 20 62 65  ed for step 6 be
3170: 6c 6f 77 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 41 63  low...<li><p> Ac
3180: 74 69 76 61 74 65 20 73 63 68 65 6d 61 20 65 64  tivate schema ed
3190: 69 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50 52  iting using .[PR
31a0: 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63  AGMA writable_sc
31b0: 68 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77 72  hema | PRAGMA wr
31c0: 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e  itable_schema=ON
31d0: 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20  ]...<li><p> Run 
31e0: 61 6e 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74  an [UPDATE] stat
31f0: 65 6d 65 6e 74 20 74 6f 20 63 68 61 6e 67 65 20  ement to change 
3200: 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
3210: 66 20 74 61 62 6c 65 20 58 0a 69 6e 20 74 68 65  f table X.in the
3220: 20 5b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20   [sqlite_master 
3230: 74 61 62 6c 65 5d 3a 20 0a 55 50 44 41 54 45 20  table]: .UPDATE 
3240: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 53 45  sqlite_master SE
3250: 54 20 73 71 6c 3d 2e 2e 2e 20 57 48 45 52 45 20  T sql=... WHERE 
3260: 74 79 70 65 3d 27 74 61 62 6c 65 27 20 41 4e 44  type='table' AND
3270: 20 6e 61 6d 65 3d 27 58 27 3b 0a 3c 70 3e 3c 65   name='X';.<p><e
3280: 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20  m>Caution:</em> 
3290: 20 4d 61 6b 69 6e 67 20 61 20 63 68 61 6e 67 65   Making a change
32a0: 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   to the sqlite_m
32b0: 61 73 74 65 72 20 74 61 62 6c 65 20 6c 69 6b 65  aster table like
32c0: 20 74 68 69 73 20 77 69 6c 6c 0a 72 65 6e 64 65   this will.rende
32d0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  r the database c
32e0: 6f 72 72 75 70 74 20 61 6e 64 20 75 6e 72 65 61  orrupt and unrea
32f0: 64 61 62 6c 65 20 69 66 20 74 68 65 20 63 68 61  dable if the cha
3300: 6e 67 65 20 63 6f 6e 74 61 69 6e 73 0a 61 20 73  nge contains.a s
3310: 79 6e 74 61 78 20 65 72 72 6f 72 2e 20 20 49 74  yntax error.  It
3320: 20 69 73 20 73 75 67 67 65 73 74 65 64 20 74 68   is suggested th
3330: 61 74 20 63 61 72 65 66 75 6c 20 74 65 73 74 69  at careful testi
3340: 6e 67 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  ng of the UPDATE
3350: 0a 73 74 61 74 65 6d 65 6e 74 20 62 65 20 64 6f  .statement be do
3360: 6e 65 20 6f 6e 20 61 20 73 65 70 61 72 61 74 65  ne on a separate
3370: 20 62 6c 61 6e 6b 20 64 61 74 61 62 61 73 65 20   blank database 
3380: 70 72 69 6f 72 20 74 6f 20 75 73 69 6e 67 20 69  prior to using i
3390: 74 20 6f 6e 0a 61 20 64 61 74 61 62 61 73 65 20  t on.a database 
33a0: 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6d 70 6f 72  containing impor
33b0: 74 61 6e 74 20 64 61 74 61 2e 0a 0a 3c 6c 69 3e  tant data...<li>
33c0: 3c 70 3e 20 49 66 20 74 68 65 20 63 68 61 6e 67  <p> If the chang
33d0: 65 20 74 6f 20 74 61 62 6c 65 20 58 20 61 6c 73  e to table X als
33e0: 6f 20 61 66 66 65 63 74 73 20 6f 74 68 65 72 20  o affects other 
33f0: 74 61 62 6c 65 73 20 6f 72 20 69 6e 64 65 78 65  tables or indexe
3400: 73 20 6f 72 0a 74 72 69 67 67 65 72 73 20 61 72  s or.triggers ar
3410: 65 20 76 69 65 77 73 20 77 69 74 68 69 6e 20 73  e views within s
3420: 63 68 65 6d 61 2c 20 74 68 65 6e 20 72 75 6e 20  chema, then run 
3430: 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65  [UPDATE] stateme
3440: 6e 74 73 20 74 6f 20 6d 6f 64 69 66 79 0a 74 68  nts to modify.th
3450: 6f 73 65 20 6f 74 68 65 72 20 74 61 62 6c 65 73  ose other tables
3460: 20 69 6e 64 65 78 65 73 20 61 6e 64 20 76 69 65   indexes and vie
3470: 77 73 20 74 6f 6f 2e 20 20 46 6f 72 20 65 78 61  ws too.  For exa
3480: 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 6e 61 6d  mple, if the nam
3490: 65 20 6f 66 0a 61 20 63 6f 6c 75 6d 6e 20 63 68  e of.a column ch
34a0: 61 6e 67 65 73 2c 20 61 6c 6c 20 46 4f 52 45 49  anges, all FOREI
34b0: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
34c0: 74 73 2c 20 74 72 69 67 67 65 72 73 2c 20 69 6e  ts, triggers, in
34d0: 64 65 78 65 73 2c 20 61 6e 64 0a 76 69 65 77 73  dexes, and.views
34e0: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
34f0: 68 61 74 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20  hat column must 
3500: 62 65 20 6d 6f 64 69 66 69 65 64 2e 0a 3c 70 3e  be modified..<p>
3510: 3c 65 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d  <em>Caution:</em
3520: 3e 20 20 4f 6e 63 65 20 61 67 61 69 6e 2c 20 6d  >  Once again, m
3530: 61 6b 69 6e 67 20 63 68 61 6e 67 65 73 20 74 6f  aking changes to
3540: 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
3550: 65 72 20 0a 74 61 62 6c 65 20 6c 69 6b 65 20 74  er .table like t
3560: 68 69 73 20 77 69 6c 6c 20 72 65 6e 64 65 72 20  his will render 
3570: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 72  the database cor
3580: 72 75 70 74 20 61 6e 64 20 75 6e 72 65 61 64 61  rupt and unreada
3590: 62 6c 65 20 69 66 20 74 68 65 20 0a 63 68 61 6e  ble if the .chan
35a0: 67 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65  ge contains an e
35b0: 72 72 6f 72 2e 20 20 43 61 72 65 66 75 6c 6c 79  rror.  Carefully
35c0: 20 74 65 73 74 20 74 68 69 73 20 65 6e 74 69 72   test this entir
35d0: 65 20 70 72 6f 63 65 64 75 72 65 0a 6f 6e 20 61  e procedure.on a
35e0: 20 73 65 70 61 72 61 74 65 20 74 65 73 74 20 64   separate test d
35f0: 61 74 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f  atabase prior to
3600: 20 75 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64   using it on.a d
3610: 61 74 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69  atabase containi
3620: 6e 67 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74  ng important dat
3630: 61 20 61 6e 64 2f 6f 72 20 6d 61 6b 65 20 62 61  a and/or make ba
3640: 63 6b 75 70 20 63 6f 70 69 65 73 20 6f 66 0a 69  ckup copies of.i
3650: 6d 70 6f 72 74 61 6e 74 20 64 61 74 61 62 61 73  mportant databas
3660: 65 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e  es prior to runn
3670: 69 6e 67 20 74 68 69 73 20 70 72 6f 63 65 64 75  ing this procedu
3680: 72 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 6e 63  re...<li><p> Inc
3690: 72 65 6d 65 6e 74 20 74 68 65 20 73 63 68 65 6d  rement the schem
36a0: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
36b0: 20 75 73 69 6e 67 0a 5b 50 52 41 47 4d 41 20 73   using.[PRAGMA s
36c0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7c 20  chema_version | 
36d0: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
36e0: 72 73 69 6f 6e 3d 58 5d 20 77 68 65 72 65 20 58  rsion=X] where X
36f0: 20 69 73 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61   is one.more tha
3700: 6e 20 74 68 65 20 6f 6c 64 20 73 63 68 65 6d 61  n the old schema
3710: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
3720: 66 6f 75 6e 64 20 69 6e 20 73 74 65 70 20 32 20  found in step 2 
3730: 61 62 6f 76 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20  above...<li><p> 
3740: 44 69 73 61 62 6c 65 20 73 63 68 65 6d 61 20 65  Disable schema e
3750: 64 69 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50  diting using .[P
3760: 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73  RAGMA writable_s
3770: 63 68 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77  chema | PRAGMA w
3780: 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
3790: 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 28 4f  FF]...<li><p> (O
37a0: 70 74 69 6f 6e 61 6c 29 20 52 75 6e 20 5b 50 52  ptional) Run [PR
37b0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
37c0: 68 65 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20  heck] to verify 
37d0: 74 68 61 74 20 74 68 65 0a 73 63 68 65 6d 61 20  that the.schema 
37e0: 63 68 61 6e 67 65 73 20 64 69 64 20 6e 6f 74 20  changes did not 
37f0: 64 61 6d 61 67 65 20 74 68 65 20 64 61 74 61 62  damage the datab
3800: 61 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 43 6f  ase...<li><p> Co
3810: 6d 6d 69 74 20 74 68 65 20 74 72 61 6e 73 61 63  mmit the transac
3820: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 6f 6e 20  tion started on 
3830: 73 74 65 70 20 31 20 61 62 6f 76 65 2e 0a 3c 2f  step 1 above..</
3840: 6f 6c 3e 0a 0a 3c 70 3e 49 66 20 73 6f 6d 65 20  ol>..<p>If some 
3850: 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e 20 6f  future version o
3860: 66 20 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65  f SQLite adds ne
3870: 77 20 41 4c 54 45 52 20 54 41 42 4c 45 20 63 61  w ALTER TABLE ca
3880: 70 61 62 69 6c 69 74 69 65 73 2c 20 0a 74 68 6f  pabilities, .tho
3890: 73 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20  se capabilities 
38a0: 77 69 6c 6c 20 76 65 72 79 20 6c 69 6b 65 6c 79  will very likely
38b0: 20 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20   use one of the 
38c0: 74 77 6f 20 70 72 6f 63 65 64 75 72 65 73 0a 6f  two procedures.o
38d0: 75 74 6c 69 6e 65 64 20 61 62 6f 76 65 2e 0a 0a  utlined above...
38e0: 3c 74 63 6c 3e 0a 23 20 20 4f 6e 65 20 6f 66 20  <tcl>.#  One of 
38f0: 74 68 65 20 72 65 61 73 6f 6e 73 20 74 68 61 74  the reasons that
3900: 0a 23 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  .# SQLite does n
3910: 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70  ot currently sup
3920: 70 6f 72 74 20 6d 6f 72 65 20 41 4c 54 45 52 20  port more ALTER 
3930: 54 41 42 4c 45 20 63 61 70 61 62 69 6c 69 74 69  TABLE capabiliti
3940: 65 73 20 69 73 20 74 68 61 74 0a 23 20 74 68 65  es is that.# the
3950: 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f 77 6e   procedure shown
3960: 20 61 62 6f 76 65 20 69 73 20 64 69 66 66 69 63   above is diffic
3970: 75 6c 74 20 74 6f 20 61 75 74 6f 6d 61 74 65 20  ult to automate 
3980: 66 6f 72 20 61 6e 20 61 72 62 69 74 72 61 72 79  for an arbitrary
3990: 20 73 63 68 65 6d 61 2e 0a 23 20 50 61 72 74 69   schema..# Parti
39a0: 63 75 6c 61 72 6c 79 20 74 72 6f 75 62 6c 65 73  cularly troubles
39b0: 6f 6d 65 20 61 72 65 61 73 20 61 72 65 20 69 64  ome areas are id
39c0: 65 6e 74 69 66 79 69 6e 67 20 61 6c 6c 20 76 69  entifying all vi
39d0: 65 77 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ews associated w
39e0: 69 74 68 0a 23 20 74 61 62 6c 65 20 58 20 69 6e  ith.# table X in
39f0: 20 73 74 65 70 20 31 20 61 6e 64 20 63 72 65 61   step 1 and crea
3a00: 74 69 6e 67 20 6e 65 77 20 76 69 65 77 73 20 61  ting new views a
3a10: 6e 64 20 74 72 69 67 67 65 72 73 20 74 68 61 74  nd triggers that
3a20: 20 61 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 0a   are compatible.
3a30: 23 20 77 69 74 68 20 74 68 65 20 61 6c 74 65 72  # with the alter
3a40: 65 64 20 73 63 68 65 6d 61 20 66 6f 72 20 74 61  ed schema for ta
3a50: 62 6c 65 20 58 20 69 6e 20 73 74 65 70 20 36 2e  ble X in step 6.
3a60: 20 20 49 74 20 69 73 20 61 20 74 72 69 63 6b 79    It is a tricky
3a70: 20 62 75 74 20 73 6f 6c 76 61 62 6c 65 0a 23 20   but solvable.# 
3a80: 70 72 6f 62 6c 65 6d 20 74 6f 20 63 72 65 61 74  problem to creat
3a90: 65 20 63 6f 64 65 20 74 68 61 74 20 77 69 6c 6c  e code that will
3aa0: 20 70 65 72 66 6f 72 6d 20 74 68 65 20 73 74 65   perform the ste
3ab0: 70 73 20 61 62 6f 76 65 20 0a 23 20 66 6f 72 20  ps above .# for 
3ac0: 22 72 65 61 73 6f 6e 61 62 6c 65 22 20 73 63 68  "reasonable" sch
3ad0: 65 6d 61 73 20 63 6f 6d 6d 6f 6e 6c 79 20 66 6f  emas commonly fo
3ae0: 75 6e 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e  und in practice.
3af0: 20 20 0a 23 20 42 75 74 20 74 68 65 72 65 20 65    .# But there e
3b00: 78 69 73 74 20 6d 61 6c 65 76 6f 6c 65 6e 74 20  xist malevolent 
3b10: 73 63 68 65 6d 61 73 20 66 6f 72 20 77 68 69 63  schemas for whic
3b20: 68 0a 23 20 74 68 65 73 65 20 73 74 65 70 73 20  h.# these steps 
3b30: 61 72 65 20 6d 61 64 64 65 6e 69 6e 67 6c 79 20  are maddeningly 
3b40: 64 69 66 66 69 63 75 6c 74 20 74 6f 20 64 6f 20  difficult to do 
3b50: 63 6f 72 72 65 63 74 6c 79 2e 20 20 52 61 74 68  correctly.  Rath
3b60: 65 72 20 74 68 61 6e 20 63 72 65 61 74 65 0a 23  er than create.#
3b70: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 66 65 61   ALTER TABLE fea
3b80: 74 75 72 65 73 20 74 68 61 74 20 77 6f 72 6b 20  tures that work 
3b90: 63 6f 72 72 65 63 74 6c 79 20 39 39 2e 39 25 20  correctly 99.9% 
3ba0: 6f 66 20 74 68 65 20 74 69 6d 65 20 62 75 74 20  of the time but 
3bb0: 70 6f 73 73 69 62 6c 79 0a 23 20 63 6f 72 72 75  possibly.# corru
3bc0: 70 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 6e  pt the schema on
3bd0: 20 74 68 65 20 6f 74 68 65 72 20 30 2e 31 25 2c   the other 0.1%,
3be0: 20 74 68 65 20 53 51 4c 69 74 65 20 64 65 76 65   the SQLite deve
3bf0: 6c 6f 70 65 72 73 20 68 61 76 65 20 64 65 63 69  lopers have deci
3c00: 64 65 64 0a 23 20 74 6f 20 70 75 73 68 20 74 68  ded.# to push th
3c10: 65 20 70 72 6f 62 6c 65 6d 20 69 6e 74 6f 20 74  e problem into t
3c20: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  he application d
3c30: 6f 6d 61 69 6e 2c 20 77 68 65 72 65 20 69 74 20  omain, where it 
3c40: 69 73 20 6d 75 63 68 20 65 61 73 69 65 72 0a 23  is much easier.#
3c50: 20 74 6f 20 73 6f 6c 76 65 2e 0a 3c 2f 74 63 6c   to solve..</tcl
3c60: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
3c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cb0: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
3cc0: 20 7b 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79   {ANALYZE} analy
3cd0: 7a 65 20 41 4e 41 4c 59 5a 45 0a 0a 52 65 63 75  ze ANALYZE..Recu
3ce0: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
3cf0: 61 6d 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 0a  am analyze-stmt.
3d00: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65  </tcl>..<p> ^The
3d10: 20 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64   ANALYZE command
3d20: 20 67 61 74 68 65 72 73 20 73 74 61 74 69 73 74   gathers statist
3d30: 69 63 73 20 61 62 6f 75 74 20 74 61 62 6c 65 73  ics about tables
3d40: 20 61 6e 64 0a 69 6e 64 69 63 65 73 20 61 6e 64   and.indices and
3d50: 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 6c   stores the coll
3d60: 65 63 74 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f  ected informatio
3d70: 6e 0a 69 6e 20 5b 69 6e 74 65 72 6e 61 6c 20 74  n.in [internal t
3d80: 61 62 6c 65 73 5d 20 6f 66 20 74 68 65 20 64 61  ables] of the da
3d90: 74 61 62 61 73 65 20 77 68 65 72 65 20 74 68 65  tabase where the
3da0: 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
3db0: 20 63 61 6e 0a 61 63 63 65 73 73 20 74 68 65 20   can.access the 
3dc0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20  information and 
3dd0: 75 73 65 20 69 74 20 74 6f 20 68 65 6c 70 20 6d  use it to help m
3de0: 61 6b 65 20 62 65 74 74 65 72 20 71 75 65 72 79  ake better query
3df0: 20 70 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63 65   planning choice
3e00: 73 2e 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d 65  s..^If no argume
3e10: 6e 74 73 20 61 72 65 20 67 69 76 65 6e 2c 20 61  nts are given, a
3e20: 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
3e30: 62 61 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a  bases are.analyz
3e40: 65 64 2e 20 20 5e 49 66 20 61 20 73 63 68 65 6d  ed.  ^If a schem
3e50: 61 20 6e 61 6d 65 20 69 73 20 67 69 76 65 6e 20  a name is given 
3e60: 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2c  as the argument,
3e70: 20 74 68 65 6e 20 61 6c 6c 20 74 61 62 6c 65 73   then all tables
3e80: 0a 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20  .and indices in 
3e90: 74 68 61 74 20 6f 6e 65 20 64 61 74 61 62 61 73  that one databas
3ea0: 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20  e are analyzed. 
3eb0: 20 0a 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65   .^If the argume
3ec0: 6e 74 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61  nt is a table na
3ed0: 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  me, then only th
3ee0: 61 74 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  at table and the
3ef0: 0a 69 6e 64 69 63 65 73 20 61 73 73 6f 63 69 61  .indices associa
3f00: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74 61  ted with that ta
3f10: 62 6c 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64  ble are analyzed
3f20: 2e 20 20 5e 49 66 20 74 68 65 20 61 72 67 75 6d  .  ^If the argum
3f30: 65 6e 74 0a 69 73 20 61 6e 20 69 6e 64 65 78 20  ent.is an index 
3f40: 6e 61 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20  name, then only 
3f50: 74 68 61 74 20 6f 6e 65 20 69 6e 64 65 78 20 69  that one index i
3f60: 73 20 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a  s analyzed.</p>.
3f70: 0a 3c 70 3e 20 5e 54 68 65 20 64 65 66 61 75 6c  .<p> ^The defaul
3f80: 74 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  t implementation
3f90: 20 73 74 6f 72 65 73 20 61 6c 6c 20 73 74 61 74   stores all stat
3fa0: 69 73 74 69 63 73 20 69 6e 20 61 20 73 69 6e 67  istics in a sing
3fb0: 6c 65 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20 22  le.table named "
3fc0: 5b 73 71 6c 69 74 65 5f 73 74 61 74 31 5d 22 2e  [sqlite_stat1]".
3fd0: 20 20 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20    ^If SQLite is 
3fe0: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
3ff0: 65 0a 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e.[SQLITE_ENABLE
4000: 5f 53 54 41 54 33 5d 20 6f 70 74 69 6f 6e 20 61  _STAT3] option a
4010: 6e 64 20 77 69 74 68 6f 75 74 20 74 68 65 20 5b  nd without the [
4020: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
4030: 41 54 34 5d 0a 6f 70 74 69 6f 6e 2c 20 74 68 65  AT4].option, the
4040: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73  n additional his
4050: 74 6f 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63  togram data is.c
4060: 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f  ollected and sto
4070: 72 65 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73  red in [sqlite_s
4080: 74 61 74 33 5d 2e 0a 20 5e 49 66 20 53 51 4c 69  tat3].. ^If SQLi
4090: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
40a0: 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f  ith the.[SQLITE_
40b0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 6f 70  ENABLE_STAT4] op
40c0: 74 69 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74  tion, then addit
40d0: 69 6f 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20  ional histogram 
40e0: 64 61 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65  data is.collecte
40f0: 64 20 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20  d and stored in 
4100: 5b 73 71 6c 69 74 65 5f 73 74 61 74 34 5d 2e 0a  [sqlite_stat4]..
4110: 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Older versions o
4120: 66 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 6d  f SQLite would m
4130: 61 6b 65 20 75 73 65 20 6f 66 20 74 68 65 20 5b  ake use of the [
4140: 73 71 6c 69 74 65 5f 73 74 61 74 32 5d 20 74 61  sqlite_stat2] ta
4150: 62 6c 65 0a 77 68 65 6e 20 63 6f 6d 70 69 6c 65  ble.when compile
4160: 64 20 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45  d with [SQLITE_E
4170: 4e 41 42 4c 45 5f 53 54 41 54 32 5d 20 62 75 74  NABLE_STAT2] but
4180: 20 61 6c 6c 20 72 65 63 65 6e 74 20 76 65 72 73   all recent vers
4190: 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 69  ions of.SQLite i
41a0: 67 6e 6f 72 65 20 74 68 65 20 73 71 6c 69 74 65  gnore the sqlite
41b0: 5f 73 74 61 74 32 20 74 61 62 6c 65 2e 0a 46 75  _stat2 table..Fu
41c0: 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ture enhancement
41d0: 73 20 6d 61 79 20 63 72 65 61 74 65 0a 61 64 64  s may create.add
41e0: 69 74 69 6f 6e 61 6c 20 5b 69 6e 74 65 72 6e 61  itional [interna
41f0: 6c 20 74 61 62 6c 65 73 5d 20 77 69 74 68 20 74  l tables] with t
4200: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 70 61 74  he same name pat
4210: 74 65 72 6e 20 65 78 63 65 70 74 20 77 69 74 68  tern except with
4220: 0a 66 69 6e 61 6c 20 64 69 67 69 74 20 6c 61 72  .final digit lar
4230: 67 65 72 20 74 68 61 6e 20 22 34 22 2e 0a 41 6c  ger than "4"..Al
4240: 6c 20 6f 66 20 74 68 65 73 65 20 74 61 62 6c 65  l of these table
4250: 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65  s are collective
4260: 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20 61  ly referred to a
4270: 73 20 22 73 74 61 74 69 73 74 69 63 73 20 74 61  s "statistics ta
4280: 62 6c 65 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  bles"..</p>..<p>
4290: 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66   ^The content of
42a0: 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20   the statistics 
42b0: 74 61 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75  tables can be qu
42c0: 65 72 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c  eried using [SEL
42d0: 45 43 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20  ECT].and can be 
42e0: 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 74 68  changed using th
42f0: 65 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53  e [DELETE], [INS
4300: 45 52 54 5d 2c 20 61 6e 64 20 5b 55 50 44 41 54  ERT], and [UPDAT
4310: 45 5d 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e 28 54  E] commands..^(T
4320: 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20  he [DROP TABLE] 
4330: 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 6f 6e  command works on
4340: 20 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c   statistics tabl
4350: 65 73 0a 61 73 20 6f 66 20 53 51 4c 69 74 65 20  es.as of SQLite 
4360: 76 65 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 29 5e  version 3.7.9.)^
4370: 20 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e 39 5d   ([dateof:3.7.9]
4380: 29 0a 5e 54 68 65 20 5b 41 4c 54 45 52 20 54 41  ).^The [ALTER TA
4390: 42 4c 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  BLE] command doe
43a0: 73 20 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 73 74  s not work on st
43b0: 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73 2e  atistics tables.
43c0: 0a 41 70 70 72 6f 70 72 69 61 74 65 20 63 61 72  .Appropriate car
43d0: 65 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  e should be used
43e0: 20 77 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74   when changing t
43f0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
4400: 65 20 73 74 61 74 69 73 74 69 63 73 0a 74 61 62  e statistics.tab
4410: 6c 65 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63  les as invalid c
4420: 6f 6e 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65  ontent can cause
4430: 20 53 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63   SQLite to selec
4440: 74 20 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75  t inefficient.qu
4450: 65 72 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65  ery plans.  Gene
4460: 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20  rally speaking, 
4470: 6f 6e 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d  one should not m
4480: 6f 64 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e  odify the conten
4490: 74 20 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74  t of.the statist
44a0: 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e  ics tables by an
44b0: 79 20 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65  y mechanism othe
44c0: 72 20 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20  r than invoking 
44d0: 74 68 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d  the.ANALYZE comm
44e0: 61 6e 64 2e 20 20 0a 53 65 65 20 22 5b 4d 61 6e  and.  .See "[Man
44f0: 75 61 6c 20 43 6f 6e 74 72 6f 6c 20 4f 66 20 51  ual Control Of Q
4500: 75 65 72 79 20 50 6c 61 6e 73 20 55 73 69 6e 67  uery Plans Using
4510: 20 53 51 4c 49 54 45 5f 53 54 41 54 20 54 61 62   SQLITE_STAT Tab
4520: 6c 65 73 5d 22 20 66 6f 72 0a 66 75 72 74 68 65  les]" for.furthe
4530: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f  r information.</
4540: 70 3e 0a 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74  p>..<p> ^Statist
4550: 69 63 73 20 67 61 74 68 65 72 65 64 20 62 79 20  ics gathered by 
4560: 41 4e 41 4c 59 5a 45 20 61 72 65 20 6e 6f 74 20  ANALYZE are not 
4570: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70  automatically up
4580: 64 61 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e  dated as.the con
4590: 74 65 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61  tent of the data
45a0: 62 61 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49  base changes.  I
45b0: 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
45c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 63 68   the database.ch
45d0: 61 6e 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e  anges significan
45e0: 74 6c 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64  tly, or if the d
45f0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
4600: 68 61 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65  hanges, then one
4610: 20 73 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72   should.consider
4620: 20 72 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41   rerunning the A
4630: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69  NALYZE command i
4640: 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74  n order to updat
4650: 65 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  e the statistics
4660: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 71  .</p>..<p> The q
4670: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6c 6f 61  uery planner loa
4680: 64 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ds the content o
4690: 66 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  f the statistics
46a0: 20 74 61 62 6c 65 73 0a 69 6e 74 6f 20 6d 65 6d   tables.into mem
46b0: 6f 72 79 20 77 68 65 6e 20 74 68 65 20 73 63 68  ory when the sch
46c0: 65 6d 61 20 69 73 20 72 65 61 64 2e 20 20 5e 48  ema is read.  ^H
46d0: 65 6e 63 65 2c 20 77 68 65 6e 20 61 6e 20 61 70  ence, when an ap
46e0: 70 6c 69 63 61 74 69 6f 6e 0a 63 68 61 6e 67 65  plication.change
46f0: 73 20 74 68 65 20 73 74 61 74 69 73 74 69 63 73  s the statistics
4700: 20 74 61 62 6c 65 73 20 64 69 72 65 63 74 6c 79   tables directly
4710: 2c 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f  , SQLite will no
4720: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 6e 6f  t immediately.no
4730: 74 69 63 65 20 74 68 65 20 63 68 61 6e 67 65 73  tice the changes
4740: 2e 20 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f  . ^An applicatio
4750: 6e 0a 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20  n.can force the 
4760: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f  query planner to
4770: 20 72 65 72 65 61 64 20 74 68 65 20 73 74 61 74   reread the stat
4780: 69 73 74 69 63 73 20 74 61 62 6c 65 73 20 62 79  istics tables by
4790: 20 72 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c   running.<b>ANAL
47a0: 59 5a 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  YZE sqlite_maste
47b0: 72 3c 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 74 63  r</b>. </p>..<tc
47c0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 61 75  l>hd_fragment au
47d0: 74 6f 61 6e 61 6c 79 7a 65 20 7b 61 75 74 6f 6d  toanalyze {autom
47e0: 61 74 69 63 61 6c 6c 79 20 72 75 6e 6e 69 6e 67  atically running
47f0: 20 41 4e 41 4c 59 5a 45 7d 3c 2f 74 63 6c 3e 0a   ANALYZE}</tcl>.
4800: 3c 68 32 3e 41 75 74 6f 6d 61 74 69 63 61 6c 6c  <h2>Automaticall
4810: 79 20 52 75 6e 6e 69 6e 67 20 41 4e 41 4c 59 5a  y Running ANALYZ
4820: 45 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 5b  E</h2>..<p>The [
4830: 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d  PRAGMA optimize]
4840: 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 61 75   command will au
4850: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 75 6e 20  tomatically run 
4860: 41 4e 41 4c 59 5a 45 20 6f 6e 20 69 6e 64 69 76  ANALYZE on indiv
4870: 69 64 75 61 6c 0a 74 61 62 6c 65 73 20 6f 6e 20  idual.tables on 
4880: 61 6e 20 61 73 2d 6e 65 65 64 65 64 20 62 61 73  an as-needed bas
4890: 69 73 2e 20 20 54 68 65 20 72 65 63 6f 6d 6d 65  is.  The recomme
48a0: 6e 64 65 64 20 70 72 61 63 74 69 63 65 20 69 73  nded practice is
48b0: 20 66 6f 72 20 61 70 70 6c 69 63 61 74 69 6f 6e   for application
48c0: 73 0a 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20  s.to invoke the 
48d0: 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65  [PRAGMA optimize
48e0: 5d 20 73 74 61 74 65 6d 65 6e 74 20 6a 75 73 74  ] statement just
48f0: 20 62 65 66 6f 72 65 20 63 6c 6f 73 69 6e 67 20   before closing 
4900: 65 61 63 68 20 64 61 74 61 62 61 73 65 0a 63 6f  each database.co
4910: 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  nnection.</p>..<
4920: 70 3e 45 61 63 68 20 53 51 4c 69 74 65 20 5b 64  p>Each SQLite [d
4930: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
4940: 6f 6e 5d 20 72 65 63 6f 72 64 73 20 63 61 73 65  on] records case
4950: 73 20 77 68 65 6e 20 74 68 65 20 71 75 65 72 79  s when the query
4960: 20 70 6c 61 6e 6e 65 72 20 77 6f 75 6c 64 0a 62   planner would.b
4970: 65 6e 65 66 69 74 20 66 72 6f 6d 20 68 61 76 69  enefit from havi
4980: 6e 67 20 61 63 63 75 72 61 74 65 20 72 65 73 75  ng accurate resu
4990: 6c 74 73 20 6f 66 20 41 4e 41 4c 59 5a 45 20 61  lts of ANALYZE a
49a0: 74 20 68 61 6e 64 2e 20 20 54 68 65 73 65 20 72  t hand.  These r
49b0: 65 63 6f 72 64 73 0a 61 72 65 20 68 65 6c 64 20  ecords.are held 
49c0: 69 6e 20 6d 65 6d 6f 72 79 20 61 6e 64 20 61 63  in memory and ac
49d0: 63 75 6d 75 6c 61 74 65 20 6f 76 65 72 20 74 68  cumulate over th
49e0: 65 20 6c 69 66 65 20 6f 66 20 61 20 64 61 74 61  e life of a data
49f0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
4a00: 0a 54 68 65 20 5b 50 52 41 47 4d 41 20 6f 70 74  .The [PRAGMA opt
4a10: 69 6d 69 7a 65 5d 20 63 6f 6d 6d 61 6e 64 20 6c  imize] command l
4a20: 6f 6f 6b 73 20 61 74 20 74 68 6f 73 65 20 72 65  ooks at those re
4a30: 63 6f 72 64 73 20 61 6e 64 20 72 75 6e 73 20 41  cords and runs A
4a40: 4e 41 4c 59 5a 45 20 6f 6e 20 6f 6e 6c 79 0a 74  NALYZE on only.t
4a50: 68 6f 73 65 20 74 61 62 6c 65 73 20 66 6f 72 20  hose tables for 
4a60: 77 68 69 63 68 20 6e 65 77 20 6f 72 20 75 70 64  which new or upd
4a70: 61 74 65 64 20 41 4e 41 4c 59 5a 45 20 64 61 74  ated ANALYZE dat
4a80: 61 20 73 65 65 6d 73 20 6c 69 6b 65 6c 79 20 74  a seems likely t
4a90: 6f 20 62 65 20 75 73 65 66 75 6c 2e 0a 49 6e 20  o be useful..In 
4aa0: 6d 6f 73 74 20 63 61 73 65 73 20 5b 50 52 41 47  most cases [PRAG
4ab0: 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20 77 69 6c  MA optimize] wil
4ac0: 6c 20 6e 6f 74 20 72 75 6e 20 41 4e 41 4c 59 5a  l not run ANALYZ
4ad0: 45 2c 20 62 75 74 20 69 74 20 77 69 6c 6c 20 6f  E, but it will o
4ae0: 63 63 61 73 69 6f 6e 61 6c 6c 79 0a 64 6f 20 73  ccasionally.do s
4af0: 6f 20 65 69 74 68 65 72 20 66 6f 72 20 74 61 62  o either for tab
4b00: 6c 65 73 20 74 68 61 74 20 68 61 76 65 20 6e 65  les that have ne
4b10: 76 65 72 20 62 65 66 6f 72 65 20 62 65 65 6e 20  ver before been 
4b20: 61 6e 61 6c 79 7a 65 64 2c 20 6f 72 20 66 6f 72  analyzed, or for
4b30: 20 74 61 62 6c 65 73 0a 74 68 61 74 20 68 61 76   tables.that hav
4b40: 65 20 67 72 6f 77 6e 20 73 69 67 6e 69 66 69 63  e grown signific
4b50: 61 6e 74 6c 79 20 73 69 6e 63 65 20 74 68 65 79  antly since they
4b60: 20 77 65 72 65 20 6c 61 73 74 20 61 6e 61 6c 79   were last analy
4b70: 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 69 6e  zed.</p>..<p>Sin
4b80: 63 65 20 74 68 65 20 61 63 74 69 6f 6e 73 20 6f  ce the actions o
4b90: 66 20 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69  f [PRAGMA optimi
4ba0: 7a 65 5d 20 61 72 65 20 64 65 74 65 72 6d 69 6e  ze] are determin
4bb0: 65 64 20 74 6f 20 73 6f 6d 65 20 65 78 74 65 6e  ed to some exten
4bc0: 74 20 62 79 0a 70 72 69 6f 72 20 71 75 65 72 69  t by.prior queri
4bd0: 65 73 20 74 68 61 74 20 68 61 76 65 20 62 65 65  es that have bee
4be0: 6e 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 20 74  n evaluated on t
4bf0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
4c00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 69 74 0a   connection, it.
4c10: 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74  is recommended t
4c20: 68 61 74 20 5b 50 52 41 47 4d 41 20 6f 70 74 69  hat [PRAGMA opti
4c30: 6d 69 7a 65 5d 20 62 65 20 64 65 66 65 72 72 65  mize] be deferre
4c40: 64 20 75 6e 74 69 6c 20 74 68 65 20 64 61 74 61  d until the data
4c50: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a  base connection.
4c60: 69 73 20 63 6c 6f 73 69 6e 67 20 61 6e 64 20 68  is closing and h
4c70: 61 73 20 74 68 75 73 20 68 61 64 20 61 6e 20 6f  as thus had an o
4c80: 70 70 6f 72 74 75 6e 69 74 79 20 74 6f 20 61 63  pportunity to ac
4c90: 63 75 6d 75 6c 61 74 65 20 61 73 20 6d 75 63 68  cumulate as much
4ca0: 20 75 73 61 67 65 20 69 6e 66 6f 72 6d 61 74 69   usage informati
4cb0: 6f 6e 0a 61 73 20 70 6f 73 73 69 62 6c 65 2e 20  on.as possible. 
4cc0: 20 49 74 20 69 73 20 61 6c 73 6f 20 72 65 61 73   It is also reas
4cd0: 6f 6e 61 62 6c 65 20 74 6f 20 73 65 74 20 61 20  onable to set a 
4ce0: 74 69 6d 65 72 20 74 6f 20 72 75 6e 20 5b 50 52  timer to run [PR
4cf0: 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 0a 65  AGMA optimize].e
4d00: 76 65 72 79 20 66 65 77 20 68 6f 75 72 73 2c 20  very few hours, 
4d10: 6f 72 20 65 76 65 72 79 20 66 65 77 20 64 61 79  or every few day
4d20: 73 2c 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  s, for database 
4d30: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 68 61 74  connections that
4d40: 20 73 74 61 79 20 6f 70 65 6e 0a 66 6f 72 20 61   stay open.for a
4d50: 20 6c 6f 6e 67 20 74 69 6d 65 2e 3c 2f 70 3e 0a   long time.</p>.
4d60: 0a 3c 70 3e 41 70 70 6c 69 63 61 74 69 6f 6e 73  .<p>Applications
4d70: 20 74 68 61 74 20 64 65 73 69 72 65 20 6d 6f 72   that desire mor
4d80: 65 20 63 6f 6e 74 72 6f 6c 20 63 61 6e 20 72 75  e control can ru
4d90: 6e 20 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69  n [PRAGMA optimi
4da0: 7a 65 28 30 78 30 33 29 5d 20 74 6f 20 0a 6f 62  ze(0x03)] to .ob
4db0: 74 61 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 41  tain a list of A
4dc0: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 73 20  NALYZE commands 
4dd0: 74 68 61 74 20 53 51 4c 69 74 65 20 74 68 69 6e  that SQLite thin
4de0: 6b 73 20 61 72 65 20 61 70 70 72 6f 70 72 69 61  ks are appropria
4df0: 74 65 20 74 6f 20 72 75 6e 2c 0a 62 75 74 20 77  te to run,.but w
4e00: 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20  ithout actually 
4e10: 72 75 6e 6e 69 6e 67 20 74 68 6f 73 65 20 63 6f  running those co
4e20: 6d 6d 61 6e 64 73 2e 20 20 49 66 20 74 68 65 20  mmands.  If the 
4e30: 72 65 74 75 72 6e 65 64 20 73 65 74 20 69 73 20  returned set is 
4e40: 0a 6e 6f 6e 2d 65 6d 70 74 79 2c 20 74 68 65 20  .non-empty, the 
4e50: 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20  application can 
4e60: 74 68 65 6e 20 6d 61 6b 65 20 61 20 64 65 63 69  then make a deci
4e70: 73 69 6f 6e 20 61 62 6f 75 74 20 77 68 65 74 68  sion about wheth
4e80: 65 72 20 6f 72 20 6e 6f 74 0a 74 6f 20 72 75 6e  er or not.to run
4e90: 20 74 68 65 20 73 75 67 67 65 73 74 65 64 20 41   the suggested A
4ea0: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 73 2c  NALYZE commands,
4eb0: 20 70 65 72 68 61 70 73 20 61 66 74 65 72 20 70   perhaps after p
4ec0: 72 6f 6d 70 74 69 6e 67 20 74 68 65 20 75 73 65  rompting the use
4ed0: 72 0a 66 6f 72 20 67 75 69 64 61 6e 63 65 2e 3c  r.for guidance.<
4ee0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 5b 50 52 41  /p>..<p>The [PRA
4ef0: 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20 63 6f  GMA optimize] co
4f00: 6d 6d 61 6e 64 20 77 61 73 20 66 69 72 73 74 20  mmand was first 
4f10: 69 6e 74 72 6f 64 75 63 65 64 20 77 69 74 68 20  introduced with 
4f20: 0a 53 51 4c 69 74 65 20 33 2e 31 38 2e 30 20 28  .SQLite 3.18.0 (
4f30: 5b 64 61 74 65 6f 66 3a 33 2e 31 38 2e 30 5d 29  [dateof:3.18.0])
4f40: 20 61 6e 64 20 69 73 20 61 20 6e 6f 2d 6f 70 20   and is a no-op 
4f50: 66 6f 72 20 61 6c 6c 20 70 72 69 6f 72 20 72 65  for all prior re
4f60: 6c 65 61 73 65 73 0a 6f 66 20 53 51 4c 69 74 65  leases.of SQLite
4f70: 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 41 6e 74 69 63  .</p>..<h2>Antic
4f80: 69 70 61 74 65 64 20 46 75 74 75 72 65 20 45 6e  ipated Future En
4f90: 68 61 6e 63 65 6d 65 6e 74 73 3c 2f 68 32 3e 0a  hancements</h2>.
4fa0: 0a 3c 70 3e 41 6c 6c 20 65 78 69 73 74 69 6e 67  .<p>All existing
4fb0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
4fc0: 69 74 65 20 64 6f 20 61 20 66 75 6c 6c 20 74 61  ite do a full ta
4fd0: 62 6c 65 20 73 63 61 6e 20 66 6f 72 20 41 4e 41  ble scan for ANA
4fe0: 4c 59 5a 45 2e 20 20 54 68 69 73 20 63 61 6e 20  LYZE.  This can 
4ff0: 62 65 0a 73 6c 6f 77 20 66 6f 72 20 6d 75 6c 74  be.slow for mult
5000: 69 2d 67 69 67 61 62 79 74 65 20 61 6e 64 20 6c  i-gigabyte and l
5010: 61 72 67 65 72 20 64 61 74 61 62 61 73 65 73 2e  arger databases.
5020: 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
5030: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68  s of SQLite migh
5040: 74 0a 75 73 65 20 72 61 6e 64 6f 6d 20 73 61 6d  t.use random sam
5050: 70 6c 69 6e 67 20 72 61 74 68 65 72 20 74 68 61  pling rather tha
5060: 6e 20 61 20 66 75 6c 6c 20 74 61 62 6c 65 20 73  n a full table s
5070: 63 61 6e 20 74 6f 20 6f 62 74 61 69 6e 20 65 73  can to obtain es
5080: 74 69 6d 61 74 65 73 20 66 6f 72 20 74 68 65 0a  timates for the.
5090: 64 61 74 61 62 61 73 65 20 73 68 61 70 65 2c 20  database shape, 
50a0: 65 73 70 65 63 69 61 6c 6c 79 20 6f 6e 20 6c 61  especially on la
50b0: 72 67 65 72 20 74 61 62 6c 65 73 2e 20 20 54 68  rger tables.  Th
50c0: 65 20 72 65 73 75 6c 74 73 20 77 6f 75 6c 64 20  e results would 
50d0: 61 70 70 72 6f 78 69 6d 61 74 65 2c 20 62 75 74  approximate, but
50e0: 20 0a 77 69 6c 6c 20 62 65 20 63 6c 6f 73 65 20   .will be close 
50f0: 65 6e 6f 75 67 68 20 66 6f 72 20 71 75 65 72 79  enough for query
5100: 20 70 6c 61 6e 6e 69 6e 67 20 70 75 72 70 6f 73   planning purpos
5110: 65 73 2e 20 20 41 73 20 6f 66 20 32 30 31 37 2d  es.  As of 2017-
5120: 30 33 2d 32 30 2c 20 74 68 69 73 0a 63 6f 6e 63  03-20, this.conc
5130: 65 70 74 20 68 61 73 20 62 65 65 6e 20 74 65 73  ept has been tes
5140: 74 65 64 20 69 6e 20 65 78 70 65 72 69 6d 65 6e  ted in experimen
5150: 74 61 6c 20 62 72 61 6e 63 68 65 73 20 61 6e 64  tal branches and
5160: 20 61 70 70 65 61 72 73 20 74 6f 20 77 6f 72 6b   appears to work
5170: 20 77 65 6c 6c 2c 20 62 75 74 0a 68 61 73 20 6e   well, but.has n
5180: 6f 74 20 62 65 65 6e 20 66 6f 6c 64 65 64 20 69  ot been folded i
5190: 6e 74 6f 20 61 6e 20 6f 66 66 69 63 69 61 6c 20  nto an official 
51a0: 72 65 6c 65 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 74  release.</p>..<t
51b0: 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
51c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
51d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
51e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
51f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5200: 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 54 54 41  ##.Section {ATTA
5210: 43 48 20 44 41 54 41 42 41 53 45 7d 20 61 74 74  CH DATABASE} att
5220: 61 63 68 20 7b 61 74 74 61 63 68 65 64 20 2a 41  ach {attached *A
5230: 54 54 41 43 48 7d 0a 0a 52 65 63 75 72 73 69 76  TTACH}..Recursiv
5240: 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61  eBubbleDiagram a
5250: 74 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c  ttach-stmt.</tcl
5260: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41 54 54 41  >..<p> ^The ATTA
5270: 43 48 20 44 41 54 41 42 41 53 45 20 73 74 61 74  CH DATABASE stat
5280: 65 6d 65 6e 74 20 61 64 64 73 20 61 6e 6f 74 68  ement adds anoth
5290: 65 72 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c  er database .fil
52a0: 65 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  e to the current
52b0: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
52c0: 63 74 69 6f 6e 5d 2e 20 0a 44 61 74 61 62 61 73  ction]. .Databas
52d0: 65 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 72  e files that wer
52e0: 65 20 70 72 65 76 69 6f 75 73 6c 79 20 61 74 74  e previously att
52f0: 61 63 68 65 64 20 63 61 6e 20 62 65 20 72 65 6d  ached can be rem
5300: 6f 76 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b  oved using.the [
5310: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 5d  DETACH DATABASE]
5320: 20 63 6f 6d 6d 61 6e 64 2e 0a 0a 3c 70 3e 5e 54   command...<p>^T
5330: 68 65 20 66 69 6c 65 6e 61 6d 65 20 66 6f 72 20  he filename for 
5340: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
5350: 62 65 20 61 74 74 61 63 68 65 64 20 69 73 20 74  be attached is t
5360: 68 65 20 76 61 6c 75 65 20 6f 66 0a 74 68 65 20  he value of.the 
5370: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
5380: 6f 63 63 75 72 73 20 62 65 66 6f 72 65 20 74 68  occurs before th
5390: 65 20 41 53 20 6b 65 79 77 6f 72 64 2e 0a 5e 54  e AS keyword..^T
53a0: 68 65 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74  he filename of t
53b0: 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 6c 6c  he database foll
53c0: 6f 77 73 20 74 68 65 20 73 61 6d 65 20 73 65 6d  ows the same sem
53d0: 61 6e 74 69 63 73 20 61 73 20 74 68 65 0a 66 69  antics as the.fi
53e0: 6c 65 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20  lename argument 
53f0: 74 6f 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e  to [sqlite3_open
5400: 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33  ()] and [sqlite3
5410: 5f 6f 70 65 6e 5f 76 32 28 29 5d 3b 20 74 68 65  _open_v2()]; the
5420: 0a 73 70 65 63 69 61 6c 20 6e 61 6d 65 20 22 5b  .special name "[
5430: 3a 6d 65 6d 6f 72 79 3a 5d 22 20 72 65 73 75 6c  :memory:]" resul
5440: 74 73 20 69 6e 20 61 6e 20 5b 69 6e 2d 6d 65 6d  ts in an [in-mem
5450: 6f 72 79 20 64 61 74 61 62 61 73 65 5d 20 61 6e  ory database] an
5460: 64 20 61 6e 0a 65 6d 70 74 79 20 73 74 72 69 6e  d an.empty strin
5470: 67 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 6e  g results in a n
5480: 65 77 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74  ew temporary dat
5490: 61 62 61 73 65 2e 0a 5e 54 68 65 20 66 69 6c 65  abase..^The file
54a0: 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 63 61  name argument ca
54b0: 6e 20 62 65 20 61 20 5b 55 52 49 20 66 69 6c 65  n be a [URI file
54c0: 6e 61 6d 65 5d 20 69 66 20 55 52 49 20 66 69 6c  name] if URI fil
54d0: 65 6e 61 6d 65 20 70 72 6f 63 65 73 73 69 6e 67  ename processing
54e0: 0a 69 73 20 65 6e 61 62 6c 65 20 6f 6e 20 74 68  .is enable on th
54f0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
5500: 63 74 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61  ction.  The defa
5510: 75 6c 74 20 62 65 68 61 76 69 6f 72 20 69 73 20  ult behavior is 
5520: 66 6f 72 0a 55 52 49 20 66 69 6c 65 6e 61 6d 65  for.URI filename
5530: 73 20 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64  s to be disabled
5540: 2c 20 68 6f 77 65 76 65 72 20 74 68 61 74 20 6d  , however that m
5550: 69 67 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61  ight change in a
5560: 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 0a   future release.
5570: 6f 66 20 53 51 4c 69 74 65 2c 20 73 6f 20 61 70  of SQLite, so ap
5580: 70 6c 69 63 61 74 69 6f 6e 20 64 65 76 65 6c 6f  plication develo
5590: 70 65 72 73 20 61 72 65 20 61 64 76 69 73 65 64  pers are advised
55a0: 20 74 6f 20 70 6c 61 6e 20 61 63 63 6f 72 64 69   to plan accordi
55b0: 6e 67 6c 79 2e 0a 0a 3c 70 3e 54 68 65 20 6e 61  ngly...<p>The na
55c0: 6d 65 20 74 68 61 74 20 6f 63 63 75 72 73 20 61  me that occurs a
55d0: 66 74 65 72 20 74 68 65 20 41 53 20 6b 65 79 77  fter the AS keyw
55e0: 6f 72 64 20 69 73 20 74 68 65 20 6e 61 6d 65 20  ord is the name 
55f0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
5600: 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20  used internally 
5610: 62 79 20 53 51 4c 69 74 65 2e 0a 5e 54 68 65 20  by SQLite..^The 
5620: 73 63 68 65 6d 61 2d 6e 61 6d 65 73 20 27 6d 61  schema-names 'ma
5630: 69 6e 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20  in' and .'temp' 
5640: 72 65 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69  refer to the mai
5650: 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  n database and t
5660: 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64  he database used
5670: 20 66 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20   for .temporary 
5680: 74 61 62 6c 65 73 2e 20 20 5e 54 68 65 20 6d 61  tables.  ^The ma
5690: 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61 74 61  in and temp data
56a0: 62 61 73 65 73 20 63 61 6e 6e 6f 74 20 62 65 20  bases cannot be 
56b0: 61 74 74 61 63 68 65 64 20 6f 72 0a 64 65 74 61  attached or.deta
56c0: 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  ched.</p>..<p> ^
56d0: 28 54 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74  (Tables in an at
56e0: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
56f0: 63 61 6e 20 62 65 20 72 65 66 65 72 72 65 64 20  can be referred 
5700: 74 6f 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e  to using the syn
5710: 74 61 78 20 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e  tax .<i>schema-n
5720: 61 6d 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  ame.table-name</
5730: 69 3e 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 6e  i>.)^  ^If the n
5740: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
5750: 20 69 73 20 75 6e 69 71 75 65 0a 61 63 72 6f 73   is unique.acros
5760: 73 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  s all attached d
5770: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
5780: 20 6d 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64   main and temp d
5790: 61 74 61 62 61 73 65 73 2c 20 74 68 65 6e 20 74  atabases, then t
57a0: 68 65 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d  he.<i>schema-nam
57b0: 65 3c 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20  e</i> prefix is 
57c0: 6e 6f 74 20 72 65 71 75 69 72 65 64 2e 20 20 5e  not required.  ^
57d0: 49 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 74  If two or more t
57e0: 61 62 6c 65 73 20 69 6e 0a 64 69 66 66 65 72 65  ables in.differe
57f0: 6e 74 20 64 61 74 61 62 61 73 65 73 20 68 61 76  nt databases hav
5800: 65 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  e the same name 
5810: 61 6e 64 20 74 68 65 20 0a 3c 69 3e 73 63 68 65  and the .<i>sche
5820: 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66  ma-name</i> pref
5830: 69 78 20 69 73 20 6e 6f 74 20 75 73 65 64 20 6f  ix is not used o
5840: 6e 20 61 20 74 61 62 6c 65 20 72 65 66 65 72 65  n a table refere
5850: 6e 63 65 2c 20 74 68 65 6e 20 74 68 65 0a 74 61  nce, then the.ta
5860: 62 6c 65 20 63 68 6f 73 65 6e 20 69 73 20 74 68  ble chosen is th
5870: 65 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74  e one in the dat
5880: 61 62 61 73 65 20 74 68 61 74 20 77 61 73 20 6c  abase that was l
5890: 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 61 74  east recently at
58a0: 74 61 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tached.</p>..<p>
58b0: 0a 5e 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 69  .^Transactions i
58c0: 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c  nvolving multipl
58d0: 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  e attached datab
58e0: 61 73 65 73 20 61 72 65 20 61 74 6f 6d 69 63 2c  ases are atomic,
58f0: 0a 61 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74  .assuming that t
5900: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
5910: 20 69 73 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72   is not "[:memor
5920: 79 3a 5d 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a  y:]" and the .[j
5930: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20  ournal_mode] is 
5940: 6e 6f 74 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66  not [WAL].  ^(If
5950: 20 74 68 65 20 6d 61 69 6e 0a 64 61 74 61 62 61   the main.databa
5960: 73 65 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22  se is ":memory:"
5970: 20 6f 72 20 69 66 20 74 68 65 20 6a 6f 75 72 6e   or if the journ
5980: 61 6c 5f 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20  al_mode is WAL, 
5990: 74 68 65 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f  then .transactio
59a0: 6e 73 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62  ns continue to b
59b0: 65 20 61 74 6f 6d 69 63 20 77 69 74 68 69 6e 20  e atomic within 
59c0: 65 61 63 68 20 69 6e 64 69 76 69 64 75 61 6c 0a  each individual.
59d0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 42  database file. B
59e0: 75 74 20 69 66 20 74 68 65 20 68 6f 73 74 20 63  ut if the host c
59f0: 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73 20  omputer crashes 
5a00: 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66  in the middle.of
5a10: 20 61 20 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72   a [COMMIT] wher
5a20: 65 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61  e two or more da
5a30: 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 65  tabase files are
5a40: 20 75 70 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f   updated,.some o
5a50: 66 20 74 68 6f 73 65 20 66 69 6c 65 73 20 6d 69  f those files mi
5a60: 67 68 74 20 67 65 74 20 74 68 65 20 63 68 61 6e  ght get the chan
5a70: 67 65 73 20 77 68 65 72 65 20 6f 74 68 65 72 73  ges where others
5a80: 0a 6d 69 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f  .might not.)^.</
5a90: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69  p>..<p> ^There i
5aa0: 73 20 61 20 6c 69 6d 69 74 2c 20 73 65 74 20 75  s a limit, set u
5ab0: 73 69 6e 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69  sing [sqlite3_li
5ac0: 6d 69 74 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c  mit()] and .[SQL
5ad0: 49 54 45 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48  ITE_LIMIT_ATTACH
5ae0: 45 44 5d 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62  ED], to the numb
5af0: 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 73 20  er of databases 
5b00: 74 68 61 74 20 63 61 6e 20 62 65 0a 73 69 6d 75  that can be.simu
5b10: 6c 74 61 6e 65 6f 75 73 6c 79 20 61 74 74 61 63  ltaneously attac
5b20: 68 65 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  hed to a single 
5b30: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
5b40: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ion.</p>..<tcl>.
5b50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
5ba0: 53 65 63 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54  Section {BEGIN T
5bb0: 52 41 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e  RANSACTION} tran
5bc0: 73 61 63 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20  saction {*BEGIN 
5bd0: 43 4f 4d 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d  COMMIT ROLLBACK}
5be0: 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
5bf0: 65 44 69 61 67 72 61 6d 20 62 65 67 69 6e 2d 73  eDiagram begin-s
5c00: 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75 62  tmt.RecursiveBub
5c10: 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 69  bleDiagram commi
5c20: 74 2d 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65  t-stmt.Recursive
5c30: 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f  BubbleDiagram ro
5c40: 6c 6c 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63  llback-stmt.</tc
5c50: 6c 3e 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e  l>..<p>.^No chan
5c60: 67 65 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20  ges can be made 
5c70: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
5c80: 65 78 63 65 70 74 20 77 69 74 68 69 6e 20 61 20  except within a 
5c90: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e  transaction..^An
5ca0: 79 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63  y command that c
5cb0: 68 61 6e 67 65 73 20 74 68 65 20 64 61 74 61 62  hanges the datab
5cc0: 61 73 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20  ase (basically, 
5cd0: 61 6e 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a  any SQL command.
5ce0: 6f 74 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45  other than [SELE
5cf0: 43 54 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61  CT]) will automa
5d00: 74 69 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20  tically start a 
5d10: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f  transaction if.o
5d20: 6e 65 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64  ne is not alread
5d30: 79 20 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41  y in effect.  ^A
5d40: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61  utomatically sta
5d50: 72 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  rted transaction
5d60: 73 0a 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20  s.are committed 
5d70: 77 68 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75  when the last qu
5d80: 65 72 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f  ery finishes..</
5d90: 70 3e 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  p>..<p>.^Transac
5da0: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61  tions can be sta
5db0: 72 74 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73  rted manually us
5dc0: 69 6e 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f  ing the BEGIN.co
5dd0: 6d 6d 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74  mmand.  ^(Such t
5de0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61  ransactions usua
5df0: 6c 6c 79 20 70 65 72 73 69 73 74 20 75 6e 74 69  lly persist unti
5e00: 6c 20 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49  l the next.COMMI
5e10: 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f  T or ROLLBACK co
5e20: 6d 6d 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72  mmand.  But a tr
5e30: 61 6e 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61  ansaction will a
5e40: 6c 73 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66  lso .ROLLBACK if
5e50: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
5e60: 20 63 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e   closed or if an
5e70: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e   error occurs.an
5e80: 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63  d the ROLLBACK c
5e90: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
5ea0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  on algorithm is 
5eb0: 73 70 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65  specified.)^.See
5ec0: 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   the documentati
5ed0: 6f 6e 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f  on on the [ON CO
5ee0: 4e 46 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66  NFLICT].clause f
5ef0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
5f00: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
5f10: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e  the ROLLBACK.con
5f20: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
5f30: 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e   algorithm..</p>
5f40: 0a 0a 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53  ..<p>.^END TRANS
5f50: 41 43 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69  ACTION is an ali
5f60: 61 73 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c  as for COMMIT..<
5f70: 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73  /p>..<p> ^(Trans
5f80: 61 63 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20  actions created 
5f90: 75 73 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f  using BEGIN...CO
5fa0: 4d 4d 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74  MMIT do not nest
5fb0: 2e 29 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20  .)^.^For nested 
5fc0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73  transactions, us
5fd0: 65 20 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54  e the [SAVEPOINT
5fe0: 5d 20 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20  ] and [RELEASE] 
5ff0: 63 6f 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54  commands..The "T
6000: 4f 20 53 41 56 45 50 4f 49 4e 54 20 3c 79 79 74  O SAVEPOINT <yyt
6010: 65 72 6d 3e 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  erm>name</yyterm
6020: 3e 22 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  >" clause of the
6030: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
6040: 64 20 73 68 6f 77 6e 0a 69 6e 20 74 68 65 20 73  d shown.in the s
6050: 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 61 62  yntax diagram ab
6060: 6f 76 65 20 69 73 20 6f 6e 6c 79 20 61 70 70 6c  ove is only appl
6070: 69 63 61 62 6c 65 20 74 6f 20 5b 53 41 56 45 50  icable to [SAVEP
6080: 4f 49 4e 54 5d 0a 74 72 61 6e 73 61 63 74 69 6f  OINT].transactio
6090: 6e 73 2e 20 20 5e 41 6e 20 61 74 74 65 6d 70 74  ns.  ^An attempt
60a0: 20 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20 42   to invoke the B
60b0: 45 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 77 69 74  EGIN command wit
60c0: 68 69 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f  hin.a transactio
60d0: 6e 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  n will fail with
60e0: 20 61 6e 20 65 72 72 6f 72 2c 20 72 65 67 61 72   an error, regar
60f0: 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
6100: 0a 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  .the transaction
6110: 20 77 61 73 20 73 74 61 72 74 65 64 20 62 79 20   was started by 
6120: 5b 53 41 56 45 50 4f 49 4e 54 5d 20 6f 72 20 61  [SAVEPOINT] or a
6130: 20 70 72 69 6f 72 20 42 45 47 49 4e 2e 0a 5e 54   prior BEGIN..^T
6140: 68 65 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e  he COMMIT comman
6150: 64 20 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41  d and the ROLLBA
6160: 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f  CK command witho
6170: 75 74 20 74 68 65 20 54 4f 20 63 6c 61 75 73 65  ut the TO clause
6180: 0a 77 6f 72 6b 20 74 68 65 20 73 61 6d 65 20 6f  .work the same o
6190: 6e 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20 74 72  n [SAVEPOINT] tr
61a0: 61 6e 73 61 63 74 69 6f 6e 73 20 61 73 20 74 68  ansactions as th
61b0: 65 79 20 64 6f 20 77 69 74 68 20 74 72 61 6e 73  ey do with trans
61c0: 61 63 74 69 6f 6e 73 0a 73 74 61 72 74 65 64 20  actions.started 
61d0: 62 79 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c  by BEGIN.</p>..<
61e0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
61f0: 69 6d 6d 65 64 69 61 74 65 20 7b 42 45 47 49 4e  immediate {BEGIN
6200: 20 49 4d 4d 45 44 49 41 54 45 7d 20 7b 42 45 47   IMMEDIATE} {BEG
6210: 49 4e 20 45 58 43 4c 55 53 49 56 45 7d 3c 2f 74  IN EXCLUSIVE}</t
6220: 63 6c 3e 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63  cl>.<p>.^Transac
6230: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66  tions can be def
6240: 65 72 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65  erred, immediate
6250: 2c 20 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20  , or exclusive. 
6260: 20 0a 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74   .^The default t
6270: 72 61 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76  ransaction behav
6280: 69 6f 72 20 69 73 20 64 65 66 65 72 72 65 64 2e  ior is deferred.
6290: 0a 5e 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73  .^Deferred means
62a0: 20 74 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61   that no locks a
62b0: 72 65 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74  re acquired.on t
62c0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
62d0: 6c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  l the database i
62e0: 73 20 66 69 72 73 74 20 61 63 63 65 73 73 65 64  s first accessed
62f0: 2e 20 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a  .  ^Thus with a.
6300: 64 65 66 65 72 72 65 64 20 74 72 61 6e 73 61 63  deferred transac
6310: 74 69 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20  tion, the BEGIN 
6320: 73 74 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66  statement itself
6330: 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f   does nothing to
6340: 20 74 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e   the.filesystem.
6350: 20 20 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74    ^Locks.are not
6360: 20 61 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20   acquired until 
6370: 74 68 65 20 66 69 72 73 74 20 72 65 61 64 20 6f  the first read o
6380: 72 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f  r write operatio
6390: 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 72  n.  ^The first r
63a0: 65 61 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67  ead.operation ag
63b0: 61 69 6e 73 74 20 61 20 64 61 74 61 62 61 73 65  ainst a database
63c0: 20 63 72 65 61 74 65 73 20 61 20 5b 53 48 41 52   creates a [SHAR
63d0: 45 44 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65  ED] lock and the
63e0: 20 66 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65   first.write ope
63f0: 72 61 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61  ration creates a
6400: 20 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b   [RESERVED] lock
6410: 2e 20 20 20 5e 42 65 63 61 75 73 65 20 74 68 65  .   ^Because the
6420: 20 61 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a   acquisition of.
6430: 6c 6f 63 6b 73 20 69 73 20 64 65 66 65 72 72 65  locks is deferre
6440: 64 20 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65  d until they are
6450: 20 6e 65 65 64 65 64 2c 20 69 74 20 69 73 20 70   needed, it is p
6460: 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
6470: 74 68 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70  ther.thread or p
6480: 72 6f 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65  rocess could cre
6490: 61 74 65 20 61 20 73 65 70 61 72 61 74 65 20 74  ate a separate t
64a0: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77  ransaction and w
64b0: 72 69 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61  rite to.the data
64c0: 62 61 73 65 20 61 66 74 65 72 20 74 68 65 20 42  base after the B
64d0: 45 47 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72  EGIN on the curr
64e0: 65 6e 74 20 74 68 72 65 61 64 20 68 61 73 20 65  ent thread has e
64f0: 78 65 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65  xecuted..^If the
6500: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
6510: 69 6d 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20  immediate, then 
6520: 5b 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73  [RESERVED] locks
6530: 0a 61 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e  .are acquired on
6540: 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61   all databases a
6550: 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45  s soon as the BE
6560: 47 49 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65  GIN command is.e
6570: 78 65 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74  xecuted, without
6580: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65   waiting for the
6590: 0a 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 20  .database to be 
65a0: 75 73 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20  used.  ^After a 
65b0: 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c  BEGIN IMMEDIATE,
65c0: 20 0a 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61   .no other [data
65d0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
65e0: 20 77 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f   will be able to
65f0: 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 64 61   write to the da
6600: 74 61 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42  tabase or.do a B
6610: 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f  EGIN IMMEDIATE o
6620: 72 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56  r BEGIN EXCLUSIV
6630: 45 2e 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65  E.  ^Other proce
6640: 73 73 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75  sses can continu
6650: 65 0a 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74  e.to read from t
6660: 68 65 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77  he database, how
6670: 65 76 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75  ever.  ^An exclu
6680: 73 69 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  sive transaction
6690: 20 63 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49   causes.[EXCLUSI
66a0: 56 45 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20  VE] locks to be 
66b0: 61 63 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20  acquired on all 
66c0: 64 61 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74  databases.  ^Aft
66d0: 65 72 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55  er a BEGIN.EXCLU
66e0: 53 49 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b  SIVE, no other [
66f0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
6700: 69 6f 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20  ion] except for 
6710: 5b 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65  [read_uncommitte
6720: 64 5d 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77  d].connections w
6730: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72  ill be able to r
6740: 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ead the database
6750: 20 61 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f   and no other co
6760: 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74  nnection without
6770: 0a 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20  .exception will 
6780: 62 65 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65  be able to write
6790: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75 6e   the database un
67a0: 74 69 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74  til the transact
67b0: 69 6f 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e  ion is.complete.
67c0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20  .</p>..<p>.^(An 
67d0: 69 6d 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63  implicit transac
67e0: 74 69 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74  tion (a transact
67f0: 69 6f 6e 20 74 68 61 74 20 69 73 20 73 74 61 72  ion that is star
6800: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
6810: 79 2c 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63  y,.not a transac
6820: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20  tion started by 
6830: 42 45 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74  BEGIN) is commit
6840: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
6850: 79 20 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20  y when.the last 
6860: 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
6870: 20 66 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74   finishes.  A st
6880: 61 74 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73  atement finishes
6890: 20 77 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72   when its.prepar
68a0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
68b0: 5b 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29  [sqlite3_reset()
68c0: 20 7c 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71   | reset] or.[sq
68d0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
68e0: 20 7c 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20   | finalized].  
68f0: 41 6e 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33  An open [sqlite3
6900: 5f 62 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a  _blob] used for.
6910: 69 6e 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42  incremental BLOB
6920: 20 49 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61   I/O counts as a
6930: 6e 20 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61  n unfinished sta
6940: 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71  tement.  The [sq
6950: 6c 69 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69  lite3_blob].fini
6960: 73 68 65 73 20 77 68 65 6e 20 69 74 20 69 73 20  shes when it is 
6970: 5b 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c  [sqlite3_blob_cl
6980: 6f 73 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e  ose() | closed].
6990: 29 5e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68  )^.</p>..<p>.^Th
69a0: 65 20 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49  e explicit COMMI
69b0: 54 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69  T command runs i
69c0: 6d 6d 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e  mmediately, even
69d0: 20 69 66 20 74 68 65 72 65 20 61 72 65 0a 70 65   if there are.pe
69e0: 6e 64 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73  nding [SELECT] s
69f0: 74 61 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77  tatements.  ^How
6a00: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
6a10: 72 65 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65  re pending.write
6a20: 20 6f 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65   operations, the
6a30: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a   COMMIT command.
6a40: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
6a50: 6e 20 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51  n error code [SQ
6a60: 4c 49 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e  LITE_BUSY]..</p>
6a70: 0a 0a 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70  ..<p>.^An attemp
6a80: 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d  t to execute COM
6a90: 4d 49 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72  MIT might also r
6aa0: 65 73 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c  esult in an [SQL
6ab0: 49 54 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e  ITE_BUSY] return
6ac0: 20 63 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74   code.if an anot
6ad0: 68 65 72 20 74 68 72 65 61 64 20 6f 72 20 70 72  her thread or pr
6ae0: 6f 63 65 73 73 20 68 61 73 20 61 20 5b 73 68 61  ocess has a [sha
6af0: 72 65 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65  red lock] on the
6b00: 20 64 61 74 61 62 61 73 65 0a 74 68 61 74 20 70   database.that p
6b10: 72 65 76 65 6e 74 65 64 20 74 68 65 20 64 61 74  revented the dat
6b20: 61 62 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67  abase from being
6b30: 20 75 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e   updated.  ^When
6b40: 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e   COMMIT fails in
6b50: 20 74 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74   this.way, the t
6b60: 72 61 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69  ransaction remai
6b70: 6e 73 20 61 63 74 69 76 65 20 61 6e 64 20 74 68  ns active and th
6b80: 65 20 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20  e COMMIT can be 
6b90: 72 65 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66  retried later.af
6ba0: 74 65 72 20 74 68 65 20 72 65 61 64 65 72 20 68  ter the reader h
6bb0: 61 73 20 68 61 64 20 61 20 63 68 61 6e 63 65 20  as had a chance 
6bc0: 74 6f 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a  to clear..</p>..
6bd0: 3c 70 3e 0a 49 6e 20 76 65 72 79 20 6f 6c 64 20  <p>.In very old 
6be0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
6bf0: 74 65 20 28 62 65 66 6f 72 65 20 76 65 72 73 69  te (before versi
6c00: 6f 6e 20 33 2e 37 2e 31 31 20 2d 20 5b 64 61 74  on 3.7.11 - [dat
6c10: 65 6f 66 3a 33 2e 37 2e 31 31 5d 29 0a 74 68 65  eof:3.7.11]).the
6c20: 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 66   ROLLBACK will f
6c30: 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f  ail with an erro
6c40: 72 20 63 6f 64 65 20 0a 5b 53 51 4c 49 54 45 5f  r code .[SQLITE_
6c50: 42 55 53 59 5d 20 69 66 20 74 68 65 72 65 20 61  BUSY] if there a
6c60: 72 65 20 61 6e 79 20 70 65 6e 64 69 6e 67 20 71  re any pending q
6c70: 75 65 72 69 65 73 2e 20 20 5e 49 6e 20 6d 6f 72  ueries.  ^In mor
6c80: 65 20 72 65 63 65 6e 74 0a 76 65 72 73 69 6f 6e  e recent.version
6c90: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 74 68 65  s of SQLite, the
6ca0: 20 52 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 70   ROLLBACK will p
6cb0: 72 6f 63 65 65 64 20 61 6e 64 20 70 65 6e 64 69  roceed and pendi
6cc0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 0a 77 69  ng statements.wi
6cd0: 6c 6c 20 6f 66 74 65 6e 20 62 65 20 61 62 6f 72  ll often be abor
6ce0: 74 65 64 2c 20 63 61 75 73 69 6e 67 20 74 68 65  ted, causing the
6cf0: 6d 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 5b  m to return an [
6d00: 53 51 4c 49 54 45 5f 41 42 4f 52 54 5d 20 6f 72  SQLITE_ABORT] or
6d10: 0a 5b 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  .[SQLITE_ABORT_R
6d20: 4f 4c 4c 42 41 43 4b 5d 20 65 72 72 6f 72 2e 0a  OLLBACK] error..
6d30: 5e 49 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69  ^In SQLite versi
6d40: 6f 6e 20 33 2e 38 2e 38 20 28 5b 64 61 74 65 6f  on 3.8.8 ([dateo
6d50: 66 3a 33 2e 38 2e 38 5d 29 20 61 6e 64 20 6c 61  f:3.8.8]) and la
6d60: 74 65 72 2c 0a 61 20 70 65 6e 64 69 6e 67 20 72  ter,.a pending r
6d70: 65 61 64 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ead will continu
6d80: 65 20 66 75 6e 63 74 69 6f 6e 69 6e 67 0a 61 66  e functioning.af
6d90: 74 65 72 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  ter the ROLLBACK
6da0: 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20   as long as the 
6db0: 52 4f 4c 4c 42 41 43 4b 20 64 6f 65 73 20 6e 6f  ROLLBACK does no
6dc0: 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74  t modify the dat
6dd0: 61 62 61 73 65 0a 73 63 68 65 6d 61 2e 0a 3c 2f  abase.schema..</
6de0: 70 3e 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41 47  p>..<p>.If [PRAG
6df0: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d  MA journal_mode]
6e00: 20 69 73 20 73 65 74 20 74 6f 20 4f 46 46 20 28   is set to OFF (
6e10: 74 68 75 73 20 64 69 73 61 62 6c 69 6e 67 20 74  thus disabling t
6e20: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
6e30: 6e 61 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20 74  nal.file) then t
6e40: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  he behavior of t
6e50: 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  he ROLLBACK comm
6e60: 61 6e 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  and is undefined
6e70: 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 70  ..</p>..<h3>Resp
6e80: 6f 6e 73 65 20 54 6f 20 45 72 72 6f 72 73 20 57  onse To Errors W
6e90: 69 74 68 69 6e 20 41 20 54 72 61 6e 73 61 63 74  ithin A Transact
6ea0: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28  ion</h3>..<p> ^(
6eb0: 49 66 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73  If certain kinds
6ec0: 20 6f 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72   of errors occur
6ed0: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
6ee0: 63 74 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73  ction, the.trans
6ef0: 61 63 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61  action may or ma
6f00: 79 20 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20  y not be rolled 
6f10: 62 61 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c  back automatical
6f20: 6c 79 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20  ly.  The.errors 
6f30: 74 68 61 74 20 63 61 6e 20 63 61 75 73 65 20 61  that can cause a
6f40: 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c 6c  n automatic roll
6f50: 62 61 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f 70  back include:</p
6f60: 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51  >..<ul>.<li> [SQ
6f70: 4c 49 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74 61  LITE_FULL]: data
6f80: 62 61 73 65 20 6f 72 20 64 69 73 6b 20 66 75 6c  base or disk ful
6f90: 6c 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49  l.<li> [SQLITE_I
6fa0: 4f 45 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f 20  OERR]: disk I/O 
6fb0: 65 72 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49  error.<li> [SQLI
6fc0: 54 45 5f 42 55 53 59 5d 3a 20 64 61 74 61 62 61  TE_BUSY]: databa
6fd0: 73 65 20 69 6e 20 75 73 65 20 62 79 20 61 6e 6f  se in use by ano
6fe0: 74 68 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c 69  ther process.<li
6ff0: 3e 20 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d  > [SQLITE_NOMEM]
7000: 3a 20 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79 0a  : out or memory.
7010: 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f  </ul>)^..<p>.^Fo
7020: 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 65  r all of these e
7030: 72 72 6f 72 73 2c 20 53 51 4c 69 74 65 20 61 74  rrors, SQLite at
7040: 74 65 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20 6a  tempts to undo j
7050: 75 73 74 20 74 68 65 20 6f 6e 65 20 73 74 61 74  ust the one stat
7060: 65 6d 65 6e 74 0a 69 74 20 77 61 73 20 77 6f 72  ement.it was wor
7070: 6b 69 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61 76  king on and leav
7080: 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 70  e changes from p
7090: 72 69 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  rior statements 
70a0: 77 69 74 68 69 6e 20 74 68 65 0a 73 61 6d 65 20  within the.same 
70b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 61  transaction inta
70c0: 63 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  ct and continue 
70d0: 77 69 74 68 20 74 68 65 20 74 72 61 6e 73 61 63  with the transac
70e0: 74 69 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72 2c  tion.  ^However,
70f0: 20 0a 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74   .depending on t
7100: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
7110: 6e 67 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64  ng evaluated and
7120: 20 74 68 65 20 70 6f 69 6e 74 20 61 74 20 77 68   the point at wh
7130: 69 63 68 20 74 68 65 0a 65 72 72 6f 72 20 6f 63  ich the.error oc
7140: 63 75 72 73 2c 20 69 74 20 6d 69 67 68 74 20 62  curs, it might b
7150: 65 20 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20  e necessary for 
7160: 53 51 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62 61  SQLite to rollba
7170: 63 6b 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74 68  ck and.cancel th
7180: 65 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  e entire transac
7190: 74 69 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c 69  tion.  ^An appli
71a0: 63 61 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20  cation can tell 
71b0: 77 68 69 63 68 0a 63 6f 75 72 73 65 20 6f 66 20  which.course of 
71c0: 61 63 74 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f  action SQLite to
71d0: 6f 6b 20 62 79 20 75 73 69 6e 67 20 74 68 65 0a  ok by using the.
71e0: 5b 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74  [sqlite3_get_aut
71f0: 6f 63 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e  ocommit()] C-lan
7200: 67 75 61 67 65 20 69 6e 74 65 72 66 61 63 65 2e  guage interface.
7210: 3c 2f 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72  </p>..<p>It is r
7220: 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20  ecommended that 
7230: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 65 73  applications res
7240: 70 6f 6e 64 20 74 6f 20 74 68 65 20 65 72 72 6f  pond to the erro
7250: 72 73 0a 6c 69 73 74 65 64 20 61 62 6f 76 65 20  rs.listed above 
7260: 62 79 20 65 78 70 6c 69 63 69 74 6c 79 20 69 73  by explicitly is
7270: 73 75 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b  suing a ROLLBACK
7280: 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20 74   command.  ^If t
7290: 68 65 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20  he .transaction 
72a0: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
72b0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74   rolled back aut
72c0: 6f 6d 61 74 69 63 61 6c 6c 79 0a 62 79 20 74 68  omatically.by th
72d0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
72e0: 2c 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  , then the ROLLB
72f0: 41 43 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  ACK command will
7300: 20 66 61 69 6c 20 77 69 74 68 20 61 6e 0a 65 72   fail with an.er
7310: 72 6f 72 2c 20 62 75 74 20 6e 6f 20 68 61 72 6d  ror, but no harm
7320: 20 69 73 20 63 61 75 73 65 64 20 62 79 20 74 68   is caused by th
7330: 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75  is.</p>..<p>Futu
7340: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  re versions of S
7350: 51 4c 69 74 65 20 6d 61 79 20 65 78 74 65 6e 64  QLite may extend
7360: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 72 72   the list of err
7370: 6f 72 73 20 77 68 69 63 68 0a 6d 69 67 68 74 20  ors which.might 
7380: 63 61 75 73 65 20 61 75 74 6f 6d 61 74 69 63 20  cause automatic 
7390: 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c  transaction roll
73a0: 62 61 63 6b 2e 20 20 46 75 74 75 72 65 20 76 65  back.  Future ve
73b0: 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65  rsions of.SQLite
73c0: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 74 68   might change th
73d0: 65 20 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65  e error response
73e0: 2e 20 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72  .  In particular
73f0: 2c 20 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65 20  , we may.choose 
7400: 74 6f 20 73 69 6d 70 6c 69 66 79 20 74 68 65 20  to simplify the 
7410: 69 6e 74 65 72 66 61 63 65 20 69 6e 20 66 75 74  interface in fut
7420: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
7430: 53 51 4c 69 74 65 20 62 79 0a 63 61 75 73 69 6e  SQLite by.causin
7440: 67 20 74 68 65 20 65 72 72 6f 72 73 20 61 62 6f  g the errors abo
7450: 76 65 20 74 6f 20 66 6f 72 63 65 20 61 6e 20 75  ve to force an u
7460: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f 6c  nconditional rol
7470: 6c 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  lback.</p>..<tcl
7480: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
7490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74d0: 23 0a 53 65 63 74 69 6f 6e 20 7b 53 41 56 45 50  #.Section {SAVEP
74e0: 4f 49 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20  OINT} savepoint 
74f0: 7b 53 41 56 45 50 4f 49 4e 54 20 52 45 4c 45 41  {SAVEPOINT RELEA
7500: 53 45 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  SE}..RecursiveBu
7510: 62 62 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65  bbleDiagram save
7520: 70 6f 69 6e 74 2d 73 74 6d 74 0a 52 65 63 75 72  point-stmt.Recur
7530: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
7540: 6d 20 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a 52  m release-stmt.R
7550: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
7560: 61 67 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73  agram rollback-s
7570: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20  tmt.</tcl>..<p> 
7580: 5e 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20  ^SAVEPOINTs are 
7590: 61 20 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61  a method of crea
75a0: 74 69 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e  ting transaction
75b0: 73 2c 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42  s, similar to.[B
75c0: 45 47 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49  EGIN] and [COMMI
75d0: 54 5d 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  T], except that 
75e0: 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e  the SAVEPOINT an
75f0: 64 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  d RELEASE comman
7600: 64 73 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64  ds.are named and
7610: 20 6d 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c   may be nested.<
7620: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41  /p>..<p> ^The SA
7630: 56 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20  VEPOINT command 
7640: 73 74 61 72 74 73 20 61 20 6e 65 77 20 74 72 61  starts a new tra
7650: 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20  nsaction with a 
7660: 6e 61 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73  name..^The trans
7670: 61 63 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65  action names nee
7680: 64 20 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e  d not be unique.
7690: 0a 5e 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63  .^(A SAVEPOINT c
76a0: 61 6e 20 62 65 20 73 74 61 72 74 65 64 20 65 69  an be started ei
76b0: 74 68 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f  ther within or o
76c0: 75 74 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47  utside of.a [BEG
76d0: 49 4e 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29  IN]...[COMMIT].)
76e0: 5e 20 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45  ^  ^(When a SAVE
76f0: 50 4f 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74  POINT is the out
7700: 65 72 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  er-most savepoin
7710: 74 0a 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20  t.and it is not 
7720: 77 69 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d  within a [BEGIN]
7730: 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e  ...[COMMIT] then
7740: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
7750: 20 74 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47   the.same as BEG
7760: 49 4e 20 44 45 46 45 52 52 45 44 20 54 52 41 4e  IN DEFERRED TRAN
7770: 53 41 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a  SACTION.)^</p>..
7780: 3c 70 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b  <p>^The ROLLBACK
7790: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65   TO command reve
77a0: 72 74 73 20 74 68 65 20 73 74 61 74 65 20 6f 66  rts the state of
77b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 61   the database ba
77c0: 63 6b 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61  ck to what.it wa
77d0: 73 20 6a 75 73 74 20 61 66 74 65 72 20 74 68 65  s just after the
77e0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53   corresponding S
77f0: 41 56 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65  AVEPOINT.  ^Note
7800: 20 74 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61   that unlike tha
7810: 74 0a 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43  t.plain [ROLLBAC
7820: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68  K] command (with
7830: 6f 75 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f  out the TO keywo
7840: 72 64 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rd) the ROLLBACK
7850: 20 54 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73   TO command.does
7860: 20 6e 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20   not cancel the 
7870: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49  transaction.  ^I
7880: 6e 73 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c  nstead of cancel
7890: 6c 69 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63  ling the transac
78a0: 74 69 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41  tion,.the ROLLBA
78b0: 43 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65  CK TO command re
78c0: 73 74 61 72 74 73 20 74 68 65 20 74 72 61 6e 73  starts the trans
78d0: 61 63 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20  action again at 
78e0: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e  the beginning..^
78f0: 41 6c 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20  All intervening 
7900: 53 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63  SAVEPOINTs are c
7910: 61 6e 63 65 6c 65 64 2c 20 68 6f 77 65 76 65 72  anceled, however
7920: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  .</p>..<p>^The R
7930: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69  ELEASE command i
7940: 73 20 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54  s like a [COMMIT
7950: 5d 20 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e  ] for a SAVEPOIN
7960: 54 2e 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20  T..^The RELEASE 
7970: 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61  command causes a
7980: 6c 6c 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61  ll savepoints ba
7990: 63 6b 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  ck to and includ
79a0: 69 6e 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65  ing the .most re
79b0: 63 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77  cent savepoint w
79c0: 69 74 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e  ith a matching n
79d0: 61 6d 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65  ame to be remove
79e0: 64 20 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e  d from the .tran
79f0: 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20  saction stack.  
7a00: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20  ^The RELEASE of 
7a10: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
7a20: 74 69 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61  tion.does not ca
7a30: 75 73 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20  use any changes 
7a40: 74 6f 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f  to be written to
7a50: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
7a60: 6c 65 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65  le; it merely.re
7a70: 6d 6f 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73  moves savepoints
7a80: 20 66 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61   from the transa
7a90: 63 74 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68  ction stack such
7aa0: 20 74 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c   that it is.no l
7ab0: 6f 6e 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74  onger possible t
7ac0: 6f 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68  o ROLLBACK TO th
7ad0: 6f 73 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a  ose savepoints..
7ae0: 5e 49 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f  ^If a RELEASE co
7af0: 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74  mmand releases t
7b00: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
7b10: 65 70 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20  epoint, so.that 
7b20: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
7b30: 73 74 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d  stack becomes em
7b40: 70 74 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53  pty, then RELEAS
7b50: 45 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73  E is the same.as
7b60: 20 5b 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20   [COMMIT]..^The 
7b70: 5b 43 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64  [COMMIT] command
7b80: 20 6d 61 79 20 62 65 20 75 73 65 64 20 74 6f 20   may be used to 
7b90: 72 65 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65  release all save
7ba0: 70 6f 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69  points and.commi
7bb0: 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  t the transactio
7bc0: 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 74 72  n even if the tr
7bd0: 61 6e 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72  ansaction was or
7be0: 69 67 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64  iginally started
7bf0: 0a 62 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20  .by a SAVEPOINT 
7c00: 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20  command instead 
7c10: 6f 66 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d  of a [BEGIN] com
7c20: 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  mand.</p>..<p>^I
7c30: 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d  f the savepoint-
7c40: 6e 61 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53  name in a RELEAS
7c50: 45 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e  E command does n
7c60: 6f 74 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76  ot match any.sav
7c70: 65 70 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79  epoint currently
7c80: 20 69 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74   in the transact
7c90: 69 6f 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20  ion stack, then 
7ca0: 6e 6f 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  no savepoints ar
7cb0: 65 0a 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20  e.released, the 
7cc0: 64 61 74 61 62 61 73 65 20 69 73 20 75 6e 63 68  database is unch
7cd0: 61 6e 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52  anged, and the R
7ce0: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72  ELEASE command r
7cf0: 65 74 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e  eturns.an error.
7d00: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74  </p>..<p>^Note t
7d10: 68 61 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61  hat an inner tra
7d20: 6e 73 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63  nsaction might c
7d30: 6f 6d 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65  ommit (using the
7d40: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
7d50: 29 0a 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72  ).but then later
7d60: 20 68 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75   have its work u
7d70: 6e 64 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42  ndone by a ROLLB
7d80: 41 43 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20  ACK in an outer 
7d90: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20  transaction..^A 
7da0: 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72  power failure or
7db0: 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f   program crash o
7dc0: 72 20 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20  r OS crash will 
7dd0: 63 61 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d  cause the outer-
7de0: 6d 6f 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e  most.transaction
7df0: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e   to rollback, un
7e00: 64 6f 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65  doing all change
7e10: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
7e20: 72 72 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74  rred within.that
7e30: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
7e40: 6f 6e 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73  on, even changes
7e50: 20 74 68 61 74 20 68 61 76 65 20 73 75 70 70 6f   that have suppo
7e60: 73 65 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d  sedly been "comm
7e70: 69 74 74 65 64 22 0a 62 79 20 74 68 65 20 52 45  itted".by the RE
7e80: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  LEASE command.  
7e90: 5e 43 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20  ^Content is not 
7ea0: 61 63 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74  actually committ
7eb0: 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a  ed on the disk .
7ec0: 75 6e 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d  until the outerm
7ed0: 6f 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ost transaction 
7ee0: 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  commits.</p>..<p
7ef0: 3e 54 68 65 72 65 20 61 72 65 20 73 65 76 65 72  >There are sever
7f00: 61 6c 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b  al ways of think
7f10: 69 6e 67 20 61 62 6f 75 74 20 74 68 65 20 52 45  ing about the RE
7f20: 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f  LEASE command:</
7f30: 70 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ul>.<li><p>
7f40: 0a 53 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65  .Some people vie
7f50: 77 20 52 45 4c 45 41 53 45 20 61 73 20 74 68 65  w RELEASE as the
7f60: 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43   equivalent of C
7f70: 4f 4d 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45  OMMIT for a SAVE
7f80: 50 4f 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61  POINT..This is a
7f90: 6e 20 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69  n acceptable poi
7fa0: 6e 74 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f  nt of view as lo
7fb0: 6e 67 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62  ng as one rememb
7fc0: 65 72 73 20 74 68 61 74 20 74 68 65 0a 63 68 61  ers that the.cha
7fd0: 6e 67 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62  nges committed b
7fe0: 79 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73  y an inner trans
7ff0: 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74  action might lat
8000: 65 72 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20  er be undone by 
8010: 61 0a 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e  a.rollback in an
8020: 20 6f 75 74 65 72 20 74 72 61 6e 73 61 63 74 69   outer transacti
8030: 6f 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c  on.</p></li>..<l
8040: 69 3e 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69  i><p>.Another vi
8050: 65 77 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73  ew of RELEASE is
8060: 20 74 68 61 74 20 69 74 20 6d 65 72 67 65 73 20   that it merges 
8070: 61 20 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74  a named transact
8080: 69 6f 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72  ion into its.par
8090: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ent transaction,
80a0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d   so that the nam
80b0: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  ed transaction a
80c0: 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20 62 65  nd its parent be
80d0: 63 6f 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72  come.the same tr
80e0: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65  ansaction.  Afte
80f0: 72 20 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e  r RELEASE, the n
8100: 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  amed transaction
8110: 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a   and its parent.
8120: 77 69 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72  will commit or r
8130: 6f 6c 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72  ollback together
8140: 2c 20 77 68 61 74 65 76 65 72 20 74 68 65 69 72  , whatever their
8150: 20 66 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f   fate may be..</
8160: 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
8170: 0a 4f 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68  .One can also th
8180: 69 6e 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ink of savepoint
8190: 73 20 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20  s as."marks" in 
81a0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
81b0: 74 69 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68  timeline.  In th
81c0: 69 73 20 76 69 65 77 2c 20 74 68 65 20 53 41 56  is view, the SAV
81d0: 45 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63  EPOINT command.c
81e0: 72 65 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72  reates a new mar
81f0: 6b 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20  k, the ROLLBACK 
8200: 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e  TO command rewin
8210: 64 73 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20  ds the timeline 
8220: 62 61 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20  back.to a point 
8230: 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20 6e  just after the n
8240: 61 6d 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74  amed mark, and t
8250: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
8260: 6e 64 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20  nd.erases marks 
8270: 66 72 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e  from the timelin
8280: 65 20 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c  e without actual
8290: 6c 79 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68  ly making any.ch
82a0: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
82b0: 61 62 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e  abase..</p></li>
82c0: 0a 3c 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72  .</ul>....<h3>Tr
82d0: 61 6e 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e  ansaction Nestin
82e0: 67 20 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70  g Rules</h3>..<p
82f0: 3e 5e 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73  >^The last trans
8300: 61 63 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77  action started w
8310: 69 6c 6c 20 62 65 20 74 68 65 20 66 69 72 73 74  ill be the first
8320: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d  .transaction com
8330: 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64  mitted or rolled
8340: 20 62 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   back.</p>..<p>^
8350: 54 68 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d  The [BEGIN] comm
8360: 61 6e 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69  and only works i
8370: 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  f the transactio
8380: 6e 20 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79  n stack is empty
8390: 2c 20 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f  , or.in other wo
83a0: 72 64 73 20 69 66 20 74 68 65 72 65 20 61 72 65  rds if there are
83b0: 20 6e 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e   no pending tran
83c0: 73 61 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74  sactions.  ^If t
83d0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73  he transaction.s
83e0: 74 61 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74  tack is not empt
83f0: 79 20 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49  y when the [BEGI
8400: 4e 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e  N] command is in
8410: 76 6f 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20  voked, then the 
8420: 63 6f 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69  command.fails wi
8430: 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  th an error.</p>
8440: 0a 0a 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49  ..<p>^The [COMMI
8450: 54 5d 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69  T] command commi
8460: 74 73 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69  ts all outstandi
8470: 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ng transactions 
8480: 61 6e 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74  and leaves.the t
8490: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
84a0: 20 65 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e   empty.</p>..<p>
84b0: 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d  ^The RELEASE com
84c0: 6d 61 6e 64 20 73 74 61 72 74 73 20 77 69 74 68  mand starts with
84d0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
84e0: 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65   addition to the
84f0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61  .transaction sta
8500: 63 6b 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20  ck and releases 
8510: 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77  savepoints backw
8520: 61 72 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e  ards .in time un
8530: 74 69 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20  til it releases 
8540: 61 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68  a savepoint with
8550: 20 61 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65   a matching save
8560: 70 6f 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69  point-name..^Pri
8570: 6f 72 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65  or savepoints, e
8580: 76 65 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77  ven savepoints w
8590: 69 74 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76  ith matching sav
85a0: 65 70 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72  epoint-names, ar
85b0: 65 0a 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66  e.unchanged..^If
85c0: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d   the RELEASE com
85d0: 6d 61 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a  mand causes the.
85e0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
85f0: 6b 20 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74  k to become empt
8600: 79 20 28 69 66 20 74 68 65 20 52 45 4c 45 41 53  y (if the RELEAS
8610: 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73  E command releas
8620: 65 73 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74  es the.outermost
8630: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f   transaction fro
8640: 6d 20 74 68 65 20 73 74 61 63 6b 29 20 74 68 65  m the stack) the
8650: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
8660: 6e 20 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a  n commits.</p>..
8670: 3c 70 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43  <p>^The [ROLLBAC
8680: 4b 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f  K] command witho
8690: 75 74 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72  ut a TO clause r
86a0: 6f 6c 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74  olls backs all t
86b0: 72 61 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20  ransactions.and 
86c0: 6c 65 61 76 65 73 20 74 68 65 20 74 72 61 6e 73  leaves the trans
86d0: 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70  action stack emp
86e0: 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ty.</p>..<p>^The
86f0: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
8700: 64 20 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75  d with a TO clau
8710: 73 65 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72  se rolls back tr
8720: 61 6e 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67  ansactions going
8730: 0a 62 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69  .backwards in ti
8740: 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d  me back to the m
8750: 6f 73 74 20 72 65 63 65 6e 74 20 53 41 56 45 50  ost recent SAVEP
8760: 4f 49 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63  OINT with a matc
8770: 68 69 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20  hing name..^The 
8780: 53 41 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74  SAVEPOINT with t
8790: 68 65 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65  he matching name
87a0: 20 72 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20   remains on the 
87b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63  transaction stac
87c0: 6b 2c 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62  k,.but all datab
87d0: 61 73 65 20 63 68 61 6e 67 65 73 20 74 68 61 74  ase changes that
87e0: 20 6f 63 63 75 72 72 65 64 20 61 66 74 65 72 20   occurred after 
87f0: 74 68 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77  that SAVEPOINT w
8800: 61 73 20 63 72 65 61 74 65 64 0a 61 72 65 20 72  as created.are r
8810: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66  olled back.  ^If
8820: 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e   the savepoint-n
8830: 61 6d 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43  ame in a ROLLBAC
8840: 4b 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65  K TO command doe
8850: 73 20 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20  s not.match any 
8860: 53 41 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65  SAVEPOINT on the
8870: 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65   stack, then the
8880: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
8890: 64 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a  d fails with an.
88a0: 65 72 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73  error and leaves
88b0: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
88c0: 65 20 64 61 74 61 62 61 73 65 20 75 6e 63 68 61  e database uncha
88d0: 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  nged.</p>..<tcl>
88e0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
88f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8930: 0a 53 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74  .Section comment
8940: 20 63 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e   comment {commen
8950: 74 20 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65  t *comments}..Re
8960: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
8970: 67 72 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e  gram comment-syn
8980: 74 61 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tax.</tcl>..<p>^
8990: 43 6f 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74  Comments are not
89a0: 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62   SQL commands, b
89b0: 75 74 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74  ut can occur wit
89c0: 68 69 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a  hin the text of.
89d0: 53 51 4c 20 71 75 65 72 69 65 73 20 70 61 73 73  SQL queries pass
89e0: 65 64 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70  ed to [sqlite3_p
89f0: 72 65 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64  repare_v2()] and
8a00: 20 72 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61   related interfa
8a10: 63 65 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61  ces..^Comments a
8a20: 72 65 20 74 72 65 61 74 65 64 20 61 73 20 77 68  re treated as wh
8a30: 69 74 65 73 70 61 63 65 20 62 79 20 74 68 65 20  itespace by the 
8a40: 70 61 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74  parser..^Comment
8a50: 73 20 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77  s can begin anyw
8a60: 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65 20  here whitespace 
8a70: 0a 63 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69  .can be found, i
8a80: 6e 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20  ncluding inside 
8a90: 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
8aa0: 20 73 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c   span multiple l
8ab0: 69 6e 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ines..</p>..<p>^
8ac0: 53 51 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67  SQL comments beg
8ad0: 69 6e 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73  in with two cons
8ae0: 65 63 75 74 69 76 65 20 22 2d 22 20 63 68 61 72  ecutive "-" char
8af0: 61 63 74 65 72 73 20 28 41 53 43 49 49 20 30 78  acters (ASCII 0x
8b00: 32 64 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75  2d).and extend u
8b10: 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69  p to and includi
8b20: 6e 67 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c  ng the next newl
8b30: 69 6e 65 20 63 68 61 72 61 63 74 65 72 20 28 41  ine character (A
8b40: 53 43 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e  SCII 0x0a).or un
8b50: 74 69 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69  til the end of i
8b60: 6e 70 75 74 2c 20 77 68 69 63 68 65 76 65 72 20  nput, whichever 
8b70: 63 6f 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e  comes first.</p>
8b80: 0a 0a 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f  ..<p>^C-style co
8b90: 6d 6d 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74  mments begin.wit
8ba0: 68 20 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e  h "/*" and exten
8bb0: 64 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c  d up to and incl
8bc0: 75 64 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22  uding the next "
8bd0: 2a 2f 22 20 63 68 61 72 61 63 74 65 72 20 70 61  */" character pa
8be0: 69 72 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20  ir.or until the 
8bf0: 65 6e 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68  end of input, wh
8c00: 69 63 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69  ichever comes fi
8c10: 72 73 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63  rst.  ^C-style c
8c20: 6f 6d 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e  omments.can span
8c30: 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e   multiple lines.
8c40: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65   </p>..<p>^Comme
8c50: 6e 74 73 20 63 61 6e 20 61 70 70 65 61 72 20 61  nts can appear a
8c60: 6e 79 77 68 65 72 65 20 77 68 69 74 65 73 70 61  nywhere whitespa
8c70: 63 65 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e  ce can occur,.in
8c80: 63 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65  cluding inside e
8c90: 78 70 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69  xpressions and i
8ca0: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
8cb0: 6f 74 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d  other SQL statem
8cc0: 65 6e 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  ents..^Comments 
8cd0: 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70  do not nest..</p
8ce0: 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  >...<tcl>.######
8cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d30: 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
8d40: 20 7b 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20   {CREATE INDEX} 
8d50: 63 72 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52  createindex {{CR
8d60: 45 41 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 52 65  EATE INDEX}}..Re
8d70: 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
8d80: 67 72 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65  gram create-inde
8d90: 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  x-stmt.</tcl>..<
8da0: 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e  p>^The CREATE IN
8db0: 44 45 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73  DEX command cons
8dc0: 69 73 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77  ists of the keyw
8dd0: 6f 72 64 73 20 22 43 52 45 41 54 45 20 49 4e 44  ords "CREATE IND
8de0: 45 58 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20  EX" followed.by 
8df0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
8e00: 6e 65 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b  new index, the k
8e10: 65 79 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65  eyword "ON", the
8e20: 20 6e 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69   name of a previ
8e30: 6f 75 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61  ously.created ta
8e40: 62 6c 65 20 74 68 61 74 20 69 73 20 74 6f 20 62  ble that is to b
8e50: 65 20 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61  e indexed, and a
8e60: 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
8e70: 69 73 74 20 6f 66 20 74 61 62 6c 65 20 63 6f 6c  ist of table col
8e80: 75 6d 6e 0a 6e 61 6d 65 73 20 61 6e 64 2f 6f 72  umn.names and/or
8e90: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
8ea0: 74 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 74  t are used for t
8eb0: 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 49 66  he index key..If
8ec0: 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 57 48   the optional WH
8ed0: 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 69 6e  ERE clause is in
8ee0: 63 6c 75 64 65 64 2c 20 74 68 65 6e 20 74 68 65  cluded, then the
8ef0: 20 69 6e 64 65 78 20 69 73 20 61 20 22 5b 70 61   index is a "[pa
8f00: 72 74 69 61 6c 20 69 6e 64 65 78 5d 22 2e 0a 3c  rtial index]"..<
8f10: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
8f20: 67 6d 65 6e 74 20 7b 64 65 73 63 69 64 78 7d 20  gment {descidx} 
8f30: 7b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 69  {descending indi
8f40: 63 65 73 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67  ces} {descending
8f50: 20 69 6e 64 65 78 7d 20 5c 0a 20 20 20 20 7b 64   index} \.    {d
8f60: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 65  escending indexe
8f70: 73 7d 20 7b 44 45 53 43 7d 3c 2f 74 63 6c 3e 0a  s} {DESC}</tcl>.
8f80: 3c 70 3e 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20  <p>^Each column 
8f90: 6e 61 6d 65 20 6f 72 20 65 78 70 72 65 73 73 69  name or expressi
8fa0: 6f 6e 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77  on can be follow
8fb0: 65 64 20 62 79 20 6f 6e 65 0a 6f 66 20 74 68 65  ed by one.of the
8fc0: 20 22 41 53 43 22 20 6f 72 20 22 44 45 53 43 22   "ASC" or "DESC"
8fd0: 20 6b 65 79 77 6f 72 64 73 20 74 6f 20 69 6e 64   keywords to ind
8fe0: 69 63 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72  icate sort order
8ff0: 2e 0a 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65  ..^The sort orde
9000: 72 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74  r may or may not
9010: 20 62 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65   be ignored depe
9020: 6e 64 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74  nding.on the dat
9030: 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61  abase file forma
9040: 74 2c 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63  t, and in partic
9050: 75 6c 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61  ular the [schema
9060: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e   format number].
9070: 0a 5e 54 68 65 20 22 6c 65 67 61 63 79 22 20 73  .^The "legacy" s
9080: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29  chema format (1)
9090: 20 69 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73   ignores index.s
90a0: 6f 72 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65  ort order.  ^The
90b0: 20 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65   descending inde
90c0: 78 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  x schema format 
90d0: 28 34 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20  (4) takes index 
90e0: 73 6f 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20  sort order.into 
90f0: 61 63 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76  account.  Only v
9100: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
9110: 65 20 33 2e 33 2e 30 20 28 5b 64 61 74 65 6f 66  e 3.3.0 ([dateof
9120: 3a 33 2e 33 2e 30 5d 29 0a 61 6e 64 20 6c 61 74  :3.3.0]).and lat
9130: 65 72 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75  er are able to u
9140: 6e 64 65 72 73 74 61 6e 64 0a 74 68 65 20 64 65  nderstand.the de
9150: 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 66  scending index f
9160: 6f 72 6d 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61  ormat. For compa
9170: 74 69 62 69 6c 69 74 79 2c 20 76 65 72 73 69 6f  tibility, versio
9180: 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 74 77  n of SQLite betw
9190: 65 65 6e 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e  een 3.3.0.and 3.
91a0: 37 2e 39 20 75 73 65 20 74 68 65 20 6c 65 67 61  7.9 use the lega
91b0: 63 79 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  cy schema format
91c0: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68   by default.  Th
91d0: 65 20 6e 65 77 65 72 20 73 63 68 65 6d 61 20 66  e newer schema f
91e0: 6f 72 6d 61 74 20 69 73 0a 75 73 65 64 20 62 79  ormat is.used by
91f0: 20 64 65 66 61 75 6c 74 20 69 6e 20 76 65 72 73   default in vers
9200: 69 6f 6e 20 33 2e 37 2e 31 30 20 28 5b 64 61 74  ion 3.7.10 ([dat
9210: 65 6f 66 3a 33 2e 37 2e 31 30 5d 29 20 61 6e 64  eof:3.7.10]) and
9220: 20 6c 61 74 65 72 2e 0a 5e 54 68 65 20 5b 6c 65   later..^The [le
9230: 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74  gacy_file_format
9240: 20 70 72 61 67 6d 61 5d 20 63 61 6e 20 62 65 20   pragma] can be 
9250: 75 73 65 64 20 74 6f 20 63 68 61 6e 67 65 20 73  used to change s
9260: 65 74 20 74 68 65 20 73 70 65 63 69 66 69 63 0a  et the specific.
9270: 62 65 68 61 76 69 6f 72 20 66 6f 72 20 61 6e 79  behavior for any
9280: 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69   version of SQLi
9290: 74 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  te.</p>..<tcl>hd
92a0: 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 69 64  _fragment collid
92b0: 78 20 7b 43 4f 4c 4c 41 54 45 7d 3c 2f 74 63 6c  x {COLLATE}</tcl
92c0: 3e 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54  >.<p>^The COLLAT
92d0: 45 20 63 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61  E clause optiona
92e0: 6c 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61  lly following ea
92f0: 63 68 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 6f  ch column name.o
9300: 72 20 65 78 70 72 65 73 73 69 6f 6e 20 64 65 66  r expression def
9310: 69 6e 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67  ines a.collating
9320: 20 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 66   sequence used f
9330: 6f 72 20 74 65 78 74 20 65 6e 74 72 69 65 73 20  or text entries 
9340: 69 6e 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a  in that column..
9350: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c  ^The default col
9360: 6c 61 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20  lating.sequence 
9370: 69 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67  is the collating
9380: 20 73 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65   sequence define
9390: 64 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  d for that colum
93a0: 6e 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45  n in the.[CREATE
93b0: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
93c0: 74 2e 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f  t.  ^Or if no co
93d0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
93e0: 20 69 73 20 6f 74 68 65 72 77 69 73 65 20 64 65   is otherwise de
93f0: 66 69 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74  fined,.the built
9400: 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61  -in BINARY colla
9410: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
9420: 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   used.</p>..<tcl
9430: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 64  >hd_fragment ind
9440: 65 78 65 78 70 72 3c 2f 74 63 6c 3e 0a 3c 70 3e  exexpr</tcl>.<p>
9450: 5e 45 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20  ^Expressions in 
9460: 61 6e 20 69 6e 64 65 78 20 6d 61 79 20 6e 6f 74  an index may not
9470: 20 72 65 66 65 72 65 6e 63 65 20 6f 74 68 65 72   reference other
9480: 20 74 61 62 6c 65 73 0a 61 6e 64 20 6d 61 79 20   tables.and may 
9490: 6e 6f 74 20 75 73 65 20 73 75 62 71 75 65 72 69  not use subqueri
94a0: 65 73 20 6e 6f 72 20 66 75 6e 63 74 69 6f 6e 73  es nor functions
94b0: 20 77 68 6f 73 65 20 72 65 73 75 6c 74 20 6d 69   whose result mi
94c0: 67 68 74 0a 63 68 61 6e 67 65 20 28 65 78 3a 20  ght.change (ex: 
94d0: 5b 72 61 6e 64 6f 6d 28 29 5d 20 6f 72 20 5b 73  [random()] or [s
94e0: 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 5d  qlite_version()]
94f0: 29 2e 0a 5e 45 78 70 72 65 73 73 69 6f 6e 73 20  )..^Expressions 
9500: 69 6e 20 61 6e 20 69 6e 64 65 78 20 6d 61 79 20  in an index may 
9510: 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f 20 63 6f  only refer to co
9520: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
9530: 6c 65 0a 74 68 61 74 20 69 73 20 62 65 69 6e 67  le.that is being
9540: 20 69 6e 64 65 78 65 64 2e 0a 49 6e 64 65 78 65   indexed..Indexe
9550: 73 20 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s on expression 
9560: 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 77 69  will not work wi
9570: 74 68 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  th versions of S
9580: 51 4c 69 74 65 20 70 72 69 6f 72 0a 74 6f 20 5b  QLite prior.to [
9590: 76 65 72 73 69 6f 6e 20 33 2e 39 2e 30 5d 20 28  version 3.9.0] (
95a0: 5b 64 61 74 65 6f 66 3a 33 2e 39 2e 30 5d 29 2e  [dateof:3.9.0]).
95b0: 0a 53 65 65 20 74 68 65 20 5b 49 6e 64 65 78 65  .See the [Indexe
95c0: 73 20 4f 6e 20 45 78 70 72 65 73 73 69 6f 6e 73  s On Expressions
95d0: 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61  ] document for a
95e0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
95f0: 61 74 69 6f 6e 0a 61 62 6f 75 74 20 75 73 69 6e  ation.about usin
9600: 67 20 67 65 6e 65 72 61 6c 20 65 78 70 72 65 73  g general expres
9610: 73 69 6f 6e 73 20 69 6e 20 43 52 45 41 54 45 20  sions in CREATE 
9620: 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 73  INDEX statements
9630: 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  ...<p>There are 
9640: 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d  no arbitrary lim
9650: 69 74 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  its on the numbe
9660: 72 20 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61  r of indices tha
9670: 74 20 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65  t can be.attache
9680: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
9690: 62 6c 65 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62  ble.  ^(The numb
96a0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
96b0: 20 61 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69   an index is .li
96c0: 6d 69 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c  mited to the val
96d0: 75 65 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74  ue set by.[sqlit
96e0: 65 33 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54  e3_limit]([SQLIT
96f0: 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c  E_LIMIT_COLUMN],
9700: 2e 2e 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63  ...).)^</p>..<tc
9710: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e  l>hd_fragment un
9720: 69 71 75 65 69 64 78 20 7b 75 6e 69 71 75 65 20  iqueidx {unique 
9730: 69 6e 64 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  index}</tcl>.<p>
9740: 5e 49 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b  ^If the UNIQUE k
9750: 65 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62  eyword appears b
9760: 65 74 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e  etween CREATE an
9770: 64 20 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70  d INDEX then dup
9780: 6c 69 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74  licate.index ent
9790: 72 69 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c  ries are not all
97a0: 6f 77 65 64 2e 20 20 5e 41 6e 79 20 61 74 74 65  owed.  ^Any atte
97b0: 6d 70 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20  mpt to insert a 
97c0: 64 75 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a  duplicate entry.
97d0: 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
97e0: 6e 20 65 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74  n error.  ^For t
97f0: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75  he purposes of u
9800: 6e 69 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61  nique indices, a
9810: 6c 6c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61  ll NULL values.a
9820: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69  re considered di
9830: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c  fferent from all
9840: 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75   other NULL valu
9850: 65 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20  es and are thus 
9860: 75 6e 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20  unique..This is 
9870: 6f 6e 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70  one of the two p
9880: 6f 73 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65  ossible interpre
9890: 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53  tations of the S
98a0: 51 4c 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28  QL-92 standard.(
98b0: 74 68 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20  the language in 
98c0: 74 68 65 20 73 74 61 6e 64 61 72 64 20 69 73 20  the standard is 
98d0: 61 6d 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69  ambiguous) and i
98e0: 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 61  s the interpreta
98f0: 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79  tion.followed by
9900: 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53   PostgreSQL, MyS
9910: 51 4c 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e  QL, Firebird, an
9920: 64 20 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72  d Oracle.  Infor
9930: 6d 69 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66  mix and.Microsof
9940: 74 20 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c  t SQL Server fol
9950: 6c 6f 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e  low the other in
9960: 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
9970: 74 68 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70  the standard.</p
9980: 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70  >..<p>^If the op
9990: 74 69 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58  tional IF NOT EX
99a0: 49 53 54 53 20 63 6c 61 75 73 65 20 69 73 20 70  ISTS clause is p
99b0: 72 65 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68  resent and anoth
99c0: 65 72 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68  er index.with th
99d0: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65  e same name alre
99e0: 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e  ady exists, then
99f0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65   this command be
9a00: 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f  comes a no-op.</
9a10: 70 3e 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20  p>..<p>^Indexes 
9a20: 61 72 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68  are removed with
9a30: 20 74 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58   the [DROP INDEX
9a40: 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a  ] command.</p>..
9a50: 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
9a60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9a80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9aa0: 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43  #####.Section {C
9ab0: 52 45 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72  REATE TABLE} {cr
9ac0: 65 61 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45  eatetable} {{CRE
9ad0: 41 54 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63  ATE TABLE}}..Rec
9ae0: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
9af0: 72 61 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65  ram create-table
9b00: 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
9b10: 3e 54 68 65 20 22 43 52 45 41 54 45 20 54 41 42  >The "CREATE TAB
9b20: 4c 45 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  LE" command is u
9b30: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
9b40: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20  new table in an 
9b50: 53 51 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65  SQLite .database
9b60: 2e 20 41 20 43 52 45 41 54 45 20 54 41 42 4c 45  . A CREATE TABLE
9b70: 20 63 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69   command specifi
9b80: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
9b90: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 74   attributes of t
9ba0: 68 65 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c  he.new table:..<
9bb0: 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65  ul>.  <li><p>The
9bc0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77   name of the new
9bd0: 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c   table...  <li><
9be0: 70 3e 20 54 68 65 20 64 61 74 61 62 61 73 65 20  p> The database 
9bf0: 69 6e 20 77 68 69 63 68 20 74 68 65 20 6e 65 77  in which the new
9c00: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
9c10: 64 2e 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65  d. Tables may be
9c20: 20 0a 20 20 20 20 20 20 63 72 65 61 74 65 64 20   .      created 
9c30: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
9c40: 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64  base, the temp d
9c50: 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61  atabase, or in a
9c60: 6e 79 20 61 74 74 61 63 68 65 64 0a 20 20 20 20  ny attached.    
9c70: 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c    database...  <
9c80: 6c 69 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20  li><p> The name 
9c90: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
9ca0: 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20  n the table...  
9cb0: 3c 6c 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c  <li><p> The decl
9cc0: 61 72 65 64 20 74 79 70 65 20 6f 66 20 65 61 63  ared type of eac
9cd0: 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
9ce0: 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  table...  <li><p
9cf0: 3e 20 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75  > A default valu
9d00: 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20  e or expression 
9d10: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
9d20: 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20  in the table... 
9d30: 20 3c 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75   <li><p> A defau
9d40: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  lt collation seq
9d50: 75 65 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74  uence to use wit
9d60: 68 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a  h each column...
9d70: 20 20 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e    <li><p> Option
9d80: 61 6c 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20  ally, a PRIMARY 
9d90: 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c  KEY for the tabl
9da0: 65 2e 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63  e. Both single c
9db0: 6f 6c 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20  olumn and.      
9dc0: 20 63 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74   composite (mult
9dd0: 69 70 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69  iple column) pri
9de0: 6d 61 72 79 20 6b 65 79 73 20 61 72 65 20 73 75  mary keys are su
9df0: 70 70 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e  pported...  <li>
9e00: 3c 70 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c  <p> A set of SQL
9e10: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72   constraints for
9e20: 20 65 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c   each table. SQL
9e30: 69 74 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49  ite supports UNI
9e40: 51 55 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20  QUE, NOT.       
9e50: 4e 55 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20  NULL, CHECK and 
9e60: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
9e70: 74 72 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e  traints...  <li>
9e80: 3c 70 3e 20 57 68 65 74 68 65 72 20 74 68 65 20  <p> Whether the 
9e90: 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
9ea0: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
9eb0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72  ..</ul>..<p>Ever
9ec0: 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  y CREATE TABLE s
9ed0: 74 61 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70  tatement must sp
9ee0: 65 63 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72  ecify a name for
9ef0: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a   the new table..
9f00: 20 20 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20    ^(Table names 
9f10: 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20  that begin with 
9f20: 22 73 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65  "sqlite_" are re
9f30: 73 65 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72  served for inter
9f40: 6e 61 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73  nal use. It.  is
9f50: 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74   an error to att
9f60: 65 6d 70 74 20 74 6f 20 63 72 65 61 74 65 20 61  empt to create a
9f70: 20 74 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61   table with a na
9f80: 6d 65 20 74 68 61 74 20 73 74 61 72 74 73 20 77  me that starts w
9f90: 69 74 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e  ith.  "sqlite_".
9fa0: 29 5e 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 3c 79  )^..<p> ^If a <y
9fb0: 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d  yterm>schema-nam
9fc0: 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 73 70  e</yyterm> is sp
9fd0: 65 63 69 66 69 65 64 2c 20 69 74 20 6d 75 73 74  ecified, it must
9fe0: 20 62 65 20 65 69 74 68 65 72 20 22 6d 61 69 6e   be either "main
9ff0: 22 2c 20 0a 20 20 22 74 65 6d 70 22 2c 20 6f 72  ", .  "temp", or
a000: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20   the name of an 
a010: 5b 41 54 54 41 43 48 20 44 41 54 41 42 41 53 45  [ATTACH DATABASE
a020: 7c 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61  |attached databa
a030: 73 65 5d 2e 20 5e 49 6e 20 74 68 69 73 20 63 61  se]. ^In this ca
a040: 73 65 0a 20 20 74 68 65 20 6e 65 77 20 74 61 62  se.  the new tab
a050: 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  le is created in
a060: 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62   the named datab
a070: 61 73 65 2e 20 5e 49 66 20 74 68 65 20 22 54 45  ase. ^If the "TE
a080: 4d 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52  MP" or "TEMPORAR
a090: 59 22 0a 20 20 6b 65 79 77 6f 72 64 20 6f 63 63  Y".  keyword occ
a0a0: 75 72 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  urs between the 
a0b0: 22 43 52 45 41 54 45 22 20 61 6e 64 20 22 54 41  "CREATE" and "TA
a0c0: 42 4c 45 22 20 74 68 65 6e 20 74 68 65 20 6e 65  BLE" then the ne
a0d0: 77 20 74 61 62 6c 65 20 69 73 0a 20 20 63 72 65  w table is.  cre
a0e0: 61 74 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70  ated in the temp
a0f0: 20 64 61 74 61 62 61 73 65 2e 20 5e 49 74 20 69   database. ^It i
a100: 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70  s an error to sp
a110: 65 63 69 66 79 20 62 6f 74 68 20 61 20 0a 20 20  ecify both a .  
a120: 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e  <yyterm>schema-n
a130: 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64  ame</yyterm> and
a140: 20 74 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d   the TEMP or TEM
a150: 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 2c 20  PORARY keyword, 
a160: 75 6e 6c 65 73 73 20 74 68 65 0a 20 20 3c 79 79  unless the.  <yy
a170: 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
a180: 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 22 74 65  </yyterm> is "te
a190: 6d 70 22 2e 20 0a 20 20 5e 49 66 20 6e 6f 20 73  mp". .  ^If no s
a1a0: 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70  chema name is sp
a1b0: 65 63 69 66 69 65 64 20 61 6e 64 20 74 68 65 0a  ecified and the.
a1c0: 20 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69    TEMP keyword i
a1d0: 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 74 68  s not present th
a1e0: 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  en the table is 
a1f0: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d  created in the m
a200: 61 69 6e 0a 20 20 64 61 74 61 62 61 73 65 2e 0a  ain.  database..
a210: 0a 3c 70 3e 0a 20 20 5e 49 74 20 69 73 20 75 73  .<p>.  ^It is us
a220: 75 61 6c 6c 79 20 61 6e 20 65 72 72 6f 72 20 74  ually an error t
a230: 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65  o attempt to cre
a240: 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20  ate a new table 
a250: 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 68  in a database th
a260: 61 74 0a 20 20 61 6c 72 65 61 64 79 20 63 6f 6e  at.  already con
a270: 74 61 69 6e 73 20 61 20 74 61 62 6c 65 2c 20 69  tains a table, i
a280: 6e 64 65 78 20 6f 72 20 76 69 65 77 20 6f 66 20  ndex or view of 
a290: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 20 5e  the same name. ^
a2a0: 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 0a  However, if the.
a2b0: 20 20 22 49 46 20 4e 4f 54 20 45 58 49 53 54 53    "IF NOT EXISTS
a2c0: 22 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  " clause is spec
a2d0: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
a2e0: 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c   the CREATE TABL
a2f0: 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 0a  E statement and.
a300: 20 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65    a table or vie
a310: 77 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61  w of the same na
a320: 6d 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  me already exist
a330: 73 2c 20 74 68 65 20 43 52 45 41 54 45 20 54 41  s, the CREATE TA
a340: 42 4c 45 20 63 6f 6d 6d 61 6e 64 0a 20 20 73 69  BLE command.  si
a350: 6d 70 6c 79 20 68 61 73 20 6e 6f 20 65 66 66 65  mply has no effe
a360: 63 74 20 28 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ct (and no error
a370: 20 6d 65 73 73 61 67 65 20 69 73 20 72 65 74 75   message is retu
a380: 72 6e 65 64 29 2e 20 5e 41 6e 20 65 72 72 6f 72  rned). ^An error
a390: 20 69 73 20 73 74 69 6c 6c 0a 20 20 72 65 74 75   is still.  retu
a3a0: 72 6e 65 64 20 69 66 20 74 68 65 20 74 61 62 6c  rned if the tabl
a3b0: 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  e cannot be crea
a3c0: 74 65 64 20 62 65 63 61 75 73 65 20 6f 66 20 61  ted because of a
a3d0: 6e 20 65 78 69 73 74 69 6e 67 20 69 6e 64 65 78  n existing index
a3e0: 2c 20 65 76 65 6e 20 0a 20 20 69 66 20 74 68 65  , even .  if the
a3f0: 20 22 49 46 20 4e 4f 54 20 45 58 49 53 54 53 22   "IF NOT EXISTS"
a400: 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
a410: 66 69 65 64 2e 0a 0a 3c 70 3e 5e 49 74 20 69 73  fied...<p>^It is
a420: 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 74 6f   not an error to
a430: 20 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20   create a table 
a440: 74 68 61 74 20 68 61 73 20 74 68 65 20 73 61 6d  that has the sam
a450: 65 20 6e 61 6d 65 20 61 73 20 61 6e 20 0a 20 20  e name as an .  
a460: 65 78 69 73 74 69 6e 67 20 5b 43 52 45 41 54 45  existing [CREATE
a470: 20 54 52 49 47 47 45 52 7c 74 72 69 67 67 65 72   TRIGGER|trigger
a480: 5d 2e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 61  ]...<p>^Tables a
a490: 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67  re removed using
a4a0: 20 74 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45   the [DROP TABLE
a4b0: 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 3c 2f  ] statement.  </
a4c0: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
a4d0: 6d 65 6e 74 20 63 72 65 61 74 65 74 61 62 61 73  ment createtabas
a4e0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 41   {CREATE TABLE A
a4f0: 53 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 52 45  S}</tcl>.<h3>CRE
a500: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
a510: 20 53 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e   SELECT Statemen
a520: 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  ts</h3>..<p>^(A 
a530: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  "CREATE TABLE ..
a540: 2e 20 41 53 20 53 45 4c 45 43 54 22 20 73 74 61  . AS SELECT" sta
a550: 74 65 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61  tement creates a
a560: 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64  nd populates a d
a570: 61 74 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61  atabase.table ba
a580: 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  sed on the resul
a590: 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  ts of a SELECT s
a5a0: 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68  tatement.)^ ^(Th
a5b0: 65 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20  e table has the 
a5c0: 73 61 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63  same.number of c
a5d0: 6f 6c 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f  olumns as the ro
a5e0: 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ws returned by t
a5f0: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
a600: 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66  ent. The name of
a610: 0a 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20  .each column is 
a620: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
a630: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72  name of the corr
a640: 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e  esponding column
a650: 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73   in the result.s
a660: 65 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  et of the SELECT
a670: 20 73 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28   statement.)^ ^(
a680: 54 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  The declared typ
a690: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
a6a0: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62   is determined.b
a6b0: 79 20 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f  y the [expressio
a6c0: 6e 20 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74  n affinity] of t
a6d0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
a6e0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
a6f0: 68 65 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66  he result set.of
a700: 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
a710: 65 6d 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77  ement, as follow
a720: 73 3a 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  s:.</p>..<center
a730: 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  ><table border=1
a740: 3e 0a 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72  >.  <tr><th>Expr
a750: 65 73 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20  ession Affinity 
a760: 20 20 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63    <th>Column Dec
a770: 6c 61 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72  lared Type.  <tr
a780: 3e 3c 74 64 3e 54 45 58 54 20 20 20 20 20 20 20  ><td>TEXT       
a790: 20 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22             <td>"
a7a0: 54 45 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e  TEXT".  <tr><td>
a7b0: 4e 55 4d 45 52 49 43 20 20 20 20 20 20 20 20 20  NUMERIC         
a7c0: 20 20 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a        <td>"NUM".
a7d0: 20 20 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45    <tr><td>INTEGE
a7e0: 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  R               
a7f0: 3c 74 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e  <td>"INT".  <tr>
a800: 3c 74 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20  <td>REAL        
a810: 20 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52            <td>"R
a820: 45 41 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 42  EAL".  <tr><td>B
a830: 4c 4f 42 20 28 61 2e 6b 2e 61 20 22 4e 4f 4e 45  LOB (a.k.a "NONE
a840: 22 29 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70  ")   <td>"" (emp
a850: 74 79 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62  ty string).</tab
a860: 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  le></center>)^..
a870: 3c 70 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65  <p>^(A table cre
a880: 61 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54  ated using CREAT
a890: 45 20 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e  E TABLE AS has n
a8a0: 6f 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  o PRIMARY KEY an
a8b0: 64 20 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73  d no.constraints
a8c0: 20 6f 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68   of any kind. Th
a8d0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value 
a8e0: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
a8f0: 73 20 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61  s NULL. The defa
a900: 75 6c 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult.collation se
a910: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
a920: 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65  column of the ne
a930: 77 20 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52  w table is BINAR
a940: 59 2e 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73  Y.)^..<p>^Tables
a950: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   created using C
a960: 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 61  REATE TABLE AS a
a970: 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70  re initially pop
a980: 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65 0a  ulated with the.
a990: 72 6f 77 73 20 6f 66 20 64 61 74 61 20 72 65 74  rows of data ret
a9a0: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
a9b0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
a9c0: 52 6f 77 73 20 61 72 65 20 61 73 73 69 67 6e 65  Rows are assigne
a9d0: 64 20 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61  d contiguously.a
a9e0: 73 63 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d  scending [rowid]
a9f0: 20 76 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e   values, startin
aa00: 67 20 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65  g with 1, in the
aa10: 20 5b 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72   [order by|order
aa20: 5d 20 74 68 61 74 20 74 68 65 79 0a 61 72 65 20  ] that they.are 
aa30: 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
aa40: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
aa50: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
aa60: 65 6e 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66  ent {tablecoldef
aa70: 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  } {column defini
aa80: 74 69 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65  tion} {column de
aa90: 66 69 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e  finitions}</tcl>
aaa0: 0a 3c 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69  .<h3>Column Defi
aab0: 6e 69 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  nitions</h3>..<p
aac0: 3e 55 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20  >Unless it is a 
aad0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e  CREATE TABLE ...
aae0: 20 41 53 20 53 45 4c 45 43 54 20 73 74 61 74 65   AS SELECT state
aaf0: 6d 65 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54  ment, a CREATE T
ab00: 41 42 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e  ABLE includes.on
ab10: 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d  e or more [colum
ab20: 6e 2d 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66  n-def|column def
ab30: 69 6e 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f  initions], optio
ab40: 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62  nally followed b
ab50: 79 20 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62  y a list of.[tab
ab60: 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61  le-constraint|ta
ab70: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d  ble constraints]
ab80: 2e 20 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64  .  Each column d
ab90: 65 66 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73  efinition consis
aba0: 74 73 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f  ts of the.name o
abb0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70  f the column, op
abc0: 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
abd0: 64 20 62 79 20 74 68 65 20 64 65 63 6c 61 72 65  d by the declare
abe0: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f  d type of the co
abf0: 6c 75 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f  lumn,.then one o
ac00: 72 20 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20  r more optional 
ac10: 5b 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69  [column-constrai
ac20: 6e 74 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72  nt|column constr
ac30: 61 69 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64  aints]. Included
ac40: 20 69 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69   in.the definiti
ac50: 6f 6e 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f  on of "column co
ac60: 6e 73 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74  nstraints" for t
ac70: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
ac80: 68 65 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74  he previous.stat
ac90: 65 6d 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f  ement are the CO
aca0: 4c 4c 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c  LLATE and DEFAUL
acb0: 54 20 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20  T clauses, even 
acc0: 74 68 6f 75 67 68 20 74 68 65 73 65 20 61 72 65  though these are
acd0: 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73   not really.cons
ace0: 74 72 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73  traints in the s
acf0: 65 6e 73 65 20 74 68 61 74 20 74 68 65 79 20 64  ense that they d
ad00: 6f 20 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74  o not restrict t
ad10: 68 65 20 64 61 74 61 20 74 68 61 74 20 74 68 65  he data that the
ad20: 20 74 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61   table may.conta
ad30: 69 6e 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f  in. The other co
ad40: 6e 73 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20  nstraints - NOT 
ad50: 4e 55 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49  NULL, CHECK, UNI
ad60: 51 55 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  QUE, PRIMARY KEY
ad70: 20 61 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59   and.FOREIGN KEY
ad80: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69   constraints - i
ad90: 6d 70 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f  mpose restrictio
ada0: 6e 73 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73  ns on the tables
adb0: 20 64 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61   data, and are a
adc0: 72 65 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64  re.described und
add0: 65 72 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c  er [constraints|
ade0: 53 51 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61  SQL Data Constra
adf0: 69 6e 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70  ints] below...<p
ae00: 3e 5e 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51  >^Unlike most SQ
ae10: 4c 20 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c  L databases, SQL
ae20: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ite does not res
ae30: 74 72 69 63 74 20 74 68 65 20 74 79 70 65 20 6f  trict the type o
ae40: 66 20 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20  f data that.may 
ae50: 62 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  be inserted into
ae60: 20 61 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20   a column based 
ae70: 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64  on the columns d
ae80: 65 63 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e  eclared type. In
ae90: 73 74 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73  stead,.SQLite us
aea0: 65 73 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69  es [dynamic typi
aeb0: 6e 67 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72  ng]. ^The declar
aec0: 65 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c  ed type of a col
aed0: 75 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64  umn is used to.d
aee0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66  etermine the [af
aef0: 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63  finity] of the c
af00: 6f 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 74 63  olumn only...<tc
af10: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 66  l>hd_fragment df
af20: 6c 74 76 61 6c 20 7b 64 65 66 61 75 6c 74 20 63  ltval {default c
af30: 6f 6c 75 6d 6e 20 76 61 6c 75 65 7d 20 7b 64 65  olumn value} {de
af40: 66 61 75 6c 74 20 76 61 6c 75 65 7d 3c 2f 74 63  fault value}</tc
af50: 6c 3e 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c  l>.<p>The DEFAUL
af60: 54 20 63 6c 61 75 73 65 20 73 70 65 63 69 66 69  T clause specifi
af70: 65 73 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  es a default val
af80: 75 65 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68  ue to use for th
af90: 65 20 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76  e column if no.v
afa0: 61 6c 75 65 20 69 73 20 65 78 70 6c 69 63 69 74  alue is explicit
afb0: 6c 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74  ly provided by t
afc0: 68 65 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69  he user when doi
afd0: 6e 67 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20  ng an [INSERT]. 
afe0: 5e 49 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20  ^If there.is no 
aff0: 65 78 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54  explicit DEFAULT
b000: 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64   clause attached
b010: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   to a column def
b020: 69 6e 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  inition, then th
b030: 65 20 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65  e .default value
b040: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69   of the column i
b050: 73 20 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70  s NULL. ^(An exp
b060: 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c  licit DEFAULT cl
b070: 61 75 73 65 20 6d 61 79 20 73 70 65 63 69 66 79  ause may specify
b080: 0a 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c  .that the defaul
b090: 74 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  t value is NULL,
b0a0: 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61   a string consta
b0b0: 6e 74 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  nt, a blob const
b0c0: 61 6e 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75  ant, a.signed-nu
b0d0: 6d 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e  mber, or any con
b0e0: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
b0f0: 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72   enclosed in par
b100: 65 6e 74 68 65 73 65 73 2e 20 41 0a 64 65 66 61  entheses. A.defa
b110: 75 6c 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c  ult value may al
b120: 73 6f 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  so be one of the
b130: 20 73 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e   special case-in
b140: 64 65 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f 72  dependent keywor
b150: 64 73 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  ds.CURRENT_TIME,
b160: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72   CURRENT_DATE or
b170: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
b180: 4d 50 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70  MP.)^ ^For the p
b190: 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 0a 44  urposes of the.D
b1a0: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20 61  EFAULT clause, a
b1b0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  n expression is 
b1c0: 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e 73 74  considered const
b1d0: 61 6e 74 20 69 66 20 69 74 0a 63 6f 6e 74 61 69  ant if it.contai
b1e0: 6e 73 20 6e 6f 20 73 75 62 2d 71 75 65 72 69 65  ns no sub-querie
b1f0: 73 2c 20 63 6f 6c 75 6d 6e 20 6f 72 20 74 61 62  s, column or tab
b200: 6c 65 20 72 65 66 65 72 65 6e 63 65 73 2c 20 5b  le references, [
b210: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73  bound parameters
b220: 5d 2c 0a 6f 72 20 73 74 72 69 6e 67 20 6c 69 74  ],.or string lit
b230: 65 72 61 6c 73 20 65 6e 63 6c 6f 73 65 64 20 69  erals enclosed i
b240: 6e 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20  n double-quotes 
b250: 69 6e 73 74 65 61 64 20 6f 66 20 73 69 6e 67 6c  instead of singl
b260: 65 2d 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28  e-quotes...<p>^(
b270: 45 61 63 68 20 74 69 6d 65 20 61 20 72 6f 77 20  Each time a row 
b280: 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
b290: 20 74 68 65 20 74 61 62 6c 65 20 62 79 20 61 6e   the table by an
b2a0: 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
b2b0: 74 20 74 68 61 74 20 0a 64 6f 65 73 20 6e 6f 74  t that .does not
b2c0: 20 70 72 6f 76 69 64 65 20 65 78 70 6c 69 63 69   provide explici
b2d0: 74 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c  t values for all
b2e0: 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 74   table columns t
b2f0: 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64  he values stored
b300: 20 69 6e 0a 74 68 65 20 6e 65 77 20 72 6f 77 20   in.the new row 
b310: 61 72 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62  are determined b
b320: 79 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20  y their default 
b330: 76 61 6c 75 65 73 29 5e 2c 20 61 73 20 66 6f 6c  values)^, as fol
b340: 6c 6f 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  lows:..<ul>.  <l
b350: 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66  i><p>^If the def
b360: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
b370: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f  e column is a co
b380: 6e 73 74 61 6e 74 20 4e 55 4c 4c 2c 20 74 65 78  nstant NULL, tex
b390: 74 2c 20 62 6c 6f 62 20 6f 72 0a 20 20 20 20 73  t, blob or.    s
b3a0: 69 67 6e 65 64 2d 6e 75 6d 62 65 72 20 76 61 6c  igned-number val
b3b0: 75 65 2c 20 74 68 65 6e 20 74 68 61 74 20 76 61  ue, then that va
b3c0: 6c 75 65 20 69 73 20 75 73 65 64 20 64 69 72 65  lue is used dire
b3d0: 63 74 6c 79 20 69 6e 20 74 68 65 20 6e 65 77 20  ctly in the new 
b3e0: 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e  row...  <li><p>^
b3f0: 49 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  If the default v
b400: 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  alue of a column
b410: 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
b420: 6e 20 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73  n in parentheses
b430: 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20 65  , then.    the e
b440: 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61  xpression is eva
b450: 6c 75 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20  luated once for 
b460: 65 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65  each row inserte
b470: 64 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74  d and the result
b480: 73 0a 20 20 20 20 75 73 65 64 20 69 6e 20 74 68  s.    used in th
b490: 65 20 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c  e new row...  <l
b4a0: 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66  i><p>^If the def
b4b0: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20  ault value of a 
b4c0: 63 6f 6c 75 6d 6e 20 69 73 20 43 55 52 52 45 4e  column is CURREN
b4d0: 54 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f  T_TIME, CURRENT_
b4e0: 44 41 54 45 20 6f 72 0a 20 20 20 20 43 55 52 52  DATE or.    CURR
b4f0: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74  ENT_TIMESTAMP, t
b500: 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 75 73  hen the value us
b510: 65 64 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ed in the new ro
b520: 77 20 69 73 20 61 20 74 65 78 74 0a 20 20 20 20  w is a text.    
b530: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
b540: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 55 54  f the current UT
b550: 43 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69  C date and/or ti
b560: 6d 65 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54  me. ^For CURRENT
b570: 5f 54 49 4d 45 2c 20 74 68 65 0a 20 20 20 20 66  _TIME, the.    f
b580: 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 76 61 6c  ormat of the val
b590: 75 65 20 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22  ue is "HH:MM:SS"
b5a0: 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 44  . ^For CURRENT_D
b5b0: 41 54 45 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44  ATE, "YYYY-MM-DD
b5c0: 22 2e 20 5e 54 68 65 0a 20 20 20 20 66 6f 72 6d  ". ^The.    form
b5d0: 61 74 20 66 6f 72 20 43 55 52 52 45 4e 54 5f 54  at for CURRENT_T
b5e0: 49 4d 45 53 54 41 4d 50 20 69 73 20 22 59 59 59  IMESTAMP is "YYY
b5f0: 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
b600: 22 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68  "..</ul>..<p>^Th
b610: 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
b620: 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20 6e   specifies the n
b630: 61 6d 65 20 6f 66 20 61 20 5b 63 6f 6c 6c 61 74  ame of a [collat
b640: 69 6e 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f  ing sequence] to
b650: 20 75 73 65 20 61 73 0a 74 68 65 20 64 65 66 61   use as.the defa
b660: 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ult collation se
b670: 71 75 65 6e 63 65 20 66 6f 72 20 74 68 65 20 63  quence for the c
b680: 6f 6c 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f  olumn. ^If no CO
b690: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 73 0a  LLATE clause is.
b6a0: 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64  specified, the d
b6b0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
b6c0: 20 73 65 71 75 65 6e 63 65 20 69 73 20 5b 42 49   sequence is [BI
b6d0: 4e 41 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20  NARY]...<p>^The 
b6e0: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
b6f0: 73 20 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20  s in a table is 
b700: 6c 69 6d 69 74 65 64 20 62 79 20 74 68 65 20 5b  limited by the [
b710: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d  SQLITE_MAX_COLUM
b720: 4e 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  N].compile-time 
b730: 70 61 72 61 6d 65 74 65 72 2e 20 5e 41 20 73 69  parameter. ^A si
b740: 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61  ngle row of a ta
b750: 62 6c 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65  ble cannot store
b760: 20 6d 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49   more than.[SQLI
b770: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62  TE_MAX_LENGTH] b
b780: 79 74 65 73 20 6f 66 20 64 61 74 61 2e 20 5e 42  ytes of data. ^B
b790: 6f 74 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d  oth of these lim
b7a0: 69 74 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72  its can be lower
b7b0: 65 64 20 61 74 0a 72 75 6e 74 69 6d 65 20 75 73  ed at.runtime us
b7c0: 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ing the [sqlite3
b7d0: 5f 6c 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20  _limit()] C/C++ 
b7e0: 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a  interface.</p>..
b7f0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
b800: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 73 7d 20 7b   {constraints} {
b810: 63 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63  constraints}</tc
b820: 6c 3e 0a 3c 68 33 3e 53 51 4c 20 44 61 74 61 20  l>.<h3>SQL Data 
b830: 43 6f 6e 73 74 72 61 69 6e 74 73 3c 2f 68 33 3e  Constraints</h3>
b840: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
b850: 6e 74 20 70 72 69 6d 6b 65 79 63 6f 6e 73 74 20  nt primkeyconst 
b860: 7b 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 7b 50  {PRIMARY KEY} {P
b870: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
b880: 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  raint}</tcl>.<p>
b890: 5e 45 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53  ^Each table in S
b8a0: 51 4c 69 74 65 20 6d 61 79 20 68 61 76 65 20 61  QLite may have a
b8b0: 74 20 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52  t most one <b>PR
b8c0: 49 4d 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e  IMARY KEY</b>. ^
b8d0: 49 66 20 74 68 65 0a 20 20 6b 65 79 77 6f 72 64  If the.  keyword
b8e0: 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72  s PRIMARY KEY ar
b8f0: 65 20 61 64 64 65 64 20 74 6f 20 61 20 63 6f 6c  e added to a col
b900: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20  umn definition, 
b910: 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79  then the primary
b920: 20 6b 65 79 0a 20 20 66 6f 72 20 74 68 65 20 74   key.  for the t
b930: 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  able consists of
b940: 20 74 68 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c   that single col
b950: 75 6d 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50  umn. ^Or, if a P
b960: 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73  RIMARY KEY claus
b970: 65 20 0a 20 20 69 73 20 73 70 65 63 69 66 69 65  e .  is specifie
b980: 64 20 61 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f  d as a [table-co
b990: 6e 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20  nstraint], then 
b9a0: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
b9b0: 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 20 20 63  of the table.  c
b9c0: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c  onsists of the l
b9d0: 69 73 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73  ist of columns s
b9e0: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
b9f0: 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20   of the PRIMARY 
ba00: 4b 45 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e 54  KEY clause..  ^T
ba10: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  he PRIMARY KEY c
ba20: 6c 61 75 73 65 20 6d 75 73 74 20 63 6f 6e 74 61  lause must conta
ba30: 69 6e 20 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 6e  in only column n
ba40: 61 6d 65 73 20 26 6d 64 61 73 68 3b 20 74 68 65  ames &mdash; the
ba50: 20 75 73 65 20 6f 66 20 0a 20 20 65 78 70 72 65   use of .  expre
ba60: 73 73 69 6f 6e 73 20 69 6e 20 61 6e 20 5b 69 6e  ssions in an [in
ba70: 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 5d 20 6f 66  dexed-column] of
ba80: 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69   a PRIMARY KEY i
ba90: 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e  s not supported.
baa0: 0a 20 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20  .  ^An error is 
bab0: 72 61 69 73 65 64 20 69 66 20 6d 6f 72 65 20 74  raised if more t
bac0: 68 61 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20  han one PRIMARY 
bad0: 4b 45 59 20 63 6c 61 75 73 65 20 61 70 70 65 61  KEY clause appea
bae0: 72 73 20 69 6e 20 61 0a 20 20 43 52 45 41 54 45  rs in a.  CREATE
baf0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
bb00: 2e 20 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20  .  ^The PRIMARY 
bb10: 4b 45 59 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20  KEY is optional 
bb20: 66 6f 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62  for ordinary tab
bb30: 6c 65 73 0a 20 20 62 75 74 20 69 73 20 72 65 71  les.  but is req
bb40: 75 69 72 65 64 20 66 6f 72 20 5b 57 49 54 48 4f  uired for [WITHO
bb50: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73  UT ROWID] tables
bb60: 2e 0a 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65  ...<p>If a table
bb70: 20 68 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f   has a single co
bb80: 6c 75 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79  lumn primary key
bb90: 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65   and the declare
bba0: 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20  d type of that. 
bbb0: 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45   column is "INTE
bbc0: 47 45 52 22 20 61 6e 64 20 74 68 65 20 74 61 62  GER" and the tab
bbd0: 6c 65 20 69 73 20 6e 6f 74 20 61 20 5b 57 49 54  le is not a [WIT
bbe0: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
bbf0: 65 2c 0a 20 20 74 68 65 6e 20 74 68 65 20 63 6f  e,.  then the co
bc00: 6c 75 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73  lumn is known as
bc10: 20 61 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49   an [INTEGER PRI
bc20: 4d 41 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65  MARY KEY]..  See
bc30: 20 5b 72 6f 77 69 64 7c 62 65 6c 6f 77 5d 20 66   [rowid|below] f
bc40: 6f 72 20 61 20 64 65 73 63 72 69 70 74 69 6f 6e  or a description
bc50: 20 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 20   of the special 
bc60: 70 72 6f 70 65 72 74 69 65 73 20 61 6e 64 20 62  properties and b
bc70: 65 68 61 76 69 6f 72 73 0a 20 20 61 73 73 6f 63  ehaviors.  assoc
bc80: 69 61 74 65 64 20 77 69 74 68 20 61 6e 20 5b 49  iated with an [I
bc90: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
bca0: 45 59 5d 2e 0a 0a 3c 70 3e 5e 45 61 63 68 20 72  EY]...<p>^Each r
bcb0: 6f 77 20 69 6e 20 61 20 74 61 62 6c 65 20 77 69  ow in a table wi
bcc0: 74 68 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  th a primary key
bcd0: 20 6d 75 73 74 20 68 61 76 65 20 61 20 75 6e 69   must have a uni
bce0: 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a  que combination.
bcf0: 20 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 69    of values in i
bd00: 74 73 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63  ts primary key c
bd10: 6f 6c 75 6d 6e 73 2e 20 5e 46 6f 72 20 74 68 65  olumns. ^For the
bd20: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74   purposes of det
bd30: 65 72 6d 69 6e 69 6e 67 0a 20 20 74 68 65 20 75  ermining.  the u
bd40: 6e 69 71 75 65 6e 65 73 73 20 6f 66 20 70 72 69  niqueness of pri
bd50: 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c  mary key values,
bd60: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
bd70: 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74   considered dist
bd80: 69 6e 63 74 20 66 72 6f 6d 0a 20 20 61 6c 6c 20  inct from.  all 
bd90: 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e  other values, in
bda0: 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55  cluding other NU
bdb0: 4c 4c 73 2e 20 5e 49 66 20 61 6e 20 5b 49 4e 53  LLs. ^If an [INS
bdc0: 45 52 54 5d 20 6f 72 20 5b 55 50 44 41 54 45 5d  ERT] or [UPDATE]
bdd0: 0a 20 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  .  statement att
bde0: 65 6d 70 74 73 20 74 6f 20 6d 6f 64 69 66 79 20  empts to modify 
bdf0: 74 68 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e  the table conten
be00: 74 20 73 6f 20 74 68 61 74 20 74 77 6f 20 6f 72  t so that two or
be10: 20 6d 6f 72 65 20 72 6f 77 73 0a 20 20 68 61 76   more rows.  hav
be20: 65 20 69 64 65 6e 74 69 63 61 6c 20 70 72 69 6d  e identical prim
be30: 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20  ary key values, 
be40: 74 68 61 74 20 69 73 20 61 20 63 6f 6e 73 74 72  that is a constr
be50: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a  aint violation..
be60: 0a 3c 70 3e 20 41 63 63 6f 72 64 69 6e 67 20 74  .<p> According t
be70: 6f 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61  o the SQL standa
be80: 72 64 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20  rd, PRIMARY KEY 
be90: 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 69 6d  should always im
bea0: 70 6c 79 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 20 20  ply NOT NULL..  
beb0: 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 64  Unfortunately, d
bec0: 75 65 20 74 6f 20 61 20 62 75 67 20 69 6e 20 73  ue to a bug in s
bed0: 6f 6d 65 20 65 61 72 6c 79 20 76 65 72 73 69 6f  ome early versio
bee0: 6e 73 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ns, this is not 
bef0: 74 68 65 0a 20 20 63 61 73 65 20 69 6e 20 53 51  the.  case in SQ
bf00: 4c 69 74 65 2e 20 5e 55 6e 6c 65 73 73 20 74 68  Lite. ^Unless th
bf10: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 5b  e column is an [
bf20: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
bf30: 4b 45 59 5d 20 6f 72 0a 20 20 74 68 65 20 74 61  KEY] or.  the ta
bf40: 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f 55  ble is a [WITHOU
bf50: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 20 6f  T ROWID] table o
bf60: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  r the column is 
bf70: 64 65 63 6c 61 72 65 64 20 4e 4f 54 20 4e 55 4c  declared NOT NUL
bf80: 4c 2c 0a 20 20 53 51 4c 69 74 65 20 61 6c 6c 6f  L,.  SQLite allo
bf90: 77 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  ws NULL values i
bfa0: 6e 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  n a PRIMARY KEY 
bfb0: 63 6f 6c 75 6d 6e 2e 20 20 53 51 4c 69 74 65 20  column.  SQLite 
bfc0: 63 6f 75 6c 64 20 62 65 20 66 69 78 65 64 20 74  could be fixed t
bfd0: 6f 0a 20 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74  o.  conform to t
bfe0: 68 65 20 73 74 61 6e 64 61 72 64 2c 20 62 75 74  he standard, but
bff0: 20 64 6f 69 6e 67 20 73 6f 20 6d 69 67 68 74 20   doing so might 
c000: 62 72 65 61 6b 20 6c 65 67 61 63 79 20 61 70 70  break legacy app
c010: 6c 69 63 61 74 69 6f 6e 73 2e 0a 20 20 48 65 6e  lications..  Hen
c020: 63 65 2c 20 69 74 20 68 61 73 20 62 65 65 6e 20  ce, it has been 
c030: 64 65 63 69 64 65 64 20 74 6f 20 6d 65 72 65 6c  decided to merel
c040: 79 20 64 6f 63 75 6d 65 6e 74 20 74 68 65 20 66  y document the f
c050: 61 63 74 20 74 68 61 74 20 53 51 4c 69 74 65 0a  act that SQLite.
c060: 20 20 61 6c 6c 6f 77 69 6e 67 20 4e 55 4c 4c 73    allowing NULLs
c070: 20 69 6e 20 6d 6f 73 74 20 50 52 49 4d 41 52 59   in most PRIMARY
c080: 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 0a 3c   KEY columns...<
c090: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
c0a0: 75 6e 69 71 75 65 63 6f 6e 73 74 20 7b 55 4e 49  uniqueconst {UNI
c0b0: 51 55 45 7d 20 7b 75 6e 69 71 75 65 20 63 6f 6e  QUE} {unique con
c0c0: 73 74 72 61 69 6e 74 7d 20 7b 55 4e 49 51 55 45  straint} {UNIQUE
c0d0: 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63   constraint}</tc
c0e0: 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 55 4e 49 51  l>.<p>^A <b>UNIQ
c0f0: 55 45 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e  UE</b> constrain
c100: 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  t is similar to 
c110: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  a PRIMARY KEY co
c120: 6e 73 74 72 61 69 6e 74 2c 20 65 78 63 65 70 74  nstraint, except
c130: 0a 20 20 74 68 61 74 20 61 20 73 69 6e 67 6c 65  .  that a single
c140: 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20   table may have 
c150: 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 20 55 4e  any number of UN
c160: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73  IQUE constraints
c170: 2e 20 5e 46 6f 72 20 65 61 63 68 0a 20 20 55 4e  . ^For each.  UN
c180: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
c190: 6f 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 65 61  on the table, ea
c1a0: 63 68 20 72 6f 77 20 6d 75 73 74 20 63 6f 6e 74  ch row must cont
c1b0: 61 69 6e 20 61 20 75 6e 69 71 75 65 20 63 6f 6d  ain a unique com
c1c0: 62 69 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61  bination.  of va
c1d0: 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75  lues in the colu
c1e0: 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20 62  mns identified b
c1f0: 79 20 74 68 65 20 55 4e 49 51 55 45 20 63 6f 6e  y the UNIQUE con
c200: 73 74 72 61 69 6e 74 2e 20 0a 20 20 5e 46 6f 72  straint. .  ^For
c210: 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
c220: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
c230: 6e 74 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73  nts, NULL values
c240: 0a 20 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  .  are considere
c250: 64 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  d distinct from 
c260: 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73  all other values
c270: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65  , including othe
c280: 72 20 4e 55 4c 4c 73 2e 0a 20 20 5e 41 73 20 77  r NULLs..  ^As w
c290: 69 74 68 20 50 52 49 4d 41 52 59 20 4b 45 59 73  ith PRIMARY KEYs
c2a0: 2c 20 61 20 55 4e 49 51 55 45 20 5b 74 61 62 6c  , a UNIQUE [tabl
c2b0: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20 63 6c  e-constraint] cl
c2c0: 61 75 73 65 20 6d 75 73 74 20 63 6f 6e 74 61 69  ause must contai
c2d0: 6e 0a 20 20 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20  n.  only column 
c2e0: 6e 61 6d 65 73 20 26 6d 64 61 73 68 3b 20 74 68  names &mdash; th
c2f0: 65 20 75 73 65 20 6f 66 20 0a 20 20 65 78 70 72  e use of .  expr
c300: 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e 20 5b 69  essions in an [i
c310: 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 5d 20 6f  ndexed-column] o
c320: 66 20 61 20 55 4e 49 51 55 45 20 5b 74 61 62 6c  f a UNIQUE [tabl
c330: 65 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 0a 20 20  e-constraint].  
c340: 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64  is not supported
c350: 2e 0a 20 20 0a 0a 3c 70 3e 5e 49 6e 20 6d 6f 73  ..  ..<p>^In mos
c360: 74 20 63 61 73 65 73 2c 20 55 4e 49 51 55 45 20  t cases, UNIQUE 
c370: 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 0a  and PRIMARY KEY.
c380: 20 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72    constraints ar
c390: 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  e implemented by
c3a0: 20 63 72 65 61 74 69 6e 67 20 61 20 75 6e 69 71   creating a uniq
c3b0: 75 65 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20  ue index in the 
c3c0: 64 61 74 61 62 61 73 65 2e 0a 20 20 28 54 68 65  database..  (The
c3d0: 20 65 78 63 65 70 74 69 6f 6e 73 20 61 72 65 20   exceptions are 
c3e0: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
c3f0: 20 4b 45 59 5d 20 61 6e 64 20 50 52 49 4d 41 52   KEY] and PRIMAR
c400: 59 20 4b 45 59 73 20 6f 6e 20 0a 20 20 5b 57 49  Y KEYs on .  [WI
c410: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
c420: 6c 65 73 2e 29 0a 20 20 48 65 6e 63 65 2c 20 74  les.).  Hence, t
c430: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68  he following sch
c440: 65 6d 61 73 20 61 72 65 20 6c 6f 67 69 63 61 6c  emas are logical
c450: 6c 79 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 0a  ly equivalent:..
c460: 20 20 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e    <ol>.  <li><p>
c470: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
c480: 61 2c 20 62 20 55 4e 49 51 55 45 29 3b 0a 20 20  a, b UNIQUE);.  
c490: 3c 6c 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41  <li><p>CREATE TA
c4a0: 42 4c 45 20 74 31 28 61 2c 20 62 20 50 52 49 4d  BLE t1(a, b PRIM
c4b0: 41 52 59 20 4b 45 59 29 3b 0a 20 20 3c 6c 69 3e  ARY KEY);.  <li>
c4c0: 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20  <p>CREATE TABLE 
c4d0: 74 31 28 61 2c 20 62 29 3b 3c 62 72 3e 0a 20 20  t1(a, b);<br>.  
c4e0: 20 20 20 20 20 20 20 43 52 45 41 54 45 20 55 4e         CREATE UN
c4f0: 49 51 55 45 20 49 4e 44 45 58 20 74 31 62 20 4f  IQUE INDEX t1b O
c500: 4e 20 74 31 28 62 29 3b 0a 20 20 3c 2f 6f 6c 3e  N t1(b);.  </ol>
c510: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
c520: 6e 74 20 7b 63 6b 63 6f 6e 73 74 7d 20 7b 43 48  nt {ckconst} {CH
c530: 45 43 4b 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73  ECK} {CHECK cons
c540: 74 72 61 69 6e 74 7d 20 7b 43 48 45 43 4b 20 63  traint} {CHECK c
c550: 6f 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c  onstraints}</tcl
c560: 3e 0a 3c 70 3e 5e 28 41 20 3c 62 3e 43 48 45 43  >.<p>^(A <b>CHEC
c570: 4b 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74  K</b> constraint
c580: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
c590: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   to a column def
c5a0: 69 6e 69 74 69 6f 6e 20 6f 72 0a 20 20 73 70 65  inition or.  spe
c5b0: 63 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c  cified as a tabl
c5c0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 49 6e  e constraint. In
c5d0: 20 70 72 61 63 74 69 63 65 20 69 74 20 6d 61 6b   practice it mak
c5e0: 65 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65  es no difference
c5f0: 2e 29 5e 20 5e 28 45 61 63 68 0a 20 20 74 69 6d  .)^ ^(Each.  tim
c600: 65 20 61 20 6e 65 77 20 72 6f 77 20 69 73 20 69  e a new row is i
c610: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
c620: 20 74 61 62 6c 65 20 6f 72 20 61 6e 20 65 78 69   table or an exi
c630: 73 74 69 6e 67 20 72 6f 77 20 69 73 20 75 70 64  sting row is upd
c640: 61 74 65 64 2c 0a 20 20 74 68 65 20 65 78 70 72  ated,.  the expr
c650: 65 73 73 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ession associate
c660: 64 20 77 69 74 68 20 65 61 63 68 20 43 48 45 43  d with each CHEC
c670: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  K constraint is 
c680: 65 76 61 6c 75 61 74 65 64 20 61 6e 64 0a 20 20  evaluated and.  
c690: 63 61 73 74 20 74 6f 20 61 20 4e 55 4d 45 52 49  cast to a NUMERI
c6a0: 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73  C value in the s
c6b0: 61 6d 65 20 77 61 79 20 61 73 20 61 20 5b 43 41  ame way as a [CA
c6c0: 53 54 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  ST expression]. 
c6d0: 49 66 20 74 68 65 20 0a 20 20 72 65 73 75 6c 74  If the .  result
c6e0: 20 69 73 20 7a 65 72 6f 20 28 69 6e 74 65 67 65   is zero (intege
c6f0: 72 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61  r value 0 or rea
c700: 6c 20 76 61 6c 75 65 20 30 2e 30 29 2c 20 74 68  l value 0.0), th
c710: 65 6e 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a  en a constraint.
c720: 20 20 76 69 6f 6c 61 74 69 6f 6e 20 68 61 73 20    violation has 
c730: 6f 63 63 75 72 72 65 64 2e 29 5e 20 5e 49 66 20  occurred.)^ ^If 
c740: 74 68 65 20 43 48 45 43 4b 20 65 78 70 72 65 73  the CHECK expres
c750: 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
c760: 6f 20 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61 6e 79  o NULL, or.  any
c770: 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20   other non-zero 
c780: 76 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f 74  value, it is not
c790: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
c7a0: 6f 6c 61 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20  olation..  ^The 
c7b0: 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 61 20  expression of a 
c7c0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
c7d0: 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e   may not contain
c7e0: 20 61 20 73 75 62 71 75 65 72 79 2e 0a 0a 3c 74   a subquery...<t
c7f0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
c800: 6e 6f 74 6e 75 6c 6c 63 6f 6e 73 74 7d 20 7b 4e  notnullconst} {N
c810: 4f 54 20 4e 55 4c 4c 7d 20 7b 4e 4f 54 20 4e 55  OT NULL} {NOT NU
c820: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f  LL constraint}</
c830: 74 63 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f  tcl>.<p>^A <b>NO
c840: 54 20 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74  T NULL</b> const
c850: 72 61 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 62  raint may only b
c860: 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20  e attached to a 
c870: 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f  column definitio
c880: 6e 2c 0a 20 20 6e 6f 74 20 73 70 65 63 69 66 69  n,.  not specifi
c890: 65 64 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f  ed as a table co
c8a0: 6e 73 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20 73  nstraint.  Not s
c8b0: 75 72 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28 61  urprisingly, ^(a
c8c0: 20 4e 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73   NOT NULL.  cons
c8d0: 74 72 61 69 6e 74 20 64 69 63 74 61 74 65 73 20  traint dictates 
c8e0: 74 68 61 74 20 74 68 65 20 61 73 73 6f 63 69 61  that the associa
c8f0: 74 65 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e  ted column may n
c900: 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55 4c  ot contain a NUL
c910: 4c 20 76 61 6c 75 65 2e 0a 20 20 41 74 74 65 6d  L value..  Attem
c920: 70 74 69 6e 67 20 74 6f 20 73 65 74 20 74 68 65  pting to set the
c930: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f   column value to
c940: 20 4e 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65 72   NULL when inser
c950: 74 69 6e 67 20 61 20 6e 65 77 20 72 6f 77 20 6f  ting a new row o
c960: 72 0a 20 20 75 70 64 61 74 69 6e 67 20 61 6e 20  r.  updating an 
c970: 65 78 69 73 74 69 6e 67 20 6f 6e 65 20 63 61 75  existing one cau
c980: 73 65 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  ses a constraint
c990: 20 76 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c   violation.)^..<
c9a0: 70 3e 45 78 61 63 74 6c 79 20 68 6f 77 20 61 20  p>Exactly how a 
c9b0: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
c9c0: 74 69 6f 6e 20 69 73 20 64 65 61 6c 74 20 77 69  tion is dealt wi
c9d0: 74 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  th is determined
c9e0: 20 62 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66 6c   by the.  [confl
c9f0: 69 63 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73 74  ict clause|const
ca00: 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
ca10: 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
ca20: 74 68 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50 52  thm]. Each .  PR
ca30: 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55  IMARY KEY, UNIQU
ca40: 45 2c 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64 20  E, NOT NULL and 
ca50: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
ca60: 20 68 61 73 20 61 20 64 65 66 61 75 6c 74 20 63   has a default c
ca70: 6f 6e 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c 75  onflict.  resolu
ca80: 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20  tion algorithm. 
ca90: 5e 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e  ^PRIMARY KEY, UN
caa0: 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
cab0: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 61  L constraints ma
cac0: 79 20 62 65 0a 20 20 65 78 70 6c 69 63 69 74 6c  y be.  explicitl
cad0: 79 20 61 73 73 69 67 6e 65 64 20 61 20 64 65 66  y assigned a def
cae0: 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  ault conflict re
caf0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
cb00: 68 6d 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 0a  hm by including.
cb10: 20 20 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c    a [conflict-cl
cb20: 61 75 73 65 5d 20 69 6e 20 74 68 65 69 72 20 64  ause] in their d
cb30: 65 66 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c  efinitions. ^Or,
cb40: 20 69 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74   if a constraint
cb50: 20 64 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64 6f   definition.  do
cb60: 65 73 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61  es not include a
cb70: 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73   [conflict-claus
cb80: 65 5d 20 6f 72 20 69 74 20 69 73 20 61 20 43 48  e] or it is a CH
cb90: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  ECK constraint, 
cba0: 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 63 6f  the default.  co
cbb0: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
cbc0: 6e 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41  n algorithm is A
cbd0: 42 4f 52 54 2e 20 5e 44 69 66 66 65 72 65 6e 74  BORT. ^Different
cbe0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 74   constraints wit
cbf0: 68 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 74  hin the.  same t
cc00: 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69  able may have di
cc10: 66 66 65 72 65 6e 74 20 64 65 66 61 75 6c 74 20  fferent default 
cc20: 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
cc30: 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e 20  ion algorithms. 
cc40: 53 65 65 0a 20 20 74 68 65 20 73 65 63 74 69 6f  See.  the sectio
cc50: 6e 20 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e  n titled [ON CON
cc60: 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
cc70: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
cc80: 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  n...<tcl>hd_frag
cc90: 6d 65 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45  ment rowid {INTE
cca0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d  GER PRIMARY KEY}
ccb0: 20 52 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63   ROWID rowid</tc
ccc0: 6c 3e 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e  l>.<h3>ROWIDs an
ccd0: 64 20 74 68 65 20 49 4e 54 45 47 45 52 20 50 52  d the INTEGER PR
cce0: 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a  IMARY KEY</h3>..
ccf0: 3c 70 3e 5e 45 78 63 65 70 74 20 66 6f 72 20 5b  <p>^Except for [
cd00: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
cd10: 61 62 6c 65 73 2c 20 61 6c 6c 20 72 6f 77 73 20  ables, all rows 
cd20: 77 69 74 68 69 6e 20 53 51 4c 69 74 65 20 74 61  within SQLite ta
cd30: 62 6c 65 73 0a 68 61 76 65 20 61 20 36 34 2d 62  bles.have a 64-b
cd40: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
cd50: 72 20 6b 65 79 20 74 68 61 74 20 75 6e 69 71 75  r key that uniqu
cd60: 65 6c 79 20 69 64 65 6e 74 69 66 69 65 73 20 74  ely identifies t
cd70: 68 65 20 72 6f 77 20 77 69 74 68 69 6e 20 69 74  he row within it
cd80: 73 20 74 61 62 6c 65 2e 0a 54 68 69 73 20 69 6e  s table..This in
cd90: 74 65 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79  teger is usually
cda0: 0a 63 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77  .called the "row
cdb0: 69 64 22 2e 20 5e 54 68 65 20 72 6f 77 69 64 20  id". ^The rowid 
cdc0: 76 61 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63  value can be acc
cdd0: 65 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20  essed using one 
cde0: 6f 66 20 74 68 65 20 73 70 65 63 69 61 6c 0a 63  of the special.c
cdf0: 61 73 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20  ase-independent 
ce00: 6e 61 6d 65 73 20 22 72 6f 77 69 64 22 2c 20 22  names "rowid", "
ce10: 6f 69 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64  oid", or "_rowid
ce20: 5f 22 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  _" in place of a
ce30: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49   column name..^I
ce40: 66 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  f a table contai
ce50: 6e 73 20 61 20 75 73 65 72 20 64 65 66 69 6e 65  ns a user define
ce60: 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22  d column named "
ce70: 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72  rowid", "oid" or
ce80: 20 22 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e   "_rowid_",.then
ce90: 20 74 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79   that name alway
cea0: 73 20 72 65 66 65 72 73 20 74 68 65 20 65 78 70  s refers the exp
ceb0: 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64  licitly declared
cec0: 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e   column and cann
ced0: 6f 74 20 62 65 20 75 73 65 64 0a 74 6f 20 72 65  ot be used.to re
cee0: 74 72 69 65 76 65 20 74 68 65 20 69 6e 74 65 67  trieve the integ
cef0: 65 72 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a  er rowid value..
cf00: 0a 3c 70 3e 54 68 65 20 72 6f 77 69 64 20 28 61  .<p>The rowid (a
cf10: 6e 64 20 22 6f 69 64 22 20 61 6e 64 20 22 5f 72  nd "oid" and "_r
cf20: 6f 77 69 64 5f 22 29 20 69 73 20 6f 6d 69 74 74  owid_") is omitt
cf30: 65 64 20 69 6e 20 5b 57 49 54 48 4f 55 54 20 52  ed in [WITHOUT R
cf40: 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a 57 49  OWID] tables..WI
cf50: 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
cf60: 65 73 20 61 72 65 20 6f 6e 6c 79 20 61 76 61 69  es are only avai
cf70: 6c 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20  lable in SQLite 
cf80: 5b 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32 5d 0a  [version 3.8.2].
cf90: 28 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 32 5d 29  ([dateof:3.8.2])
cfa0: 20 61 6e 64 20 6c 61 74 65 72 2e 0a 41 20 74 61   and later..A ta
cfb0: 62 6c 65 20 74 68 61 74 20 6c 61 63 6b 73 20 74  ble that lacks t
cfc0: 68 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  he WITHOUT ROWID
cfd0: 20 63 6c 61 75 73 65 20 69 73 20 63 61 6c 6c 65   clause is calle
cfe0: 64 20 61 20 22 72 6f 77 69 64 20 74 61 62 6c 65  d a "rowid table
cff0: 22 2e 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61 20  "...<p>The data 
d000: 66 6f 72 20 72 6f 77 69 64 20 74 61 62 6c 65 73  for rowid tables
d010: 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 20   is stored as a 
d020: 42 2d 54 72 65 65 20 73 74 72 75 63 74 75 72 65  B-Tree structure
d030: 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 6f 6e 65 20   containing.one 
d040: 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 74  entry for each t
d050: 61 62 6c 65 20 72 6f 77 2c 20 75 73 69 6e 67 20  able row, using 
d060: 74 68 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20  the rowid value 
d070: 61 73 20 74 68 65 20 6b 65 79 2e 20 54 68 69 73  as the key. This
d080: 20 6d 65 61 6e 73 20 74 68 61 74 0a 72 65 74 72   means that.retr
d090: 69 65 76 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e  ieving or sortin
d0a0: 67 20 72 65 63 6f 72 64 73 20 62 79 20 72 6f 77  g records by row
d0b0: 69 64 20 69 73 20 66 61 73 74 2e 20 53 65 61 72  id is fast. Sear
d0c0: 63 68 69 6e 67 20 66 6f 72 20 61 20 72 65 63 6f  ching for a reco
d0d0: 72 64 20 77 69 74 68 20 61 0a 73 70 65 63 69 66  rd with a.specif
d0e0: 69 63 20 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72  ic rowid, or for
d0f0: 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 77 69 74   all records wit
d100: 68 20 72 6f 77 69 64 73 20 77 69 74 68 69 6e 20  h rowids within 
d110: 61 20 73 70 65 63 69 66 69 65 64 20 72 61 6e 67  a specified rang
d120: 65 20 69 73 0a 61 72 6f 75 6e 64 20 74 77 69 63  e is.around twic
d130: 65 20 61 73 20 66 61 73 74 20 61 73 20 61 20 73  e as fast as a s
d140: 69 6d 69 6c 61 72 20 73 65 61 72 63 68 20 6d 61  imilar search ma
d150: 64 65 20 62 79 20 73 70 65 63 69 66 79 69 6e 67  de by specifying
d160: 20 61 6e 79 20 6f 74 68 65 72 20 50 52 49 4d 41   any other PRIMA
d170: 52 59 0a 4b 45 59 20 6f 72 20 69 6e 64 65 78 65  RY.KEY or indexe
d180: 64 20 76 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57  d value...<p> ^W
d190: 69 74 68 20 6f 6e 65 20 65 78 63 65 70 74 69 6f  ith one exceptio
d1a0: 6e 20 6e 6f 74 65 64 20 62 65 6c 6f 77 2c 20 69  n noted below, i
d1b0: 66 20 61 20 72 6f 77 69 64 20 74 61 62 6c 65 20  f a rowid table 
d1c0: 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
d1d0: 79 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 0a  y that consists.
d1e0: 6f 66 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  of a single colu
d1f0: 6d 6e 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61  mn and the decla
d200: 72 65 64 20 74 79 70 65 20 6f 66 20 74 68 61 74  red type of that
d210: 20 63 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45   column is "INTE
d220: 47 45 52 22 20 69 6e 20 61 6e 79 20 6d 69 78 74  GER" in any mixt
d230: 75 72 65 20 6f 66 0a 75 70 70 65 72 20 61 6e 64  ure of.upper and
d240: 20 6c 6f 77 65 72 20 63 61 73 65 2c 20 74 68 65   lower case, the
d250: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63  n the column bec
d260: 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  omes an alias fo
d270: 72 20 74 68 65 20 72 6f 77 69 64 2e 20 53 75 63  r the rowid. Suc
d280: 68 20 61 0a 63 6f 6c 75 6d 6e 20 69 73 20 75 73  h a.column is us
d290: 75 61 6c 6c 79 20 72 65 66 65 72 72 65 64 20 74  ually referred t
d2a0: 6f 20 61 73 20 61 6e 20 22 69 6e 74 65 67 65 72  o as an "integer
d2b0: 20 70 72 69 6d 61 72 79 20 6b 65 79 22 2e 20 41   primary key". A
d2c0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c   PRIMARY KEY col
d2d0: 75 6d 6e 0a 6f 6e 6c 79 20 62 65 63 6f 6d 65 73  umn.only becomes
d2e0: 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d   an integer prim
d2f0: 61 72 79 20 6b 65 79 20 69 66 20 74 68 65 20 64  ary key if the d
d300: 65 63 6c 61 72 65 64 20 74 79 70 65 20 6e 61 6d  eclared type nam
d310: 65 20 69 73 20 65 78 61 63 74 6c 79 0a 22 49 4e  e is exactly."IN
d320: 54 45 47 45 52 22 2e 20 20 5e 4f 74 68 65 72 20  TEGER".  ^Other 
d330: 69 6e 74 65 67 65 72 20 74 79 70 65 20 6e 61 6d  integer type nam
d340: 65 73 20 6c 69 6b 65 20 22 49 4e 54 22 20 6f 72  es like "INT" or
d350: 20 22 42 49 47 49 4e 54 22 20 6f 72 20 22 53 48   "BIGINT" or "SH
d360: 4f 52 54 20 49 4e 54 45 47 45 52 22 0a 6f 72 20  ORT INTEGER".or 
d370: 22 55 4e 53 49 47 4e 45 44 20 49 4e 54 45 47 45  "UNSIGNED INTEGE
d380: 52 22 20 63 61 75 73 65 73 20 74 68 65 20 70 72  R" causes the pr
d390: 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e  imary key column
d3a0: 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e   to behave as an
d3b0: 20 6f 72 64 69 6e 61 72 79 0a 74 61 62 6c 65 20   ordinary.table 
d3c0: 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74 65  column with inte
d3d0: 67 65 72 20 5b 61 66 66 69 6e 69 74 79 5d 20 61  ger [affinity] a
d3e0: 6e 64 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  nd a unique inde
d3f0: 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69  x, not as an ali
d400: 61 73 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64  as for.the rowid
d410: 2e 0a 0a 3c 70 3e 20 54 68 65 20 65 78 63 65 70  ...<p> The excep
d420: 74 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 61  tion mentioned a
d430: 62 6f 76 65 20 69 73 20 74 68 61 74 20 5e 69 66  bove is that ^if
d440: 20 74 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e   the declaration
d450: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74   of a column wit
d460: 68 0a 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  h.declared type 
d470: 22 49 4e 54 45 47 45 52 22 20 69 6e 63 6c 75 64  "INTEGER" includ
d480: 65 73 20 61 6e 20 22 50 52 49 4d 41 52 59 20 4b  es an "PRIMARY K
d490: 45 59 20 44 45 53 43 22 20 63 6c 61 75 73 65 2c  EY DESC" clause,
d4a0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 62 65 63   it does not.bec
d4b0: 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  ome an alias for
d4c0: 20 74 68 65 20 72 6f 77 69 64 20 61 6e 64 20 69   the rowid and i
d4d0: 73 20 6e 6f 74 20 63 6c 61 73 73 69 66 69 65 64  s not classified
d4e0: 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70   as an integer p
d4f0: 72 69 6d 61 72 79 20 6b 65 79 2e 0a 54 68 69 73  rimary key..This
d500: 20 71 75 69 72 6b 20 69 73 20 6e 6f 74 20 62 79   quirk is not by
d510: 20 64 65 73 69 67 6e 2e 20 49 74 20 69 73 20 64   design. It is d
d520: 75 65 20 74 6f 20 61 20 62 75 67 20 69 6e 20 65  ue to a bug in e
d530: 61 72 6c 79 20 76 65 72 73 69 6f 6e 73 20 6f 66  arly versions of
d540: 20 53 51 4c 69 74 65 2e 0a 42 75 74 20 66 69 78   SQLite..But fix
d550: 69 6e 67 20 74 68 65 20 62 75 67 20 63 6f 75 6c  ing the bug coul
d560: 64 20 72 65 73 75 6c 74 20 69 6e 20 62 61 63 6b  d result in back
d570: 77 61 72 64 73 20 69 6e 63 6f 6d 70 61 74 69 62  wards incompatib
d580: 69 6c 69 74 69 65 73 2e 0a 48 65 6e 63 65 2c 20  ilities..Hence, 
d590: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68  the original beh
d5a0: 61 76 69 6f 72 20 68 61 73 20 62 65 65 6e 20 72  avior has been r
d5b0: 65 74 61 69 6e 65 64 20 28 61 6e 64 20 64 6f 63  etained (and doc
d5c0: 75 6d 65 6e 74 65 64 29 20 62 65 63 61 75 73 65  umented) because
d5d0: 20 6f 64 64 0a 62 65 68 61 76 69 6f 72 20 69 6e   odd.behavior in
d5e0: 20 61 20 63 6f 72 6e 65 72 20 63 61 73 65 20 69   a corner case i
d5f0: 73 20 66 61 72 20 62 65 74 74 65 72 20 74 68 61  s far better tha
d600: 6e 20 61 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  n a compatibilit
d610: 79 20 62 72 65 61 6b 2e 20 20 54 68 69 73 20 6d  y break.  This m
d620: 65 61 6e 73 0a 74 68 61 74 20 5e 28 74 68 65 20  eans.that ^(the 
d630: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
d640: 74 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  table declaratio
d650: 6e 73 20 61 6c 6c 20 63 61 75 73 65 20 74 68 65  ns all cause the
d660: 20 63 6f 6c 75 6d 6e 20 22 78 22 20 74 6f 20 62   column "x" to b
d670: 65 20 61 6e 0a 61 6c 69 61 73 20 66 6f 72 20 74  e an.alias for t
d680: 68 65 20 72 6f 77 69 64 20 28 61 6e 20 69 6e 74  he rowid (an int
d690: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
d6a0: 29 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74  ):..<ul>.<li><tt
d6b0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
d6c0: 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  x INTEGER PRIMAR
d6d0: 59 20 4b 45 59 20 41 53 43 2c 20 79 2c 20 7a 29  Y KEY ASC, y, z)
d6e0: 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  ;</tt>.<li><tt>C
d6f0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
d700: 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50  INTEGER, y, z, P
d710: 52 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43  RIMARY KEY(x ASC
d720: 29 29 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74  ));</tt>.<li><tt
d730: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28  >CREATE TABLE t(
d740: 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c  x INTEGER, y, z,
d750: 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20 44   PRIMARY KEY(x D
d760: 45 53 43 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c  ESC));</tt>.</ul
d770: 3e 29 5e 0a 0a 3c 70 3e 42 75 74 20 5e 28 74 68  >)^..<p>But ^(th
d780: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 65 63 6c  e following decl
d790: 61 72 61 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  aration does not
d7a0: 20 72 65 73 75 6c 74 20 69 6e 20 22 78 22 20 62   result in "x" b
d7b0: 65 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 66 6f  eing an alias fo
d7c0: 72 0a 74 68 65 20 72 6f 77 69 64 3a 0a 3c 75 6c  r.the rowid:.<ul
d7d0: 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45  >.<li><tt>CREATE
d7e0: 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
d7f0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 44  ER PRIMARY KEY D
d800: 45 53 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e  ESC, y, z);</tt>
d810: 0a 3c 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 5e 52 6f  .</ul>)^..<p>^Ro
d820: 77 69 64 20 76 61 6c 75 65 73 20 6d 61 79 20 62  wid values may b
d830: 65 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67  e modified using
d840: 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
d850: 6d 65 6e 74 20 69 6e 20 74 68 65 20 73 61 6d 65  ment in the same
d860: 0a 77 61 79 20 61 73 20 61 6e 79 20 6f 74 68 65  .way as any othe
d870: 72 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 63  r column value c
d880: 61 6e 2c 20 65 69 74 68 65 72 20 75 73 69 6e 67  an, either using
d890: 20 6f 6e 65 20 6f 66 20 74 68 65 20 62 75 69 6c   one of the buil
d8a0: 74 2d 69 6e 20 61 6c 69 61 73 65 73 0a 28 22 72  t-in aliases.("r
d8b0: 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20  owid", "oid" or 
d8c0: 22 5f 72 6f 77 69 64 5f 22 29 20 6f 72 20 62 79  "_rowid_") or by
d8d0: 20 75 73 69 6e 67 20 61 6e 20 61 6c 69 61 73 20   using an alias 
d8e0: 63 72 65 61 74 65 64 20 62 79 20 61 6e 20 69 6e  created by an in
d8f0: 74 65 67 65 72 0a 70 72 69 6d 61 72 79 20 6b 65  teger.primary ke
d900: 79 2e 20 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 61  y. ^Similarly, a
d910: 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
d920: 6e 74 20 6d 61 79 20 70 72 6f 76 69 64 65 20 61  nt may provide a
d930: 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73   value to use as
d940: 20 74 68 65 0a 72 6f 77 69 64 20 66 6f 72 20 65   the.rowid for e
d950: 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64  ach row inserted
d960: 2e 20 5e 28 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61  . ^(Unlike norma
d970: 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73  l SQLite columns
d980: 2c 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  , an integer pri
d990: 6d 61 72 79 0a 6b 65 79 20 6f 72 20 72 6f 77 69  mary.key or rowi
d9a0: 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 63 6f  d column must co
d9b0: 6e 74 61 69 6e 20 69 6e 74 65 67 65 72 20 76 61  ntain integer va
d9c0: 6c 75 65 73 2e 20 49 6e 74 65 67 65 72 20 70 72  lues. Integer pr
d9d0: 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
d9e0: 69 64 0a 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e  id.columns are n
d9f0: 6f 74 20 61 62 6c 65 20 74 6f 20 68 6f 6c 64 20  ot able to hold 
da00: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
da10: 61 6c 75 65 73 2c 20 73 74 72 69 6e 67 73 2c 20  alues, strings, 
da20: 42 4c 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e  BLOBs, or NULLs.
da30: 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50  )^..<p>^If an UP
da40: 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
da50: 74 74 65 6d 70 74 73 20 74 6f 20 73 65 74 20 61  ttempts to set a
da60: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
da70: 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63  y key or rowid c
da80: 6f 6c 75 6d 6e 0a 74 6f 20 61 20 4e 55 4c 4c 20  olumn.to a NULL 
da90: 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f  or blob value, o
daa0: 72 20 74 6f 20 61 20 73 74 72 69 6e 67 20 6f 72  r to a string or
dab0: 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74   real value that
dac0: 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
dad0: 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20  essly.converted 
dae0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61  to an integer, a
daf0: 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61   "datatype misma
db00: 74 63 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72  tch" error occur
db10: 73 20 61 6e 64 20 74 68 65 20 73 74 61 74 65 6d  s and the statem
db20: 65 6e 74 0a 69 73 20 61 62 6f 72 74 65 64 2e 20  ent.is aborted. 
db30: 5e 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74  ^If an INSERT st
db40: 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73  atement attempts
db50: 20 74 6f 20 69 6e 73 65 72 74 20 61 20 62 6c 6f   to insert a blo
db60: 62 20 76 61 6c 75 65 2c 20 6f 72 20 61 20 73 74  b value, or a st
db70: 72 69 6e 67 0a 6f 72 20 72 65 61 6c 20 76 61 6c  ring.or real val
db80: 75 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62  ue that cannot b
db90: 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e losslessly con
dba0: 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
dbb0: 65 67 65 72 20 69 6e 74 6f 20 61 6e 0a 69 6e 74  eger into an.int
dbc0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
dbd0: 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
dbe0: 2c 20 61 20 22 64 61 74 61 74 79 70 65 20 6d 69  , a "datatype mi
dbf0: 73 6d 61 74 63 68 22 20 65 72 72 6f 72 20 6f 63  smatch" error oc
dc00: 63 75 72 73 20 61 6e 64 20 74 68 65 0a 73 74 61  curs and the.sta
dc10: 74 65 6d 65 6e 74 20 69 73 20 61 62 6f 72 74 65  tement is aborte
dc20: 64 2e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 49 4e  d...<p>^If an IN
dc30: 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61  SERT statement a
dc40: 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72  ttempts to inser
dc50: 74 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  t a NULL value i
dc60: 6e 74 6f 20 61 20 72 6f 77 69 64 20 6f 72 0a 69  nto a rowid or.i
dc70: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
dc80: 65 79 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 20 73  ey column, the s
dc90: 79 73 74 65 6d 20 63 68 6f 6f 73 65 73 20 61 6e  ystem chooses an
dca0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 74   integer value t
dcb0: 6f 20 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77  o use as the.row
dcc0: 69 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  id automatically
dcd0: 2e 20 41 20 64 65 74 61 69 6c 65 64 20 64 65 73  . A detailed des
dce0: 63 72 69 70 74 69 6f 6e 20 6f 66 20 68 6f 77 20  cription of how 
dcf0: 74 68 69 73 20 69 73 20 64 6f 6e 65 20 69 73 20  this is done is 
dd00: 70 72 6f 76 69 64 65 64 0a 3c 61 20 68 72 65 66  provided.<a href
dd10: 3d 22 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e  ="autoinc.html">
dd20: 73 65 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c  separately</a>.<
dd30: 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 5b 70  /p>..<p>^(The [p
dd40: 61 72 65 6e 74 20 6b 65 79 5d 20 6f 66 20 61 20  arent key] of a 
dd50: 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e  [foreign key con
dd60: 73 74 72 61 69 6e 74 5d 20 69 73 20 6e 6f 74 20  straint] is not 
dd70: 61 6c 6c 6f 77 65 64 20 74 6f 0a 75 73 65 20 74  allowed to.use t
dd80: 68 65 20 72 6f 77 69 64 2e 20 20 54 68 65 20 70  he rowid.  The p
dd90: 61 72 65 6e 74 20 6b 65 79 20 6d 75 73 74 20 75  arent key must u
dda0: 73 65 64 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e  sed named column
ddb0: 73 20 6f 6e 6c 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c  s only.)^</p>..<
ddc0: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
ddd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dde0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ddf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
de10: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
de20: 41 54 45 20 54 52 49 47 47 45 52 7d 20 63 72 65  ATE TRIGGER} cre
de30: 61 74 65 74 72 69 67 67 65 72 20 7b 7b 43 52 45  atetrigger {{CRE
de40: 41 54 45 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52  ATE TRIGGER}}..R
de50: 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
de60: 61 67 72 61 6d 20 63 72 65 61 74 65 2d 74 72 69  agram create-tri
de70: 67 67 65 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  gger-stmt.</tcl>
de80: 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45  ..<p>^The CREATE
de90: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
dea0: 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 64  nt is used to ad
deb0: 64 20 74 72 69 67 67 65 72 73 20 74 6f 20 74 68  d triggers to th
dec0: 65 20 0a 64 61 74 61 62 61 73 65 20 73 63 68 65  e .database sche
ded0: 6d 61 2e 20 5e 54 72 69 67 67 65 72 73 20 61 72  ma. ^Triggers ar
dee0: 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 72 61  e database opera
def0: 74 69 6f 6e 73 20 0a 74 68 61 74 20 61 72 65 20  tions .that are 
df00: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 65  automatically pe
df10: 72 66 6f 72 6d 65 64 20 77 68 65 6e 20 61 20 73  rformed when a s
df20: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
df30: 65 20 65 76 65 6e 74 0a 6f 63 63 75 72 73 2e 20  e event.occurs. 
df40: 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74 72 69   </p>..<p>^A tri
df50: 67 67 65 72 20 6d 61 79 20 62 65 20 73 70 65 63  gger may be spec
df60: 69 66 69 65 64 20 74 6f 20 66 69 72 65 20 77 68  ified to fire wh
df70: 65 6e 65 76 65 72 20 61 20 5b 44 45 4c 45 54 45  enever a [DELETE
df80: 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f 72 20  ], [INSERT],.or 
df90: 5b 55 50 44 41 54 45 5d 20 6f 66 20 61 0a 70 61  [UPDATE] of a.pa
dfa0: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
dfb0: 65 20 74 61 62 6c 65 20 6f 63 63 75 72 73 2c 20  e table occurs, 
dfc0: 6f 72 20 77 68 65 6e 65 76 65 72 20 61 6e 20 5b  or whenever an [
dfd0: 55 50 44 41 54 45 5d 20 6f 63 63 75 72 73 20 6f  UPDATE] occurs o
dfe0: 6e 0a 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  n.on one or more
dff0: 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d   specified colum
e000: 6e 73 20 6f 66 20 61 20 74 61 62 6c 65 2e 3c 2f  ns of a table.</
e010: 70 3e 0a 0a 3c 70 3e 5e 41 74 20 74 68 69 73 20  p>..<p>^At this 
e020: 74 69 6d 65 20 53 51 4c 69 74 65 20 73 75 70 70  time SQLite supp
e030: 6f 72 74 73 20 6f 6e 6c 79 20 46 4f 52 20 45 41  orts only FOR EA
e040: 43 48 20 52 4f 57 20 74 72 69 67 67 65 72 73 2c  CH ROW triggers,
e050: 20 6e 6f 74 20 46 4f 52 20 45 41 43 48 0a 53 54   not FOR EACH.ST
e060: 41 54 45 4d 45 4e 54 20 74 72 69 67 67 65 72 73  ATEMENT triggers
e070: 2e 20 5e 48 65 6e 63 65 20 65 78 70 6c 69 63 69  . ^Hence explici
e080: 74 6c 79 20 73 70 65 63 69 66 79 69 6e 67 20 46  tly specifying F
e090: 4f 52 20 45 41 43 48 20 52 4f 57 20 69 73 20 6f  OR EACH ROW is o
e0a0: 70 74 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20 45 41  ptional..^FOR EA
e0b0: 43 48 20 52 4f 57 20 69 6d 70 6c 69 65 73 20 74  CH ROW implies t
e0c0: 68 61 74 20 74 68 65 20 53 51 4c 20 73 74 61 74  hat the SQL stat
e0d0: 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
e0e0: 20 69 6e 20 74 68 65 20 74 72 69 67 67 65 72 0a   in the trigger.
e0f0: 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20  may be executed 
e100: 28 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68  (depending on th
e110: 65 20 57 48 45 4e 20 63 6c 61 75 73 65 29 20 66  e WHEN clause) f
e120: 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
e130: 20 72 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65 72   row being.inser
e140: 74 65 64 2c 20 75 70 64 61 74 65 64 20 6f 72 20  ted, updated or 
e150: 64 65 6c 65 74 65 64 20 62 79 20 74 68 65 20 73  deleted by the s
e160: 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67  tatement causing
e170: 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f 20   the trigger to 
e180: 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  fire.</p>..<p>^(
e190: 42 6f 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c  Both the WHEN cl
e1a0: 61 75 73 65 20 61 6e 64 20 74 68 65 20 74 72 69  ause and the tri
e1b0: 67 67 65 72 20 61 63 74 69 6f 6e 73 20 6d 61 79  gger actions may
e1c0: 20 61 63 63 65 73 73 20 65 6c 65 6d 65 6e 74 73   access elements
e1d0: 20 6f 66 20 0a 74 68 65 20 72 6f 77 20 62 65 69   of .the row bei
e1e0: 6e 67 20 69 6e 73 65 72 74 65 64 2c 20 64 65 6c  ng inserted, del
e1f0: 65 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 20  eted or updated 
e200: 75 73 69 6e 67 20 72 65 66 65 72 65 6e 63 65 73  using references
e210: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 0a 22 4e   of the form ."N
e220: 45 57 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  EW.<i>column-nam
e230: 65 3c 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44 2e  e</i>" and "OLD.
e240: 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  <i>column-name</
e250: 69 3e 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63 6f  i>", where.<i>co
e260: 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73  lumn-name</i> is
e270: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63   the name of a c
e280: 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 74  olumn from the t
e290: 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 74 72  able that the tr
e2a0: 69 67 67 65 72 0a 69 73 20 61 73 73 6f 63 69 61  igger.is associa
e2b0: 74 65 64 20 77 69 74 68 2e 29 5e 20 5e 28 4f 4c  ted with.)^ ^(OL
e2c0: 44 20 61 6e 64 20 4e 45 57 20 72 65 66 65 72 65  D and NEW refere
e2d0: 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65  nces may only be
e2e0: 20 75 73 65 64 20 69 6e 20 74 72 69 67 67 65 72   used in trigger
e2f0: 73 20 6f 6e 0a 65 76 65 6e 74 73 20 66 6f 72 20  s on.events for 
e300: 77 68 69 63 68 20 74 68 65 79 20 61 72 65 20 72  which they are r
e310: 65 6c 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c  elevant, as foll
e320: 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65  ows:</p>..<table
e330: 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61   border=0 cellpa
e340: 64 64 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c  dding=10>.<tr>.<
e350: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
e360: 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69  align="right" wi
e370: 64 74 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52  dth=120><i>INSER
e380: 54 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76  T</i></td>.<td v
e390: 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20  align="top">NEW 
e3a0: 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 76  references are v
e3b0: 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  alid</td>.</tr>.
e3c0: 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
e3d0: 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
e3e0: 68 74 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69  ht" width=120><i
e3f0: 3e 55 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e  >UPDATE</i></td>
e400: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
e410: 22 3e 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65  ">NEW and OLD re
e420: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
e430: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  id</td>.</tr>.<t
e440: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
e450: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
e460: 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44  " width=120><i>D
e470: 45 4c 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c  ELETE</i></td>.<
e480: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
e490: 4f 4c 44 20 72 65 66 65 72 65 6e 63 65 73 20 61  OLD references a
e4a0: 72 65 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f  re valid</td>.</
e4b0: 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70  tr>.</table>.</p
e4c0: 3e 29 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57 48  >)^..<p>^If a WH
e4d0: 45 4e 20 63 6c 61 75 73 65 20 69 73 20 73 75 70  EN clause is sup
e4e0: 70 6c 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73  plied, the SQL s
e4f0: 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
e500: 69 65 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78 65  ied.are only exe
e510: 63 75 74 65 64 20 69 66 20 74 68 65 20 57 48 45  cuted if the WHE
e520: 4e 20 63 6c 61 75 73 65 20 69 73 20 74 72 75 65  N clause is true
e530: 2e 0a 5e 49 66 20 6e 6f 20 57 48 45 4e 20 63 6c  ..^If no WHEN cl
e540: 61 75 73 65 20 69 73 20 73 75 70 70 6c 69 65 64  ause is supplied
e550: 2c 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  , the SQL statem
e560: 65 6e 74 73 0a 61 72 65 20 65 78 65 63 75 74 65  ents.are execute
e570: 64 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 65  d every time the
e580: 20 74 72 69 67 67 65 72 20 66 69 72 65 73 2e 3c   trigger fires.<
e590: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42 45 46  /p>..<p>^The BEF
e5a0: 4f 52 45 20 6f 72 20 41 46 54 45 52 20 6b 65 79  ORE or AFTER key
e5b0: 77 6f 72 64 20 64 65 74 65 72 6d 69 6e 65 73 20  word determines 
e5c0: 77 68 65 6e 20 74 68 65 20 74 72 69 67 67 65 72  when the trigger
e5d0: 20 61 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62 65   actions.will be
e5e0: 20 65 78 65 63 75 74 65 64 20 72 65 6c 61 74 69   executed relati
e5f0: 76 65 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74  ve to the insert
e600: 69 6f 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f  ion, modificatio
e610: 6e 20 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20  n or removal of 
e620: 74 68 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72  the.associated r
e630: 6f 77 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e 20  ow.</p>..<p>^An 
e640: 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c  [ON CONFLICT] cl
e650: 61 75 73 65 20 6d 61 79 20 62 65 20 73 70 65 63  ause may be spec
e660: 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
e670: 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72 20   an [UPDATE] or 
e680: 5b 49 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e 20  [INSERT].action 
e690: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
e6a0: 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a  of the trigger..
e6b0: 5e 48 6f 77 65 76 65 72 20 69 66 20 61 6e 20 5b  ^However if an [
e6c0: 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61  ON CONFLICT] cla
e6d0: 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
e6e0: 20 61 73 20 70 61 72 74 20 6f 66 20 0a 74 68 65   as part of .the
e6f0: 20 73 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69   statement causi
e700: 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 74  ng the trigger t
e710: 6f 20 66 69 72 65 2c 20 74 68 65 6e 20 63 6f 6e  o fire, then con
e720: 66 6c 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a 70  flict handling.p
e730: 6f 6c 69 63 79 20 6f 66 20 74 68 65 20 6f 75 74  olicy of the out
e740: 65 72 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  er statement is 
e750: 75 73 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70  used instead.</p
e760: 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20  >..<p>^Triggers 
e770: 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
e780: 79 20 5b 44 52 4f 50 20 54 52 49 47 47 45 52 20  y [DROP TRIGGER 
e790: 7c 20 64 72 6f 70 70 65 64 5d 0a 77 68 65 6e 20  | dropped].when 
e7a0: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 74  the table that t
e7b0: 68 65 79 20 61 72 65 20 0a 61 73 73 6f 63 69 61  hey are .associa
e7c0: 74 65 64 20 77 69 74 68 20 28 74 68 65 20 3c 69  ted with (the <i
e7d0: 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20  >table-name</i> 
e7e0: 74 61 62 6c 65 29 20 69 73 20 0a 5b 44 52 4f 50  table) is .[DROP
e7f0: 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64   TABLE | dropped
e800: 5d 2e 20 20 5e 48 6f 77 65 76 65 72 20 69 66 20  ].  ^However if 
e810: 74 68 65 20 74 72 69 67 67 65 72 20 61 63 74 69  the trigger acti
e820: 6f 6e 73 20 72 65 66 65 72 65 6e 63 65 0a 6f 74  ons reference.ot
e830: 68 65 72 20 74 61 62 6c 65 73 2c 20 74 68 65 20  her tables, the 
e840: 74 72 69 67 67 65 72 20 69 73 20 6e 6f 74 20 64  trigger is not d
e850: 72 6f 70 70 65 64 20 6f 72 20 6d 6f 64 69 66 69  ropped or modifi
e860: 65 64 20 69 66 20 74 68 6f 73 65 20 6f 74 68 65  ed if those othe
e870: 72 0a 74 61 62 6c 65 73 20 61 72 65 20 5b 44 52  r.tables are [DR
e880: 4f 50 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70  OP TABLE | dropp
e890: 65 64 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54 41  ed] or [ALTER TA
e8a0: 42 4c 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d 2e  BLE | modified].
e8b0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65  </p>..<p>^Trigge
e8c0: 72 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75  rs are removed u
e8d0: 73 69 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54  sing the [DROP T
e8e0: 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
e8f0: 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79 6e 74  t.</p>..<h3>Synt
e900: 61 78 20 52 65 73 74 72 69 63 74 69 6f 6e 73 20  ax Restrictions 
e910: 4f 6e 20 55 50 44 41 54 45 2c 20 44 45 4c 45 54  On UPDATE, DELET
e920: 45 2c 20 61 6e 64 20 49 4e 53 45 52 54 20 53 74  E, and INSERT St
e930: 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 0a  atements Within.
e940: 20 20 20 20 54 72 69 67 67 65 72 73 3c 2f 68 33      Triggers</h3
e950: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 5b 55 50 44 41  >..<p>^The [UPDA
e960: 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61  TE], [DELETE], a
e970: 6e 64 20 5b 49 4e 53 45 52 54 5d 0a 73 74 61 74  nd [INSERT].stat
e980: 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
e990: 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 20 73 75  iggers do not su
e9a0: 70 70 6f 72 74 0a 74 68 65 20 66 75 6c 6c 20 73  pport.the full s
e9b0: 79 6e 74 61 78 20 66 6f 72 20 5b 55 50 44 41 54  yntax for [UPDAT
e9c0: 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e  E], [DELETE], an
e9d0: 64 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65  d [INSERT] state
e9e0: 6d 65 6e 74 73 2e 20 20 54 68 65 20 66 6f 6c 6c  ments.  The foll
e9f0: 6f 77 69 6e 67 0a 72 65 73 74 72 69 63 74 69 6f  owing.restrictio
ea00: 6e 73 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a 0a 3c  ns apply:</p>..<
ea10: 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28  ul>.<li><p>.  ^(
ea20: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
ea30: 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69  table to be modi
ea40: 66 69 65 64 20 69 6e 20 61 6e 20 5b 55 50 44 41  fied in an [UPDA
ea50: 54 45 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 6f  TE], [DELETE], o
ea60: 72 20 5b 49 4e 53 45 52 54 5d 0a 20 20 73 74 61  r [INSERT].  sta
ea70: 74 65 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61  tement must be a
ea80: 6e 20 75 6e 71 75 61 6c 69 66 69 65 64 20 74 61  n unqualified ta
ea90: 62 6c 65 20 6e 61 6d 65 2e 20 20 49 6e 20 6f 74  ble name.  In ot
eaa0: 68 65 72 20 77 6f 72 64 73 2c 20 6f 6e 65 20 6d  her words, one m
eab0: 75 73 74 0a 20 20 75 73 65 20 6a 75 73 74 20 22  ust.  use just "
eac0: 3c 69 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e  <i>tablename</i>
ead0: 22 20 6e 6f 74 20 22 3c 69 3e 64 61 74 61 62 61  " not "<i>databa
eae0: 73 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69  se</i><b>.</b><i
eaf0: 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 0a  >tablename</i>".
eb00: 20 20 77 68 65 6e 20 73 70 65 63 69 66 79 69 6e    when specifyin
eb10: 67 20 74 68 65 20 74 61 62 6c 65 2e 29 5e 20 3c  g the table.)^ <
eb20: 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
eb30: 3e 0a 20 5e 46 6f 72 20 6e 6f 6e 2d 54 45 4d 50  >. ^For non-TEMP
eb40: 20 74 72 69 67 67 65 72 73 2c 0a 20 20 74 68 65   triggers,.  the
eb50: 20 74 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64   table to be mod
eb60: 69 66 69 65 64 20 6f 72 20 71 75 65 72 69 65 64  ified or queried
eb70: 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20 74   must exist in t
eb80: 68 65 0a 20 20 73 61 6d 65 20 64 61 74 61 62 61  he.  same databa
eb90: 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  se as the table 
eba0: 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68  or view to which
ebb0: 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
ebc0: 61 74 74 61 63 68 65 64 2e 0a 20 20 5e 28 54 45  attached..  ^(TE
ebd0: 4d 50 20 74 72 69 67 67 65 72 73 20 61 72 65 20  MP triggers are 
ebe0: 6e 6f 74 20 73 75 62 6a 65 63 74 20 74 6f 20 74  not subject to t
ebf0: 68 65 20 73 61 6d 65 2d 64 61 74 61 62 61 73 65  he same-database
ec00: 20 72 75 6c 65 2e 20 20 41 20 54 45 4d 50 0a 20   rule.  A TEMP. 
ec10: 20 74 72 69 67 67 65 72 20 69 73 20 61 6c 6c 6f   trigger is allo
ec20: 77 65 64 20 74 6f 20 71 75 65 72 79 20 6f 72 20  wed to query or 
ec30: 6d 6f 64 69 66 79 20 61 6e 79 20 74 61 62 6c 65  modify any table
ec40: 20 69 6e 20 61 6e 79 20 5b 41 54 54 41 43 48 5d   in any [ATTACH]
ec50: 2d 65 64 20 64 61 74 61 62 61 73 65 2e 29 5e 0a  -ed database.)^.
ec60: 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69    </p></li>..<li
ec70: 3e 3c 70 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53  ><p>.  ^The "INS
ec80: 45 52 54 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c  ERT INTO <i>tabl
ec90: 65 3c 2f 69 3e 20 44 45 46 41 55 4c 54 20 56 41  e</i> DEFAULT VA
eca0: 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68  LUES" form of th
ecb0: 65 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65  e [INSERT] state
ecc0: 6d 65 6e 74 0a 20 20 69 73 20 6e 6f 74 20 73 75  ment.  is not su
ecd0: 70 70 6f 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c  pported..  </p><
ece0: 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  /li>..<li><p>.  
ecf0: 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
ed00: 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
ed10: 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
ed20: 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55  supported for [U
ed30: 50 44 41 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45  PDATE] and.  [DE
ed40: 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73  LETE] statements
ed50: 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ..  </p></li>..<
ed60: 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f  li><p>.  ^(The O
ed70: 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
ed80: 54 20 63 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50  T clauses on [UP
ed90: 44 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54  DATE] and [DELET
eda0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72  E] statements ar
edb0: 65 20 6e 6f 74 0a 20 20 73 75 70 70 6f 72 74 65  e not.  supporte
edc0: 64 2e 20 20 4f 52 44 45 52 20 42 59 20 61 6e 64  d.  ORDER BY and
edd0: 20 4c 49 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e   LIMIT are not n
ede0: 6f 72 6d 61 6c 6c 79 20 73 75 70 70 6f 72 74 65  ormally supporte
edf0: 64 20 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f  d for [UPDATE] o
ee00: 72 0a 20 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20  r.  [DELETE] in 
ee10: 61 6e 79 20 63 6f 6e 74 65 78 74 20 62 75 74 20  any context but 
ee20: 63 61 6e 20 62 65 20 65 6e 61 62 6c 65 64 20 66  can be enabled f
ee30: 6f 72 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61  or top-level sta
ee40: 74 65 6d 65 6e 74 73 0a 20 20 75 73 69 6e 67 20  tements.  using 
ee50: 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  the [SQLITE_ENAB
ee60: 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
ee70: 5f 4c 49 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d  _LIMIT] compile-
ee80: 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f  time option.  Ho
ee90: 77 65 76 65 72 2c 0a 20 20 74 68 61 74 20 63 6f  wever,.  that co
eea0: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
eeb0: 6e 20 6f 6e 6c 79 20 61 70 70 6c 69 65 73 20 74  n only applies t
eec0: 6f 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44  o top-level [UPD
eed0: 41 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45  ATE] and [DELETE
eee0: 5d 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  ].  statements, 
eef0: 6e 6f 74 20 5b 55 50 44 41 54 45 5d 20 61 6e 64  not [UPDATE] and
ef00: 20 5b 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d   [DELETE] statem
ef10: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
ef20: 67 65 72 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f  gers.)^.  </p></
ef30: 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e  li>..<li><p>.  ^
ef40: 5b 63 6f 6d 6d 6f 6e 2d 74 61 62 6c 65 2d 65 78  [common-table-ex
ef50: 70 72 65 73 73 69 6f 6e 7c 43 6f 6d 6d 6f 6e 20  pression|Common 
ef60: 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
ef70: 5d 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72  ] are not suppor
ef80: 74 65 64 20 66 6f 72 0a 20 20 73 74 61 74 65 6d  ted for.  statem
ef90: 65 6e 74 73 20 69 6e 73 69 64 65 20 6f 66 20 74  ents inside of t
efa0: 72 69 67 67 65 72 73 2e 0a 20 20 3c 2f 70 3e 3c  riggers..  </p><
efb0: 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c  /li>.</ul>..<tcl
efc0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 73  >hd_fragment ins
efd0: 74 65 61 64 5f 6f 66 5f 74 72 69 67 67 65 72 20  tead_of_trigger 
efe0: 7b 49 4e 53 54 45 41 44 20 4f 46 7d 20 7b 49 4e  {INSTEAD OF} {IN
eff0: 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65 72  STEAD OF trigger
f000: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54  }</tcl>.<h3>INST
f010: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 73 3c  EAD OF triggers<
f020: 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65  /h3>..<p>^Trigge
f030: 72 73 20 6d 61 79 20 62 65 20 63 72 65 61 74 65  rs may be create
f040: 64 20 6f 6e 20 5b 76 69 65 77 73 5d 2c 20 61 73  d on [views], as
f050: 20 77 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72   well as ordinar
f060: 79 20 74 61 62 6c 65 73 2c 20 62 79 0a 73 70 65  y tables, by.spe
f070: 63 69 66 79 69 6e 67 20 49 4e 53 54 45 41 44 20  cifying INSTEAD 
f080: 4f 46 20 69 6e 20 74 68 65 20 43 52 45 41 54 45  OF in the CREATE
f090: 20 54 52 49 47 47 45 52 20 73 74 61 74 65 6d 65   TRIGGER stateme
f0a0: 6e 74 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f 72 20  nt. .^If one or 
f0b0: 6d 6f 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20  more ON INSERT, 
f0c0: 4f 4e 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20  ON DELETE.or ON 
f0d0: 55 50 44 41 54 45 20 74 72 69 67 67 65 72 73 20  UPDATE triggers 
f0e0: 61 72 65 20 64 65 66 69 6e 65 64 20 6f 6e 20 61  are defined on a
f0f0: 20 76 69 65 77 2c 20 74 68 65 6e 20 69 74 20 69   view, then it i
f100: 73 20 6e 6f 74 20 61 6e 0a 65 72 72 6f 72 20 74  s not an.error t
f110: 6f 20 65 78 65 63 75 74 65 20 61 6e 20 49 4e 53  o execute an INS
f120: 45 52 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55  ERT, DELETE or U
f130: 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
f140: 6f 6e 20 74 68 65 20 76 69 65 77 2c 20 0a 72 65  on the view, .re
f150: 73 70 65 63 74 69 76 65 6c 79 2e 20 20 5e 49 6e  spectively.  ^In
f160: 73 74 65 61 64 2c 0a 65 78 65 63 75 74 69 6e 67  stead,.executing
f170: 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45   an INSERT, DELE
f180: 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 6e 20  TE or UPDATE on 
f190: 74 68 65 20 76 69 65 77 20 63 61 75 73 65 73 20  the view causes 
f1a0: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 74  the associated.t
f1b0: 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e  riggers to fire.
f1c0: 20 5e 54 68 65 20 72 65 61 6c 20 74 61 62 6c 65   ^The real table
f1d0: 73 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65  s underlying the
f1e0: 20 76 69 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f   view are not mo
f1f0: 64 69 66 69 65 64 0a 28 65 78 63 65 70 74 20 70  dified.(except p
f200: 6f 73 73 69 62 6c 79 20 65 78 70 6c 69 63 69 74  ossibly explicit
f210: 6c 79 2c 20 62 79 20 61 20 74 72 69 67 67 65 72  ly, by a trigger
f220: 20 70 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a   program).</p>..
f230: 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68  <p>^Note that th
f240: 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  e [sqlite3_chang
f250: 65 73 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74  es()] and [sqlit
f260: 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
f270: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 64  ()] interfaces.d
f280: 6f 20 6e 6f 74 20 63 6f 75 6e 74 20 49 4e 53 54  o not count INST
f290: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 20 66  EAD OF trigger f
f2a0: 69 72 69 6e 67 73 2c 20 62 75 74 20 74 68 65 0a  irings, but the.
f2b0: 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70  [count_changes p
f2c0: 72 61 67 6d 61 5d 20 64 6f 65 73 20 63 6f 75 6e  ragma] does coun
f2d0: 74 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69  t INSTEAD OF tri
f2e0: 67 67 65 72 20 66 69 72 69 6e 67 2e 3c 2f 70 3e  gger firing.</p>
f2f0: 0a 0a 3c 68 33 3e 53 6f 6d 65 20 45 78 61 6d 70  ..<h3>Some Examp
f300: 6c 65 20 54 72 69 67 67 65 72 73 3c 2f 68 33 3e  le Triggers</h3>
f310: 0a 0a 3c 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20  ..<p>^(Assuming 
f320: 74 68 61 74 20 63 75 73 74 6f 6d 65 72 20 72 65  that customer re
f330: 63 6f 72 64 73 20 61 72 65 20 73 74 6f 72 65 64  cords are stored
f340: 20 69 6e 20 74 68 65 20 22 63 75 73 74 6f 6d 65   in the "custome
f350: 72 73 22 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74  rs" table, and.t
f360: 68 61 74 20 6f 72 64 65 72 20 72 65 63 6f 72 64  hat order record
f370: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
f380: 74 68 65 20 22 6f 72 64 65 72 73 22 20 74 61 62  the "orders" tab
f390: 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  le, the followin
f3a0: 67 0a 55 50 44 41 54 45 20 74 72 69 67 67 65 72  g.UPDATE trigger
f3b0: 0a 65 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c  .ensures that al
f3c0: 6c 20 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64  l associated ord
f3d0: 65 72 73 20 61 72 65 20 72 65 64 69 72 65 63 74  ers are redirect
f3e0: 65 64 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d  ed when a custom
f3f0: 65 72 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f  er changes.his o
f400: 72 20 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f  r her address:</
f410: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
f420: 20 7b 0a 43 52 45 41 54 45 20 54 52 49 47 47 45   {.CREATE TRIGGE
f430: 52 20 75 70 64 61 74 65 5f 63 75 73 74 6f 6d 65  R update_custome
f440: 72 5f 61 64 64 72 65 73 73 20 55 50 44 41 54 45  r_address UPDATE
f450: 20 4f 46 20 61 64 64 72 65 73 73 20 4f 4e 20 63   OF address ON c
f460: 75 73 74 6f 6d 65 72 73 20 0a 20 20 42 45 47 49  ustomers .  BEGI
f470: 4e 0a 20 20 20 20 55 50 44 41 54 45 20 6f 72 64  N.    UPDATE ord
f480: 65 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20  ers SET address 
f490: 3d 20 6e 65 77 2e 61 64 64 72 65 73 73 20 57 48  = new.address WH
f4a0: 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d  ERE customer_nam
f4b0: 65 20 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20  e = old.name;.  
f4c0: 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  END;.}</tcl>..<p
f4d0: 3e 57 69 74 68 20 74 68 69 73 20 74 72 69 67 67  >With this trigg
f4e0: 65 72 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78  er installed, ex
f4f0: 65 63 75 74 69 6e 67 20 74 68 65 20 73 74 61 74  ecuting the stat
f500: 65 6d 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ement:</p>..<tcl
f510: 3e 45 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54  >Example {.UPDAT
f520: 45 20 63 75 73 74 6f 6d 65 72 73 20 53 45 54 20  E customers SET 
f530: 61 64 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69  address = '1 Mai
f540: 6e 20 53 74 2e 27 20 57 48 45 52 45 20 6e 61 6d  n St.' WHERE nam
f550: 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27  e = 'Jack Jones'
f560: 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61  ;.}</tcl>..<p>ca
f570: 75 73 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69  uses the followi
f580: 6e 67 20 74 6f 20 62 65 20 61 75 74 6f 6d 61 74  ng to be automat
f590: 69 63 61 6c 6c 79 20 65 78 65 63 75 74 65 64 3a  ically executed:
f5a0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70  </p>..<tcl>Examp
f5b0: 6c 65 20 7b 0a 55 50 44 41 54 45 20 6f 72 64 65  le {.UPDATE orde
f5c0: 72 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d  rs SET address =
f5d0: 20 27 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48   '1 Main St.' WH
f5e0: 45 52 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d  ERE customer_nam
f5f0: 65 20 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27  e = 'Jack Jones'
f600: 3b 0a 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 70 3e  ;.}</tcl>)^..<p>
f610: 46 6f 72 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f  For an example o
f620: 66 20 61 6e 20 49 4e 53 54 45 41 44 20 4f 46 20  f an INSTEAD OF 
f630: 74 72 69 67 67 65 72 2c 20 63 6f 6e 73 69 64 65  trigger, conside
f640: 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  r the following 
f650: 73 63 68 65 6d 61 3a 0a 0a 3c 74 63 6c 3e 45 78  schema:..<tcl>Ex
f660: 61 6d 70 6c 65 20 7b 0a 43 52 45 41 54 45 20 54  ample {.CREATE T
f670: 41 42 4c 45 20 63 75 73 74 6f 6d 65 72 28 0a 20  ABLE customer(. 
f680: 20 63 75 73 74 5f 69 64 20 49 4e 54 45 47 45 52   cust_id INTEGER
f690: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20   PRIMARY KEY,.  
f6a0: 63 75 73 74 5f 6e 61 6d 65 20 54 45 58 54 2c 0a  cust_name TEXT,.
f6b0: 20 20 63 75 73 74 5f 61 64 64 72 20 54 45 58 54    cust_addr TEXT
f6c0: 0a 29 3b 0a 43 52 45 41 54 45 20 56 49 45 57 20  .);.CREATE VIEW 
f6d0: 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73  customer_address
f6e0: 20 41 53 0a 20 20 20 53 45 4c 45 43 54 20 63 75   AS.   SELECT cu
f6f0: 73 74 5f 69 64 2c 20 63 75 73 74 5f 61 64 64 72  st_id, cust_addr
f700: 20 46 52 4f 4d 20 63 75 73 74 6f 6d 65 72 3b 0a   FROM customer;.
f710: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 63  CREATE TRIGGER c
f720: 75 73 74 5f 61 64 64 72 5f 63 68 6e 67 0a 49 4e  ust_addr_chng.IN
f730: 53 54 45 41 44 20 4f 46 20 55 50 44 41 54 45 20  STEAD OF UPDATE 
f740: 4f 46 20 63 75 73 74 5f 61 64 64 72 20 4f 4e 20  OF cust_addr ON 
f750: 63 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73  customer_address
f760: 0a 42 45 47 49 4e 0a 20 20 55 50 44 41 54 45 20  .BEGIN.  UPDATE 
f770: 63 75 73 74 6f 6d 65 72 20 53 45 54 20 63 75 73  customer SET cus
f780: 74 5f 61 64 64 72 3d 4e 45 57 2e 63 75 73 74 5f  t_addr=NEW.cust_
f790: 61 64 64 72 0a 20 20 20 57 48 45 52 45 20 63 75  addr.   WHERE cu
f7a0: 73 74 5f 69 64 3d 4e 45 57 2e 63 75 73 74 5f 69  st_id=NEW.cust_i
f7b0: 64 3b 0a 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a  d;.END;.}</tcl>.
f7c0: 0a 3c 70 3e 57 69 74 68 20 74 68 65 20 73 63 68  .<p>With the sch
f7d0: 65 6d 61 20 61 62 6f 76 65 2c 20 61 20 73 74 61  ema above, a sta
f7e0: 74 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f  tement of the fo
f7f0: 72 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78  rm:</p>..<tcl>Ex
f800: 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63  ample {.UPDATE c
f810: 75 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20  ustomer_address 
f820: 53 45 54 20 63 75 73 74 5f 61 64 64 72 3d 24 6e  SET cust_addr=$n
f830: 65 77 5f 61 64 64 72 65 73 73 20 57 48 45 52 45  ew_address WHERE
f840: 20 63 75 73 74 5f 69 64 3d 24 63 75 73 74 5f 69   cust_id=$cust_i
f850: 64 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43  d;.}</tcl>..<p>C
f860: 61 75 73 65 73 20 74 68 65 20 63 75 73 74 6f 6d  auses the custom
f870: 65 72 2e 63 75 73 74 5f 61 64 64 72 20 66 69 65  er.cust_addr fie
f880: 6c 64 20 74 6f 20 62 65 20 75 70 64 61 74 65 64  ld to be updated
f890: 20 66 6f 72 20 61 20 73 70 65 63 69 66 69 63 0a   for a specific.
f8a0: 63 75 73 74 6f 6d 65 72 20 65 6e 74 72 79 20 74  customer entry t
f8b0: 68 61 74 20 68 61 73 20 63 75 73 74 6f 6d 65 72  hat has customer
f8c0: 2e 63 75 73 74 5f 69 64 20 65 71 75 61 6c 20 74  .cust_id equal t
f8d0: 6f 20 74 68 65 20 24 63 75 73 74 5f 69 64 20 70  o the $cust_id p
f8e0: 61 72 61 6d 65 74 65 72 2e 0a 4e 6f 74 65 20 68  arameter..Note h
f8f0: 6f 77 20 74 68 65 20 76 61 6c 75 65 73 20 61 73  ow the values as
f900: 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 76 69  signed to the vi
f910: 65 77 20 61 72 65 20 6d 61 64 65 20 61 76 61 69  ew are made avai
f920: 6c 61 62 6c 65 20 61 73 20 66 69 65 6c 64 0a 69  lable as field.i
f930: 6e 20 74 68 65 20 73 70 65 63 69 61 6c 20 22 4e  n the special "N
f940: 45 57 22 20 74 61 62 6c 65 20 77 69 74 68 69 6e  EW" table within
f950: 20 74 68 65 20 74 72 69 67 67 65 72 20 62 6f 64   the trigger bod
f960: 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  y.</p>..<tcl>hd_
f970: 66 72 61 67 6d 65 6e 74 20 75 6e 64 65 66 5f 62  fragment undef_b
f980: 65 66 6f 72 65 20 7b 75 6e 64 65 66 69 6e 65 64  efore {undefined
f990: 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 20   BEFORE trigger 
f9a0: 62 65 68 61 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a  behavior}</tcl>.
f9b0: 3c 68 33 3e 43 61 75 74 69 6f 6e 73 20 4f 6e 20  <h3>Cautions On 
f9c0: 54 68 65 20 55 73 65 20 4f 66 20 42 45 46 4f 52  The Use Of BEFOR
f9d0: 45 20 74 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a  E triggers</h3>.
f9e0: 0a 3c 70 3e 49 66 20 61 20 42 45 46 4f 52 45 20  .<p>If a BEFORE 
f9f0: 55 50 44 41 54 45 20 6f 72 20 42 45 46 4f 52 45  UPDATE or BEFORE
fa00: 20 44 45 4c 45 54 45 20 74 72 69 67 67 65 72 20   DELETE trigger 
fa10: 6d 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65  modifies or dele
fa20: 74 65 73 20 61 20 72 6f 77 0a 74 68 61 74 20 77  tes a row.that w
fa30: 61 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20  as to have been 
fa40: 75 70 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74  updated or delet
fa50: 65 64 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ed, then the res
fa60: 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 73 65  ult of the subse
fa70: 71 75 65 6e 74 0a 75 70 64 61 74 65 20 6f 72 20  quent.update or 
fa80: 64 65 6c 65 74 65 20 6f 70 65 72 61 74 69 6f 6e  delete operation
fa90: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
faa0: 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 69 66 20  Furthermore, if 
fab0: 61 20 42 45 46 4f 52 45 20 74 72 69 67 67 65 72  a BEFORE trigger
fac0: 0a 6d 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c  .modifies or del
fad0: 65 74 65 73 20 61 20 72 6f 77 2c 20 74 68 65 6e  etes a row, then
fae0: 20 69 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64   it is undefined
faf0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
fb00: 41 46 54 45 52 20 74 72 69 67 67 65 72 73 0a 74  AFTER triggers.t
fb10: 68 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f  hat would have o
fb20: 74 68 65 72 77 69 73 65 20 72 75 6e 20 6f 6e 20  therwise run on 
fb30: 74 68 6f 73 65 20 72 6f 77 73 20 77 69 6c 6c 20  those rows will 
fb40: 69 6e 20 66 61 63 74 20 72 75 6e 2e 0a 3c 2f 70  in fact run..</p
fb50: 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65 20  >..<p>The value 
fb60: 6f 66 20 4e 45 57 2e 72 6f 77 69 64 20 69 73 20  of NEW.rowid is 
fb70: 75 6e 64 65 66 69 6e 65 64 20 69 6e 20 61 20 42  undefined in a B
fb80: 45 46 4f 52 45 20 49 4e 53 45 52 54 20 74 72 69  EFORE INSERT tri
fb90: 67 67 65 72 20 69 6e 20 77 68 69 63 68 0a 74 68  gger in which.th
fba0: 65 20 72 6f 77 69 64 20 69 73 20 6e 6f 74 20 65  e rowid is not e
fbb0: 78 70 6c 69 63 69 74 6c 79 20 73 65 74 20 74 6f  xplicitly set to
fbc0: 20 61 6e 20 69 6e 74 65 67 65 72 2e 3c 2f 70 3e   an integer.</p>
fbd0: 0a 0a 3c 70 3e 42 65 63 61 75 73 65 20 6f 66 20  ..<p>Because of 
fbe0: 74 68 65 20 62 65 68 61 76 69 6f 72 73 20 64 65  the behaviors de
fbf0: 73 63 72 69 62 65 64 20 61 62 6f 76 65 2c 20 70  scribed above, p
fc00: 72 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65  rogrammers are e
fc10: 6e 63 6f 75 72 61 67 65 64 20 74 6f 0a 70 72 65  ncouraged to.pre
fc20: 66 65 72 20 41 46 54 45 52 20 74 72 69 67 67 65  fer AFTER trigge
fc30: 72 73 20 6f 76 65 72 20 42 45 46 4f 52 45 20 74  rs over BEFORE t
fc40: 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 74  riggers.</p>..<t
fc50: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
fc60: 61 69 73 65 20 7b 52 41 49 53 45 20 66 75 6e 63  aise {RAISE func
fc70: 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  tion}</tcl>.<h3>
fc80: 54 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  The RAISE() func
fc90: 74 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  tion</h3>..<p>^(
fca0: 41 20 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75  A special SQL fu
fcb0: 6e 63 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d  nction RAISE() m
fcc0: 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68 69  ay be used withi
fcd0: 6e 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  n a trigger-prog
fce0: 72 61 6d 2c 29 5e 0a 77 69 74 68 20 74 68 65 20  ram,)^.with the 
fcf0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78  following syntax
fd00: 3c 2f 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62  </p> ..<tcl>Bubb
fd10: 6c 65 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d  leDiagram raise-
fd20: 66 75 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a  function</tcl>..
fd30: 3c 70 3e 5e 28 57 68 65 6e 20 6f 6e 65 20 6f 66  <p>^(When one of
fd40: 20 52 41 49 53 45 28 52 4f 4c 4c 42 41 43 4b 2c   RAISE(ROLLBACK,
fd50: 2e 2e 2e 29 2c 20 52 41 49 53 45 28 41 42 4f 52  ...), RAISE(ABOR
fd60: 54 2c 2e 2e 2e 29 20 6f 72 20 52 41 49 53 45 28  T,...) or RAISE(
fd70: 46 41 49 4c 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c  FAIL,...).is cal
fd80: 6c 65 64 20 64 75 72 69 6e 67 20 74 72 69 67 67  led during trigg
fd90: 65 72 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63 75  er-program.execu
fda0: 74 69 6f 6e 2c 20 74 68 65 20 73 70 65 63 69 66  tion, the specif
fdb0: 69 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  ied [ON CONFLICT
fdc0: 5d 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  ] processing is 
fdd0: 70 65 72 66 6f 72 6d 65 64 0a 74 68 65 20 63 75  performed.the cu
fde0: 72 72 65 6e 74 20 71 75 65 72 79 20 74 65 72 6d  rrent query term
fdf0: 69 6e 61 74 65 73 2e 29 5e 0a 41 6e 20 65 72 72  inates.)^.An err
fe00: 6f 72 20 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49  or code of [SQLI
fe10: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69  TE_CONSTRAINT] i
fe20: 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
fe30: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61  e application,.a
fe40: 6c 6f 6e 67 20 77 69 74 68 20 74 68 65 20 73 70  long with the sp
fe50: 65 63 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65  ecified error me
fe60: 73 73 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ssage.</p>..<p>^
fe70: 57 68 65 6e 20 52 41 49 53 45 28 49 47 4e 4f 52  When RAISE(IGNOR
fe80: 45 29 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68  E) is called, th
fe90: 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74  e remainder of t
fea0: 68 65 20 63 75 72 72 65 6e 74 20 74 72 69 67 67  he current trigg
feb0: 65 72 20 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20  er program,.the 
fec0: 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63  statement that c
fed0: 61 75 73 65 64 20 74 68 65 20 74 72 69 67 67 65  aused the trigge
fee0: 72 20 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65  r program to exe
fef0: 63 75 74 65 20 61 6e 64 20 61 6e 79 20 73 75 62  cute and any sub
ff00: 73 65 71 75 65 6e 74 0a 74 72 69 67 67 65 72 20  sequent.trigger 
ff10: 70 72 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f  programs that wo
ff20: 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 65 78  uld have been ex
ff30: 65 63 75 74 65 64 20 61 72 65 20 61 62 61 6e 64  ecuted are aband
ff40: 6f 6e 65 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61  oned. ^No databa
ff50: 73 65 0a 63 68 61 6e 67 65 73 20 61 72 65 20 72  se.changes are r
ff60: 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66  olled back.  ^If
ff70: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
ff80: 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 74  hat caused the t
ff90: 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 74  rigger program.t
ffa0: 6f 20 65 78 65 63 75 74 65 20 69 73 20 69 74 73  o execute is its
ffb0: 65 6c 66 20 70 61 72 74 20 6f 66 20 61 20 74 72  elf part of a tr
ffc0: 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2c 20 74  igger program, t
ffd0: 68 65 6e 20 74 68 61 74 20 74 72 69 67 67 65 72  hen that trigger
ffe0: 20 70 72 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73   program.resumes
fff0: 20 65 78 65 63 75 74 69 6f 6e 20 61 74 20 74 68   execution at th
10000 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
10010 68 65 20 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f  he next step..</
10020 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
10030 6d 65 6e 74 20 74 65 6d 70 74 72 69 67 20 7b 54  ment temptrig {T
10040 45 4d 50 20 74 72 69 67 67 65 72 73 20 6f 6e 20  EMP triggers on 
10050 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65 73 7d  non-TEMP tables}
10060 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20  </tcl>.<h3>TEMP 
10070 54 72 69 67 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d  Triggers on Non-
10080 54 45 4d 50 20 54 61 62 6c 65 73 3c 2f 68 33 3e  TEMP Tables</h3>
10090 0a 0a 3c 70 3e 5e 28 41 20 74 72 69 67 67 65 72  ..<p>^(A trigger
100a0 20 6e 6f 72 6d 61 6c 6c 79 20 65 78 69 73 74 73   normally exists
100b0 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74   in the same dat
100c0 61 62 61 73 65 20 61 73 20 74 68 65 20 74 61 62  abase as the tab
100d0 6c 65 20 6e 61 6d 65 64 0a 61 66 74 65 72 20 74  le named.after t
100e0 68 65 20 22 4f 4e 22 20 6b 65 79 77 6f 72 64 20  he "ON" keyword 
100f0 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 52  in the CREATE TR
10100 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e  IGGER statement.
10110 20 20 45 78 63 65 70 74 2c 20 69 74 20 69 73 0a    Except, it is.
10120 70 6f 73 73 69 62 6c 65 20 74 6f 20 63 72 65 61  possible to crea
10130 74 65 20 61 20 54 45 4d 50 20 54 52 49 47 47 45  te a TEMP TRIGGE
10140 52 20 6f 6e 20 61 20 74 61 62 6c 65 20 69 6e 20  R on a table in 
10150 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  another database
10160 2e 29 5e 20 20 0a 53 75 63 68 20 61 20 74 72 69  .)^  .Such a tri
10170 67 67 65 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 66  gger will only f
10180 69 72 65 20 77 68 65 6e 20 63 68 61 6e 67 65 73  ire when changes
10190 0a 61 72 65 20 6d 61 64 65 20 74 6f 20 74 68 65  .are made to the
101a0 20 74 61 72 67 65 74 20 74 61 62 6c 65 20 62 79   target table by
101b0 20 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e   the application
101c0 20 74 68 61 74 20 64 65 66 69 6e 65 64 20 74 68   that defined th
101d0 65 20 74 72 69 67 67 65 72 2e 0a 4f 74 68 65 72  e trigger..Other
101e0 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68   applications th
101f0 61 74 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61  at modify the da
10200 74 61 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 20  tabase will not 
10210 62 65 20 61 62 6c 65 20 74 6f 20 73 65 65 20 74  be able to see t
10220 68 65 0a 54 45 4d 50 20 74 72 69 67 67 65 72 20  he.TEMP trigger 
10230 61 6e 64 20 68 65 6e 63 65 20 63 61 6e 6e 6f 74  and hence cannot
10240 20 72 75 6e 20 74 68 65 20 74 72 69 67 67 65 72   run the trigger
10250 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64  .</p>..<p>When d
10260 65 66 69 6e 69 6e 67 20 61 20 54 45 4d 50 20 74  efining a TEMP t
10270 72 69 67 67 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d  rigger on a non-
10280 54 45 4d 50 20 74 61 62 6c 65 2c 20 69 74 20 69  TEMP table, it i
10290 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 73  s important to.s
102a0 70 65 63 69 66 79 20 74 68 65 20 64 61 74 61 62  pecify the datab
102b0 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ase holding the 
102c0 6e 6f 6e 2d 54 45 4d 50 20 74 61 62 6c 65 2e 20  non-TEMP table. 
102d0 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 69 6e   For example,.in
102e0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
102f0 74 61 74 65 6d 65 6e 74 2c 20 69 74 20 69 73 20  tatement, it is 
10300 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 61 79  important to say
10310 20 22 6d 61 69 6e 2e 74 61 62 31 22 20 69 6e 73   "main.tab1" ins
10320 74 65 61 64 0a 6f 66 20 6a 75 73 74 20 22 74 61  tead.of just "ta
10330 62 31 22 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  b1":</p>..<block
10340 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
10350 54 45 20 54 45 4d 50 20 54 52 49 47 47 45 52 20  TE TEMP TRIGGER 
10360 65 78 31 20 41 46 54 45 52 20 49 4e 53 45 52 54  ex1 AFTER INSERT
10370 20 4f 4e 20 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e   ON <b>main.</b>
10380 74 61 62 31 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c  tab1 BEGIN ....<
10390 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
103a0 65 3e 0a 0a 3c 70 3e 46 61 69 6c 75 72 65 20 74  e>..<p>Failure t
103b0 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 73 63  o specify the sc
103c0 68 65 6d 61 20 6e 61 6d 65 20 6f 6e 20 74 68 65  hema name on the
103d0 20 74 61 72 67 65 74 20 74 61 62 6c 65 20 63 6f   target table co
103e0 75 6c 64 20 72 65 73 75 6c 74 0a 69 6e 20 74 68  uld result.in th
103f0 65 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 62  e TEMP trigger b
10400 65 69 6e 67 20 72 65 61 74 74 61 63 68 65 64 20  eing reattached 
10410 74 6f 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  to a table with 
10420 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e  the same name in
10430 0a 61 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73  .another databas
10440 65 20 77 68 65 6e 65 76 65 72 20 61 6e 79 20 73  e whenever any s
10450 63 68 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63  chema change occ
10460 75 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  urs.</p>..<tcl>.
10470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
104c0 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20  Section {CREATE 
104d0 56 49 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65  VIEW} {createvie
104e0 77 7d 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57  w} {{CREATE VIEW
104f0 7d 20 76 69 65 77 20 56 49 45 57 20 2a 76 69 65  } view VIEW *vie
10500 77 73 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  ws}..RecursiveBu
10510 62 62 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61  bbleDiagram crea
10520 74 65 2d 76 69 65 77 2d 73 74 6d 74 0a 3c 2f 74  te-view-stmt.</t
10530 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45  cl>..<p>^The CRE
10540 41 54 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e 64  ATE VIEW command
10550 20 61 73 73 69 67 6e 73 20 61 20 6e 61 6d 65 20   assigns a name 
10560 74 6f 20 61 20 70 72 65 2d 70 61 63 6b 61 67 65  to a pre-package
10570 64 20 0a 5b 53 45 4c 45 43 54 5d 20 73 74 61 74  d .[SELECT] stat
10580 65 6d 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20 74 68  ement. .^Once th
10590 65 20 76 69 65 77 20 69 73 20 63 72 65 61 74 65  e view is create
105a0 64 2c 20 69 74 20 63 61 6e 20 62 65 20 75 73 65  d, it can be use
105b0 64 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  d in the FROM cl
105c0 61 75 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20  ause.of another 
105d0 5b 53 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61 63  [SELECT] in plac
105e0 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d  e of a table nam
105f0 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  e..</p>..<p>^If 
10600 74 68 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54  the "TEMP" or "T
10610 45 4d 50 4f 52 41 52 59 22 20 6b 65 79 77 6f 72  EMPORARY" keywor
10620 64 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77  d occurs in betw
10630 65 65 6e 20 22 43 52 45 41 54 45 22 0a 61 6e 64  een "CREATE".and
10640 20 22 56 49 45 57 22 20 74 68 65 6e 20 74 68 65   "VIEW" then the
10650 20 76 69 65 77 20 74 68 61 74 20 69 73 20 63 72   view that is cr
10660 65 61 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69  eated is only vi
10670 73 69 62 6c 65 20 74 6f 20 74 68 65 0a 5b 64 61  sible to the.[da
10680 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10690 6e 5d 20 74 68 61 74 20 63 72 65 61 74 65 64 20  n] that created 
106a0 69 74 20 61 6e 64 20 69 73 20 61 75 74 6f 6d 61  it and is automa
106b0 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20  tically deleted 
106c0 77 68 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73  when.the databas
106d0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
106e0 63 6c 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  closed.</p>..<p>
106f0 20 5e 49 66 20 61 20 3c 79 79 74 65 72 6d 3e 73   ^If a <yyterm>s
10700 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65  chema-name</yyte
10710 72 6d 3e 20 69 73 20 73 70 65 63 69 66 69 65 64  rm> is specified
10720 2c 20 74 68 65 6e 20 74 68 65 20 76 69 65 77 20  , then the view 
10730 0a 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74  .is created in t
10740 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74  he specified dat
10750 61 62 61 73 65 2e 0a 5e 49 74 20 69 73 20 61 6e  abase..^It is an
10760 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66   error to specif
10770 79 20 62 6f 74 68 20 61 20 3c 79 79 74 65 72 6d  y both a <yyterm
10780 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79  >schema-name</yy
10790 74 65 72 6d 3e 0a 61 6e 64 20 74 68 65 20 54 45  term>.and the TE
107a0 4d 50 20 6b 65 79 77 6f 72 64 20 6f 6e 20 61 20  MP keyword on a 
107b0 56 49 45 57 2c 20 75 6e 6c 65 73 73 20 74 68 65  VIEW, unless the
107c0 20 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d   <yyterm>schema-
107d0 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 0a 69  name</yyterm> .i
107e0 73 20 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f  s "temp"..^If no
107f0 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20   schema name is 
10800 73 70 65 63 69 66 69 65 64 2c 20 61 6e 64 20 74  specified, and t
10810 68 65 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20  he TEMP keyword 
10820 69 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a  is not present,.
10830 74 68 65 20 56 49 45 57 20 69 73 20 63 72 65 61  the VIEW is crea
10840 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ted in the main 
10850 64 61 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c  database.</p>..<
10860 70 3e 5e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b 44  p>^You cannot [D
10870 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d  ELETE], [INSERT]
10880 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 20  , or [UPDATE] a 
10890 76 69 65 77 2e 20 20 5e 56 69 65 77 73 20 61 72  view.  ^Views ar
108a0 65 20 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20  e read-only .in 
108b0 53 51 4c 69 74 65 2e 20 20 5e 48 6f 77 65 76 65  SQLite.  ^Howeve
108c0 72 2c 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73  r, in many cases
108d0 20 79 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 0a   you can use an.
108e0 5b 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67  [INSTEAD OF trig
108f0 67 65 72 5d 20 6f 6e 20 74 68 65 20 76 69 65 77  ger] on the view
10900 20 74 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a   to accomplish .
10910 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20  the same thing. 
10920 20 5e 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f   ^Views are remo
10930 76 65 64 20 0a 77 69 74 68 20 74 68 65 20 5b 44  ved .with the [D
10940 52 4f 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e  ROP VIEW] comman
10950 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61  d.</p>..<p>^If a
10960 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d   <yyterm>column-
10970 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69  name</yyterm> li
10980 73 74 20 66 6f 6c 6c 6f 77 73 20 0a 74 68 65 20  st follows .the 
10990 3c 79 79 74 65 72 6d 3e 76 69 65 77 2d 6e 61 6d  <yyterm>view-nam
109a0 65 3c 2f 79 79 74 65 72 6d 3e 2c 20 74 68 65 6e  e</yyterm>, then
109b0 20 74 68 61 74 20 6c 69 73 74 20 64 65 74 65 72   that list deter
109c0 6d 69 6e 65 73 0a 74 68 65 20 6e 61 6d 65 73 20  mines.the names 
109d0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 66  of the columns f
109e0 6f 72 20 74 68 65 20 76 69 65 77 2e 20 20 5e 49  or the view.  ^I
109f0 66 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 63 6f  f the <yyterm>co
10a00 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  lumn-name</yyter
10a10 6d 3e 0a 6c 69 73 74 20 69 73 20 6f 6d 69 74 74  m>.list is omitt
10a20 65 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 61 6d  ed, then the nam
10a30 65 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  es of the column
10a40 73 20 69 6e 20 74 68 65 20 76 69 65 77 20 61 72  s in the view ar
10a50 65 20 64 65 72 69 76 65 64 0a 66 72 6f 6d 20 74  e derived.from t
10a60 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
10a70 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
10a80 6e 73 20 69 6e 20 74 68 65 20 5b 73 65 6c 65 63  ns in the [selec
10a90 74 2d 73 74 6d 74 5d 2e 0a 54 68 65 20 75 73 65  t-stmt]..The use
10aa0 20 6f 66 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75   of <yyterm>colu
10ab0 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  mn-name</yyterm>
10ac0 20 6c 69 73 74 20 69 73 20 72 65 63 6f 6d 6d 65   list is recomme
10ad0 6e 64 65 64 2e 20 20 4f 72 2c 20 69 66 0a 3c 79  nded.  Or, if.<y
10ae0 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  yterm>column-nam
10af0 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20  e</yyterm> list 
10b00 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 6e  is omitted, then
10b10 20 74 68 65 20 72 65 73 75 6c 74 0a 63 6f 6c 75   the result.colu
10b20 6d 6e 73 20 69 6e 20 74 68 65 20 5b 53 45 4c 45  mns in the [SELE
10b30 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68  CT] statement th
10b40 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 76  at defines the v
10b50 69 65 77 20 73 68 6f 75 6c 64 20 68 61 76 65 0a  iew should have.
10b60 77 65 6c 6c 2d 64 65 66 69 6e 65 64 20 6e 61 6d  well-defined nam
10b70 65 73 20 75 73 69 6e 67 20 74 68 65 20 0a 22 5b  es using the ."[
10b80 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 7c 41 53  result-column|AS
10b90 20 63 6f 6c 75 6d 6e 2d 61 6c 69 61 73 5d 22 20   column-alias]" 
10ba0 73 79 6e 74 61 78 2e 0a 53 51 4c 69 74 65 20 61  syntax..SQLite a
10bb0 6c 6c 6f 77 73 20 79 6f 75 20 74 6f 20 63 72 65  llows you to cre
10bc0 61 74 65 20 76 69 65 77 73 20 74 68 61 74 20 64  ate views that d
10bd0 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f 6d 61 74  epend on automat
10be0 69 63 61 6c 6c 79 20 0a 67 65 6e 65 72 61 74 65  ically .generate
10bf0 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  d column names, 
10c00 62 75 74 20 79 6f 75 20 73 68 6f 75 6c 64 20 61  but you should a
10c10 76 6f 69 64 20 75 73 69 6e 67 20 74 68 65 6d 20  void using them 
10c20 73 69 6e 63 65 20 74 68 65 20 0a 72 75 6c 65 73  since the .rules
10c30 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
10c40 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  e column names a
10c50 72 65 20 6e 6f 74 20 61 20 64 65 66 69 6e 65 64  re not a defined
10c60 20 70 61 72 74 20 6f 66 20 74 68 65 0a 69 6e 74   part of the.int
10c70 65 72 66 61 63 65 20 61 6e 64 20 6d 69 67 68 74  erface and might
10c80 20 63 68 61 6e 67 65 20 69 6e 20 66 75 74 75 72   change in futur
10c90 65 20 72 65 6c 65 61 73 65 73 20 6f 66 20 53 51  e releases of SQ
10ca0 4c 69 74 65 2e 0a 0a 3c 70 3e 54 68 65 20 3c 79  Lite...<p>The <y
10cb0 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  yterm>column-nam
10cc0 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20  e</yyterm> list 
10cd0 73 79 6e 74 61 78 20 77 61 73 20 61 64 64 65 64  syntax was added
10ce0 20 69 6e 0a 53 51 4c 69 74 65 20 76 65 72 73 69   in.SQLite versi
10cf0 6f 6e 73 20 33 2e 39 2e 30 20 28 5b 64 61 74 65  ons 3.9.0 ([date
10d00 6f 66 3a 33 2e 39 2e 30 5d 29 2e 0a 0a 3c 74 63  of:3.9.0])...<tc
10d10 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
10d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10d60 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  #.Section {CREAT
10d70 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d  E VIRTUAL TABLE}
10d80 20 7b 63 72 65 61 74 65 76 74 61 62 7d 20 7b 7b   {createvtab} {{
10d90 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
10da0 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76  ABLE}}..Recursiv
10db0 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 63  eBubbleDiagram c
10dc0 72 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74 61  reate-virtual-ta
10dd0 62 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ble-stmt.</tcl>.
10de0 0a 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74  .<p>A [virtual t
10df0 61 62 6c 65 5d 20 69 73 20 61 6e 20 69 6e 74 65  able] is an inte
10e00 72 66 61 63 65 20 74 6f 20 61 6e 20 65 78 74 65  rface to an exte
10e10 72 6e 61 6c 20 73 74 6f 72 61 67 65 20 6f 72 20  rnal storage or 
10e20 63 6f 6d 70 75 74 61 74 69 6f 6e 0a 65 6e 67 69  computation.engi
10e30 6e 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20  ne that appears 
10e40 74 6f 20 62 65 20 61 20 74 61 62 6c 65 20 62 75  to be a table bu
10e50 74 20 64 6f 65 73 20 6e 6f 74 20 61 63 74 75 61  t does not actua
10e60 6c 6c 79 20 73 74 6f 72 65 20 69 6e 66 6f 72 6d  lly store inform
10e70 61 74 69 6f 6e 0a 69 6e 20 74 68 65 20 64 61 74  ation.in the dat
10e80 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  abase file.</p>.
10e90 0a 3c 70 3e 49 6e 20 67 65 6e 65 72 61 6c 2c 20  .<p>In general, 
10ea0 79 6f 75 20 63 61 6e 20 64 6f 20 61 6e 79 74 68  you can do anyth
10eb0 69 6e 67 20 77 69 74 68 20 61 20 5b 76 69 72 74  ing with a [virt
10ec0 75 61 6c 20 74 61 62 6c 65 5d 20 74 68 61 74 20  ual table] that 
10ed0 63 61 6e 20 62 65 20 64 6f 6e 65 0a 77 69 74 68  can be done.with
10ee0 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
10ef0 6c 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  le, except that 
10f00 5e 79 6f 75 20 63 61 6e 6e 6f 74 20 63 72 65 61  ^you cannot crea
10f10 74 65 20 69 6e 64 69 63 65 73 20 6f 72 20 74 72  te indices or tr
10f20 69 67 67 65 72 73 20 6f 6e 20 61 0a 76 69 72 74  iggers on a.virt
10f30 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 53 6f 6d  ual table.  ^Som
10f40 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
10f50 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
10f60 6d 69 67 68 74 20 69 6d 70 6f 73 65 20 61 64 64  might impose add
10f70 69 74 69 6f 6e 61 6c 0a 72 65 73 74 72 69 63 74  itional.restrict
10f80 69 6f 6e 73 2e 20 20 46 6f 72 20 65 78 61 6d 70  ions.  For examp
10f90 6c 65 2c 20 6d 61 6e 79 20 76 69 72 74 75 61 6c  le, many virtual
10fa0 20 74 61 62 6c 65 73 20 61 72 65 20 72 65 61 64   tables are read
10fb0 2d 6f 6e 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  -only.</p>..<p>T
10fc0 68 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c  he <yyterm>modul
10fd0 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  e-name</yyterm> 
10fe0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
10ff0 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 6d  n object that im
11000 70 6c 65 6d 65 6e 74 73 0a 74 68 65 20 76 69 72  plements.the vir
11010 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 5e 54 68  tual table.  ^Th
11020 65 20 3c 79 79 74 65 72 6d 3e 6d 6f 64 75 6c 65  e <yyterm>module
11030 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6d  -name</yyterm> m
11040 75 73 74 20 62 65 20 72 65 67 69 73 74 65 72 65  ust be registere
11050 64 20 77 69 74 68 0a 74 68 65 20 53 51 4c 69 74  d with.the SQLit
11060 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
11070 63 74 69 6f 6e 20 75 73 69 6e 67 0a 5b 73 71 6c  ction using.[sql
11080 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
11090 6c 65 28 29 5d 20 6f 72 20 5b 73 71 6c 69 74 65  le()] or [sqlite
110a0 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f  3_create_module_
110b0 76 32 28 29 5d 0a 70 72 69 6f 72 20 74 6f 20 69  v2()].prior to i
110c0 73 73 75 69 6e 67 20 74 68 65 20 43 52 45 41 54  ssuing the CREAT
110d0 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
110e0 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 54 68 65 20  statement..^The 
110f0 6d 6f 64 75 6c 65 20 74 61 6b 65 73 20 7a 65 72  module takes zer
11100 6f 20 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 2d  o or more comma-
11110 73 65 70 61 72 61 74 65 64 20 61 72 67 75 6d 65  separated argume
11120 6e 74 73 2e 0a 5e 54 68 65 20 61 72 67 75 6d 65  nts..^The argume
11130 6e 74 73 20 63 61 6e 20 62 65 20 6a 75 73 74 20  nts can be just 
11140 61 62 6f 75 74 20 61 6e 79 20 74 65 78 74 20 61  about any text a
11150 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 68 61 73  s long as it has
11160 20 62 61 6c 61 6e 63 65 64 0a 70 61 72 65 6e 74   balanced.parent
11170 68 65 73 65 73 2e 20 20 54 68 65 20 61 72 67 75  heses.  The argu
11180 6d 65 6e 74 20 73 79 6e 74 61 78 20 69 73 20 73  ment syntax is s
11190 75 66 66 69 63 69 65 6e 74 6c 79 20 67 65 6e 65  ufficiently gene
111a0 72 61 6c 20 74 68 61 74 20 74 68 65 0a 61 72 67  ral that the.arg
111b0 75 6d 65 6e 74 73 20 63 61 6e 20 62 65 20 6d 61  uments can be ma
111c0 64 65 20 74 6f 20 61 70 70 65 61 72 20 61 73 20  de to appear as 
111d0 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69  [column definiti
111e0 6f 6e 73 5d 20 69 6e 20 61 20 74 72 61 64 69 74  ons] in a tradit
111f0 69 6f 6e 61 6c 0a 5b 43 52 45 41 54 45 20 54 41  ional.[CREATE TA
11200 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20  BLE] statement. 
11210 20 0a 5e 53 51 4c 69 74 65 20 70 61 73 73 65 73   .^SQLite passes
11220 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 72 67 75   the module argu
11230 6d 65 6e 74 73 20 64 69 72 65 63 74 6c 79 0a 74  ments directly.t
11240 6f 20 74 68 65 20 5b 78 43 72 65 61 74 65 5d 20  o the [xCreate] 
11250 61 6e 64 20 5b 78 43 6f 6e 6e 65 63 74 5d 20 6d  and [xConnect] m
11260 65 74 68 6f 64 73 20 6f 66 20 74 68 65 20 6d 6f  ethods of the mo
11270 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
11280 69 6f 6e 0a 77 69 74 68 6f 75 74 20 61 6e 79 20  ion.without any 
11290 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 2e 20  interpretation. 
112a0 20 49 74 20 69 73 20 74 68 65 20 72 65 73 70 6f   It is the respo
112b0 6e 73 69 62 69 6c 69 74 79 0a 6f 66 20 74 68 65  nsibility.of the
112c0 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
112d0 74 61 74 69 6f 6e 20 74 6f 20 70 61 72 73 65 20  tation to parse 
112e0 61 6e 64 20 69 6e 74 65 72 70 72 65 74 20 69 74  and interpret it
112f0 73 20 6f 77 6e 20 61 72 67 75 6d 65 6e 74 73 2e  s own arguments.
11300 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 76 69 72 74  </p>..<p>^A virt
11310 75 61 6c 20 74 61 62 6c 65 20 69 73 20 64 65 73  ual table is des
11320 74 72 6f 79 65 64 20 75 73 69 6e 67 20 74 68 65  troyed using the
11330 20 6f 72 64 69 6e 61 72 79 0a 5b 44 52 4f 50 20   ordinary.[DROP 
11340 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
11350 2e 20 20 54 68 65 72 65 20 69 73 20 6e 6f 0a 44  .  There is no.D
11360 52 4f 50 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ROP VIRTUAL TABL
11370 45 20 73 74 61 74 65 6d 65 6e 74 2e 3c 2f 70 3e  E statement.</p>
11380 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
11390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113d0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 44  ######.Section D
113e0 45 4c 45 54 45 20 64 65 6c 65 74 65 20 7b 44 45  ELETE delete {DE
113f0 4c 45 54 45 20 2a 44 45 4c 45 54 45 73 7d 0a 0a  LETE *DELETEs}..
11400 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
11410 69 61 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74  iagram delete-st
11420 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68  mt.</tcl>..<p>Th
11430 65 20 44 45 4c 45 54 45 20 63 6f 6d 6d 61 6e 64  e DELETE command
11440 20 72 65 6d 6f 76 65 73 20 72 65 63 6f 72 64 73   removes records
11450 20 66 72 6f 6d 20 74 68 65 20 74 61 62 6c 65 20   from the table 
11460 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68  identified by th
11470 65 0a 20 20 20 5b 71 75 61 6c 69 66 69 65 64 2d  e.   [qualified-
11480 74 61 62 6c 65 2d 6e 61 6d 65 5d 2e 0a 0a 3c 70  table-name]...<p
11490 3e 5e 49 66 20 74 68 65 20 57 48 45 52 45 20 63  >^If the WHERE c
114a0 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 70 72 65  lause is not pre
114b0 73 65 6e 74 2c 20 61 6c 6c 20 72 65 63 6f 72 64  sent, all record
114c0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 61  s in the table a
114d0 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e  re deleted..   ^
114e0 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  If a WHERE claus
114f0 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20 74  e is supplied, t
11500 68 65 6e 20 6f 6e 6c 79 20 74 68 6f 73 65 20 72  hen only those r
11510 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68  ows for which th
11520 65 0a 20 20 20 57 48 45 52 45 20 63 6c 61 75 73  e.   WHERE claus
11530 65 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65  e [boolean expre
11540 73 73 69 6f 6e 5d 20 69 73 20 74 72 75 65 20 61  ssion] is true a
11550 72 65 20 64 65 6c 65 74 65 64 2e 0a 20 20 20 5e  re deleted..   ^
11560 52 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  Rows for which t
11570 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
11580 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c 20 61   false or NULL a
11590 72 65 20 72 65 74 61 69 6e 65 64 2e 0a 0a 3c 68  re retained...<h
115a0 33 3e 52 65 73 74 72 69 63 74 69 6f 6e 73 20 6f  3>Restrictions o
115b0 6e 20 44 45 4c 45 54 45 20 53 74 61 74 65 6d 65  n DELETE Stateme
115c0 6e 74 73 20 57 69 74 68 69 6e 20 43 52 45 41 54  nts Within CREAT
115d0 45 20 54 52 49 47 47 45 52 3c 2f 68 33 3e 0a 0a  E TRIGGER</h3>..
115e0 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  <p>The following
115f0 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 61 70   restrictions ap
11600 70 6c 79 20 74 6f 20 44 45 4c 45 54 45 20 73 74  ply to DELETE st
11610 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 6f 63  atements that oc
11620 63 75 72 20 77 69 74 68 69 6e 20 74 68 65 0a 20  cur within the. 
11630 20 20 62 6f 64 79 20 6f 66 20 61 20 5b 43 52 45    body of a [CRE
11640 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
11650 74 65 6d 65 6e 74 3a 0a 0a 3c 75 6c 3e 0a 20 20  tement:..<ul>.  
11660 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 3c 79 79 74  <li><p>^The <yyt
11670 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  erm>table-name</
11680 79 79 74 65 72 6d 3e 20 73 70 65 63 69 66 69 65  yyterm> specifie
11690 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 0a  d as part of a .
116a0 20 20 20 20 44 45 4c 45 54 45 20 73 74 61 74 65      DELETE state
116b0 6d 65 6e 74 20 77 69 74 68 69 6e 0a 20 20 20 20  ment within.    
116c0 61 20 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d  a trigger body m
116d0 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69  ust be unqualifi
116e0 65 64 2e 20 20 5e 28 49 6e 20 6f 74 68 65 72 20  ed.  ^(In other 
116f0 77 6f 72 64 73 2c 20 74 68 65 0a 20 20 20 20 3c  words, the.    <
11700 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69  i>schema-name</i
11710 3e 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78  ><b>.</b> prefix
11720 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61   on the table na
11730 6d 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  me is not allowe
11740 64 20 0a 20 20 20 20 77 69 74 68 69 6e 20 74 72  d .    within tr
11750 69 67 67 65 72 73 2e 29 5e 20 5e 49 66 20 74 68  iggers.)^ ^If th
11760 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68  e table to which
11770 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73 20   the trigger is 
11780 61 74 74 61 63 68 65 64 20 69 73 0a 20 20 20 20  attached is.    
11790 6e 6f 74 20 69 6e 20 74 68 65 20 74 65 6d 70 20  not in the temp 
117a0 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 44  database, then D
117b0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
117c0 20 77 69 74 68 69 6e 20 74 68 65 20 74 72 69 67   within the trig
117d0 67 65 72 0a 20 20 20 20 62 6f 64 79 20 6d 75 73  ger.    body mus
117e0 74 20 6f 70 65 72 61 74 65 20 6f 6e 20 74 61 62  t operate on tab
117f0 6c 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  les within the s
11800 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73 20  ame database as 
11810 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c  it. ^If the tabl
11820 65 0a 20 20 20 20 74 6f 20 77 68 69 63 68 20 74  e.    to which t
11830 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
11840 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65  tached is in the
11850 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20   TEMP database, 
11860 74 68 65 6e 20 74 68 65 0a 20 20 20 20 75 6e 71  then the.    unq
11870 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20 6f 66  ualified name of
11880 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
11890 20 64 65 6c 65 74 65 64 20 69 73 20 72 65 73 6f   deleted is reso
118a0 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  lved in the same
118b0 20 77 61 79 20 61 73 0a 20 20 20 20 69 74 20 69   way as.    it i
118c0 73 20 66 6f 72 20 61 20 74 6f 70 2d 6c 65 76 65  s for a top-leve
118d0 6c 20 73 74 61 74 65 6d 65 6e 74 20 28 62 79 20  l statement (by 
118e0 73 65 61 72 63 68 69 6e 67 20 66 69 72 73 74 20  searching first 
118f0 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
11900 65 2c 20 74 68 65 6e 0a 20 20 20 20 74 68 65 20  e, then.    the 
11910 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
11920 68 65 6e 20 61 6e 79 20 6f 74 68 65 72 20 64 61  hen any other da
11930 74 61 62 61 73 65 73 20 69 6e 20 74 68 65 20 6f  tabases in the o
11940 72 64 65 72 20 74 68 65 79 20 77 65 72 65 0a 20  rder they were. 
11950 20 20 20 61 74 74 61 63 68 65 64 29 2e 0a 20 20     attached)..  
11960 20 20 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65    .  <li><p>^The
11970 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e 64 20   INDEXED BY and 
11980 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
11990 73 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f  ses are not allo
119a0 77 65 64 20 6f 6e 20 44 45 4c 45 54 45 0a 20 20  wed on DELETE.  
119b0 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
119c0 68 69 6e 20 74 72 69 67 67 65 72 73 2e 3c 2f 70  hin triggers.</p
119d0 3e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65  >..  <li><p>^The
119e0 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52   LIMIT and ORDER
119f0 20 42 59 20 63 6c 61 75 73 65 73 20 28 64 65 73   BY clauses (des
11a00 63 72 69 62 65 64 20 62 65 6c 6f 77 29 20 61 72  cribed below) ar
11a10 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20 66 6f  e unsupported fo
11a20 72 0a 20 20 20 20 44 45 4c 45 54 45 20 73 74 61  r.    DELETE sta
11a30 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
11a40 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 3c 2f 75  riggers.</p>.</u
11a50 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f 6e 61 6c  l>..<h3>Optional
11a60 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52 44 45 52   LIMIT and ORDER
11a70 20 42 59 20 63 6c 61 75 73 65 73 3c 2f 68 33 3e   BY clauses</h3>
11a80 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c 69 74 65  ..<p>^(If SQLite
11a90 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
11aa0 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  h the [SQLITE_EN
11ab0 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
11ac0 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c  TE_LIMIT].compil
11ad0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 74  e-time option, t
11ae0 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f  hen the syntax o
11af0 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
11b00 74 65 6d 65 6e 74 20 69 73 0a 65 78 74 65 6e 64  tement is.extend
11b10 65 64 20 62 79 20 74 68 65 20 61 64 64 69 74 69  ed by the additi
11b20 6f 6e 20 6f 66 20 6f 70 74 69 6f 6e 61 6c 20 4f  on of optional O
11b30 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49  RDER BY and LIMI
11b40 54 20 63 6c 61 75 73 65 73 3a 29 5e 3c 2f 70 3e  T clauses:)^</p>
11b50 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61  ..<tcl>BubbleDia
11b60 67 72 61 6d 20 64 65 6c 65 74 65 2d 73 74 6d 74  gram delete-stmt
11b70 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a  -limited</tcl>..
11b80 3c 70 3e 5e 49 66 20 61 20 44 45 4c 45 54 45 20  <p>^If a DELETE 
11b90 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20  statement has a 
11ba0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
11bb0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
11bc0 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69   of rows that.wi
11bd0 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20 69 73  ll be deleted is
11be0 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61   found by evalua
11bf0 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61  ting the accompa
11c00 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nying expression
11c10 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20   and casting.it 
11c20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
11c30 6c 75 65 2e 20 5e 49 66 20 74 68 65 20 72 65 73  lue. ^If the res
11c40 75 6c 74 20 6f 66 20 74 68 65 20 65 76 61 6c 75  ult of the evalu
11c50 61 74 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  ating the LIMIT 
11c60 63 6c 61 75 73 65 0a 63 61 6e 6e 6f 74 20 62 65  clause.cannot be
11c70 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76   losslessly conv
11c80 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
11c90 67 65 72 20 76 61 6c 75 65 2c 20 69 74 20 69 73  ger value, it is
11ca0 20 61 6e 20 65 72 72 6f 72 2e 20 5e 41 20 0a 6e   an error. ^A .n
11cb0 65 67 61 74 69 76 65 20 4c 49 4d 49 54 20 76 61  egative LIMIT va
11cc0 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72 65 74  lue is interpret
11cd0 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22  ed as "no limit"
11ce0 2e 20 5e 28 49 66 20 74 68 65 20 44 45 4c 45 54  . ^(If the DELET
11cf0 45 20 73 74 61 74 65 6d 65 6e 74 20 0a 61 6c 73  E statement .als
11d00 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54 20  o has an OFFSET 
11d10 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 69 74 20  clause, then it 
11d20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65 76 61  is similarly eva
11d30 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73 74 20  luated and cast 
11d40 74 6f 20 61 6e 0a 69 6e 74 65 67 65 72 20 76 61  to an.integer va
11d50 6c 75 65 2e 20 41 67 61 69 6e 2c 20 69 74 20 69  lue. Again, it i
11d60 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
11d70 65 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62  e value cannot b
11d80 65 20 6c 6f 73 73 6c 65 73 73 6c 79 0a 63 6f 6e  e losslessly.con
11d90 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
11da0 65 67 65 72 2e 29 5e 20 5e 49 66 20 74 68 65 72  eger.)^ ^If ther
11db0 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 20 63  e is no OFFSET c
11dc0 6c 61 75 73 65 2c 20 6f 72 20 74 68 65 20 63 61  lause, or the ca
11dd0 6c 63 75 6c 61 74 65 64 0a 69 6e 74 65 67 65 72  lculated.integer
11de0 20 76 61 6c 75 65 20 69 73 20 6e 65 67 61 74 69   value is negati
11df0 76 65 2c 20 74 68 65 20 65 66 66 65 63 74 69 76  ve, the effectiv
11e00 65 20 4f 46 46 53 45 54 20 76 61 6c 75 65 20 69  e OFFSET value i
11e10 73 20 7a 65 72 6f 2e 0a 0a 3c 70 3e 5e 28 49 66  s zero...<p>^(If
11e20 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74   the DELETE stat
11e30 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44  ement has an ORD
11e40 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  ER BY clause, th
11e50 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74  en all rows that
11e60 20 77 6f 75 6c 64 20 0a 62 65 20 64 65 6c 65 74   would .be delet
11e70 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63  ed in the absenc
11e80 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
11e90 6c 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64  lause are sorted
11ea0 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
11eb0 65 20 0a 4f 52 44 45 52 20 42 59 2e 20 54 68 65  e .ORDER BY. The
11ec0 20 66 69 72 73 74 20 3c 69 3e 4d 3c 2f 69 3e 20   first <i>M</i> 
11ed0 72 6f 77 73 2c 20 77 68 65 72 65 20 3c 69 3e 4d  rows, where <i>M
11ee0 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c 75  </i> is the valu
11ef0 65 20 66 6f 75 6e 64 20 62 79 0a 65 76 61 6c 75  e found by.evalu
11f00 61 74 69 6e 67 20 74 68 65 20 4f 46 46 53 45 54  ating the OFFSET
11f10 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
11f20 6f 6e 2c 20 61 72 65 20 73 6b 69 70 70 65 64 2c  on, are skipped,
11f30 20 61 6e 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69   and the followi
11f40 6e 67 20 0a 3c 69 3e 4e 3c 2f 69 3e 2c 20 77 68  ng .<i>N</i>, wh
11f50 65 72 65 20 3c 69 3e 4e 3c 2f 69 3e 20 69 73 20  ere <i>N</i> is 
11f60 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
11f70 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
11f80 6e 2c 20 61 72 65 20 64 65 6c 65 74 65 64 2e 29  n, are deleted.)
11f90 5e 0a 5e 49 66 20 74 68 65 72 65 20 61 72 65 20  ^.^If there are 
11fa0 6c 65 73 73 20 74 68 61 6e 20 3c 69 3e 4e 3c 2f  less than <i>N</
11fb0 69 3e 20 72 6f 77 73 20 72 65 6d 61 69 6e 69 6e  i> rows remainin
11fc0 67 20 61 66 74 65 72 20 74 61 6b 69 6e 67 20 74  g after taking t
11fd0 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
11fe0 0a 69 6e 74 6f 20 61 63 63 6f 75 6e 74 2c 20 6f  .into account, o
11ff0 72 20 69 66 20 74 68 65 20 4c 49 4d 49 54 20 63  r if the LIMIT c
12000 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65 64 20  lause evaluated 
12010 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20 76 61  to a negative va
12020 6c 75 65 2c 20 74 68 65 6e 20 61 6c 6c 0a 72 65  lue, then all.re
12030 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 61 72 65  maining rows are
12040 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e 49   deleted...<p>^I
12050 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
12060 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52  tement has no OR
12070 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74  DER BY clause, t
12080 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61  hen all rows tha
12090 74 0a 77 6f 75 6c 64 20 62 65 20 64 65 6c 65 74  t.would be delet
120a0 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63  ed in the absenc
120b0 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63  e of the LIMIT c
120c0 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d 62  lause are assemb
120d0 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72  led in an.arbitr
120e0 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65  ary order before
120f0 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49   applying the LI
12100 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63  MIT and OFFSET c
12110 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d  lauses to determ
12120 69 6e 65 20 0a 74 68 65 20 73 75 62 73 65 74 20  ine .the subset 
12130 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c  that are actuall
12140 79 20 64 65 6c 65 74 65 64 2e 0a 0a 3c 70 3e 5e  y deleted...<p>^
12150 28 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c  (The ORDER BY cl
12160 61 75 73 65 20 6f 6e 20 61 20 44 45 4c 45 54 45  ause on a DELETE
12170 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
12180 65 64 20 6f 6e 6c 79 20 74 6f 20 64 65 74 65 72  ed only to deter
12190 6d 69 6e 65 20 77 68 69 63 68 0a 72 6f 77 73 20  mine which.rows 
121a0 66 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20  fall within the 
121b0 4c 49 4d 49 54 2e 20 54 68 65 20 6f 72 64 65 72  LIMIT. The order
121c0 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 20 61   in which rows a
121d0 72 65 20 64 65 6c 65 74 65 64 20 69 73 20 61 72  re deleted is ar
121e0 62 69 74 72 61 72 79 0a 61 6e 64 20 69 73 20 6e  bitrary.and is n
121f0 6f 74 20 69 6e 66 6c 75 65 6e 63 65 64 20 62 79  ot influenced by
12200 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
12210 61 75 73 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  ause.)^..<tcl>hd
12220 5f 66 72 61 67 6d 65 6e 74 20 74 72 75 6e 63 61  _fragment trunca
12230 74 65 6f 70 74 20 7b 74 72 75 6e 63 61 74 65 20  teopt {truncate 
12240 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 7d 3c 2f 74  optimization}</t
12250 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 54 72 75 6e  cl>.<h3>The Trun
12260 63 61 74 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  cate Optimizatio
12270 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  n</h3>..<p>^When
12280 20 74 68 65 20 57 48 45 52 45 20 69 73 20 6f 6d   the WHERE is om
12290 69 74 74 65 64 20 66 72 6f 6d 20 61 20 44 45 4c  itted from a DEL
122a0 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  ETE statement an
122b0 64 20 74 68 65 20 74 61 62 6c 65 0a 62 65 69 6e  d the table.bein
122c0 67 20 64 65 6c 65 74 65 64 20 68 61 73 20 6e 6f  g deleted has no
122d0 20 74 72 69 67 67 65 72 73 2c 0a 53 51 4c 69 74   triggers,.SQLit
122e0 65 20 75 73 65 73 20 61 6e 20 6f 70 74 69 6d 69  e uses an optimi
122f0 7a 61 74 69 6f 6e 20 74 6f 20 65 72 61 73 65 20  zation to erase 
12300 74 68 65 20 65 6e 74 69 72 65 20 74 61 62 6c 65  the entire table
12310 20 63 6f 6e 74 65 6e 74 0a 77 69 74 68 6f 75 74   content.without
12320 20 68 61 76 69 6e 67 20 74 6f 20 76 69 73 69 74   having to visit
12330 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
12340 20 74 61 62 6c 65 20 69 6e 64 69 76 69 64 75 61   table individua
12350 6c 6c 79 2e 0a 54 68 69 73 20 22 74 72 75 6e 63  lly..This "trunc
12360 61 74 65 22 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ate" optimizatio
12370 6e 20 6d 61 6b 65 73 20 74 68 65 20 64 65 6c 65  n makes the dele
12380 74 65 20 72 75 6e 20 6d 75 63 68 20 66 61 73 74  te run much fast
12390 65 72 2e 0a 50 72 69 6f 72 20 74 6f 20 53 51 4c  er..Prior to SQL
123a0 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36  ite [version 3.6
123b0 2e 35 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 36  .5] ([dateof:3.6
123c0 2e 35 5d 29 2c 20 74 68 65 20 74 72 75 6e 63 61  .5]), the trunca
123d0 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a  te optimization.
123e0 61 6c 73 6f 20 6d 65 61 6e 74 20 74 68 61 74 20  also meant that 
123f0 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
12400 6e 67 65 73 28 29 5d 20 61 6e 64 0a 5b 73 71 6c  nges()] and.[sql
12410 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
12420 65 73 28 29 5d 20 69 6e 74 65 72 66 61 63 65 73  es()] interfaces
12430 0a 61 6e 64 20 74 68 65 20 5b 63 6f 75 6e 74 5f  .and the [count_
12440 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 5d 0a  changes pragma].
12450 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c  will not actuall
12460 79 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  y return the num
12470 62 65 72 20 6f 66 20 64 65 6c 65 74 65 64 20 72  ber of deleted r
12480 6f 77 73 2e 20 20 0a 54 68 61 74 20 70 72 6f 62  ows.  .That prob
12490 6c 65 6d 20 68 61 73 20 62 65 65 6e 20 66 69 78  lem has been fix
124a0 65 64 20 61 73 20 6f 66 20 5b 76 65 72 73 69 6f  ed as of [versio
124b0 6e 20 33 2e 36 2e 35 5d 20 28 5b 64 61 74 65 6f  n 3.6.5] ([dateo
124c0 66 3a 33 2e 36 2e 35 5d 29 2e 0a 0a 3c 70 3e 5e  f:3.6.5])...<p>^
124d0 54 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74  The truncate opt
124e0 69 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 62 65  imization can be
124f0 20 70 65 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73   permanently dis
12500 61 62 6c 65 64 20 66 6f 72 20 61 6c 6c 20 71 75  abled for all qu
12510 65 72 69 65 73 0a 62 79 20 72 65 63 6f 6d 70 69  eries.by recompi
12520 6c 69 6e 67 0a 53 51 4c 69 74 65 20 77 69 74 68  ling.SQLite with
12530 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 4f 4d 49   the [SQLITE_OMI
12540 54 5f 54 52 55 4e 43 41 54 45 5f 4f 50 54 49 4d  T_TRUNCATE_OPTIM
12550 49 5a 41 54 49 4f 4e 5d 20 63 6f 6d 70 69 6c 65  IZATION] compile
12560 2d 74 69 6d 65 20 73 77 69 74 63 68 2e 3c 2f 70  -time switch.</p
12570 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 75 6e 63 61  >..<p>The trunca
12580 74 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  te optimization 
12590 63 61 6e 20 61 6c 73 6f 20 62 65 20 64 69 73 61  can also be disa
125a0 62 6c 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  bled at runtime 
125b0 75 73 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74  using.the [sqlit
125c0 65 33 5f 73 65 74 5f 61 75 74 68 6f 72 69 7a 65  e3_set_authorize
125d0 72 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 20  r()] interface. 
125e0 20 5e 49 66 20 61 6e 20 61 75 74 68 6f 72 69 7a   ^If an authoriz
125f0 65 72 20 63 61 6c 6c 62 61 63 6b 0a 72 65 74 75  er callback.retu
12600 72 6e 73 20 5b 53 51 4c 49 54 45 5f 49 47 4e 4f  rns [SQLITE_IGNO
12610 52 45 5d 20 66 6f 72 20 61 6e 20 5b 53 51 4c 49  RE] for an [SQLI
12620 54 45 5f 44 45 4c 45 54 45 5d 20 61 63 74 69 6f  TE_DELETE] actio
12630 6e 20 63 6f 64 65 2c 20 74 68 65 6e 0a 74 68 65  n code, then.the
12640 20 44 45 4c 45 54 45 20 6f 70 65 72 61 74 69 6f   DELETE operatio
12650 6e 20 77 69 6c 6c 20 70 72 6f 63 65 65 64 20 62  n will proceed b
12660 75 74 20 74 68 65 20 74 72 75 6e 63 61 74 65 20  ut the truncate 
12670 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 77 69 6c  optimization wil
12680 6c 0a 62 65 20 62 79 70 61 73 73 65 64 20 61 6e  l.be bypassed an
12690 64 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 64  d rows will be d
126a0 65 6c 65 74 65 64 20 6f 6e 65 20 62 79 20 6f 6e  eleted one by on
126b0 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  e.</p>..<tcl>.##
126c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12700 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
12710 63 74 69 6f 6e 20 7b 44 45 54 41 43 48 20 44 41  ction {DETACH DA
12720 54 41 42 41 53 45 7d 20 64 65 74 61 63 68 20 2a  TABASE} detach *
12730 44 45 54 41 43 48 0a 0a 52 65 63 75 72 73 69 76  DETACH..Recursiv
12740 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  eBubbleDiagram d
12750 65 74 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c  etach-stmt.</tcl
12760 3e 0a 0a 3c 70 3e 5e 54 68 69 73 20 73 74 61 74  >..<p>^This stat
12770 65 6d 65 6e 74 20 64 65 74 61 63 68 65 73 20 61  ement detaches a
12780 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 61 74  n additional dat
12790 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
127a0 20 70 72 65 76 69 6f 75 73 6c 79 20 0a 61 74 74   previously .att
127b0 61 63 68 65 64 20 75 73 69 6e 67 20 74 68 65 20  ached using the 
127c0 5b 41 54 54 41 43 48 5d 20 73 74 61 74 65 6d 65  [ATTACH] stateme
127d0 6e 74 2e 20 20 0a 5e 57 68 65 6e 20 6e 6f 74 20  nt.  .^When not 
127e0 69 6e 20 5b 73 68 61 72 65 64 20 63 61 63 68 65  in [shared cache
127f0 20 6d 6f 64 65 5d 2c 20 0a 69 74 20 69 73 20 70   mode], .it is p
12800 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76 65 20  ossible to have 
12810 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
12820 65 20 66 69 6c 65 20 61 74 74 61 63 68 65 64 20  e file attached 
12830 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 75  multiple times u
12840 73 69 6e 67 20 0a 64 69 66 66 65 72 65 6e 74 20  sing .different 
12850 6e 61 6d 65 73 2c 20 61 6e 64 20 64 65 74 61 63  names, and detac
12860 68 69 6e 67 20 6f 6e 65 20 63 6f 6e 6e 65 63 74  hing one connect
12870 69 6f 6e 20 74 6f 20 61 20 66 69 6c 65 20 77 69  ion to a file wi
12880 6c 6c 20 6c 65 61 76 65 20 74 68 65 20 0a 6f 74  ll leave the .ot
12890 68 65 72 73 20 69 6e 74 61 63 74 2e 3c 2f 70 3e  hers intact.</p>
128a0 0a 5e 49 6e 20 5b 73 68 61 72 65 64 20 63 61 63  .^In [shared cac
128b0 68 65 20 6d 6f 64 65 5d 2c 20 61 74 74 65 6d 70  he mode], attemp
128c0 74 69 6e 67 20 74 6f 20 61 74 74 61 63 68 20 74  ting to attach t
128d0 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
128e0 20 66 69 6c 65 20 6d 6f 72 65 0a 74 68 61 6e 20   file more.than 
128f0 6f 6e 63 65 20 72 65 73 75 6c 74 73 20 69 6e 20  once results in 
12900 61 6e 20 65 72 72 6f 72 2e 0a 0a 0a 3c 74 63 6c  an error....<tcl
12910 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
12920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12960 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 49  .Section {DROP I
12970 4e 44 45 58 7d 20 64 72 6f 70 69 6e 64 65 78 20  NDEX} dropindex 
12980 7b 7b 44 52 4f 50 20 49 4e 44 45 58 7d 7d 0a 0a  {{DROP INDEX}}..
12990 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
129a0 69 61 67 72 61 6d 20 64 72 6f 70 2d 69 6e 64 65  iagram drop-inde
129b0 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  x-stmt.</tcl>..<
129c0 70 3e 5e 54 68 65 20 44 52 4f 50 20 49 4e 44 45  p>^The DROP INDE
129d0 58 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  X statement remo
129e0 76 65 73 20 61 6e 20 69 6e 64 65 78 20 61 64 64  ves an index add
129f0 65 64 0a 77 69 74 68 20 74 68 65 20 5b 43 52 45  ed.with the [CRE
12a00 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65  ATE INDEX] state
12a10 6d 65 6e 74 2e 20 20 54 68 65 20 69 6e 64 65 78  ment.  The index
12a20 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72   is completely r
12a30 65 6d 6f 76 65 64 20 66 72 6f 6d 0a 74 68 65 20  emoved from.the 
12a40 64 69 73 6b 2e 20 20 54 68 65 20 6f 6e 6c 79 20  disk.  The only 
12a50 77 61 79 20 74 6f 20 72 65 63 6f 76 65 72 20 74  way to recover t
12a60 68 65 20 69 6e 64 65 78 20 69 73 20 74 6f 20 72  he index is to r
12a70 65 65 6e 74 65 72 20 74 68 65 0a 61 70 70 72 6f  eenter the.appro
12a80 70 72 69 61 74 65 20 5b 43 52 45 41 54 45 20 49  priate [CREATE I
12a90 4e 44 45 58 5d 20 63 6f 6d 6d 61 6e 64 2e 3c 2f  NDEX] command.</
12aa0 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  p>..<tcl>.######
12ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12af0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
12b00 20 7b 44 52 4f 50 20 54 41 42 4c 45 7d 20 64 72   {DROP TABLE} dr
12b10 6f 70 74 61 62 6c 65 20 7b 7b 44 52 4f 50 20 54  optable {{DROP T
12b20 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72 73 69 76  ABLE}}..Recursiv
12b30 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64  eBubbleDiagram d
12b40 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 3c  rop-table-stmt.<
12b50 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44  /tcl>..<p>^The D
12b60 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ROP TABLE statem
12b70 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74 61  ent removes a ta
12b80 62 6c 65 20 61 64 64 65 64 20 77 69 74 68 20 74  ble added with t
12b90 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he.[CREATE TABLE
12ba0 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  ] statement.  Th
12bb0 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64  e name specified
12bc0 20 69 73 20 74 68 65 0a 74 61 62 6c 65 20 6e 61   is the.table na
12bd0 6d 65 2e 20 20 5e 54 68 65 20 64 72 6f 70 70 65  me.  ^The droppe
12be0 64 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70 6c  d table is compl
12bf0 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20 66 72  etely removed fr
12c00 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
12c10 0a 73 63 68 65 6d 61 20 61 6e 64 20 74 68 65 20  .schema and the 
12c20 64 69 73 6b 20 66 69 6c 65 2e 20 20 54 68 65 20  disk file.  The 
12c30 74 61 62 6c 65 20 63 61 6e 20 6e 6f 74 20 62 65  table can not be
12c40 20 72 65 63 6f 76 65 72 65 64 2e 20 20 0a 5e 41   recovered.  .^A
12c50 6c 6c 20 69 6e 64 69 63 65 73 20 61 6e 64 20 74  ll indices and t
12c60 72 69 67 67 65 72 73 0a 61 73 73 6f 63 69 61 74  riggers.associat
12c70 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
12c80 65 20 61 72 65 20 61 6c 73 6f 20 64 65 6c 65 74  e are also delet
12c90 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ed.</p>..<p>^The
12ca0 20 6f 70 74 69 6f 6e 61 6c 20 49 46 20 45 58 49   optional IF EXI
12cb0 53 54 53 20 63 6c 61 75 73 65 20 73 75 70 70 72  STS clause suppr
12cc0 65 73 73 65 73 20 74 68 65 20 65 72 72 6f 72 20  esses the error 
12cd0 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72 6d 61  that would norma
12ce0 6c 6c 79 0a 72 65 73 75 6c 74 20 69 66 20 74 68  lly.result if th
12cf0 65 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74  e table does not
12d00 20 65 78 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e   exist.</p>..<p>
12d10 5e 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79  ^If [foreign key
12d20 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72   constraints] ar
12d30 65 20 65 6e 61 62 6c 65 64 2c 20 61 20 44 52 4f  e enabled, a DRO
12d40 50 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20  P TABLE command 
12d50 70 65 72 66 6f 72 6d 73 20 61 6e 0a 69 6d 70 6c  performs an.impl
12d60 69 63 69 74 20 5b 44 45 4c 45 54 45 20 7c 20 44  icit [DELETE | D
12d70 45 4c 45 54 45 20 46 52 4f 4d 5d 20 63 6f 6d 6d  ELETE FROM] comm
12d80 61 6e 64 20 62 65 66 6f 72 65 20 72 65 6d 6f 76  and before remov
12d90 69 6e 67 20 74 68 65 0a 74 61 62 6c 65 20 66 72  ing the.table fr
12da0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
12db0 73 63 68 65 6d 61 2e 20 5e 41 6e 79 20 74 72 69  schema. ^Any tri
12dc0 67 67 65 72 73 20 61 74 74 61 63 68 65 64 20 74  ggers attached t
12dd0 6f 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 0a  o the table are.
12de0 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 74 68 65  dropped from the
12df0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
12e00 20 62 65 66 6f 72 65 20 74 68 65 20 69 6d 70 6c   before the impl
12e10 69 63 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d  icit DELETE FROM
12e20 0a 69 73 20 65 78 65 63 75 74 65 64 2c 20 73 6f  .is executed, so
12e30 20 74 68 69 73 20 63 61 6e 6e 6f 74 20 63 61 75   this cannot cau
12e40 73 65 20 61 6e 79 20 74 72 69 67 67 65 72 73 20  se any triggers 
12e50 74 6f 20 66 69 72 65 2e 20 42 79 20 63 6f 6e 74  to fire. By cont
12e60 72 61 73 74 2c 20 5e 61 6e 0a 69 6d 70 6c 69 63  rast, ^an.implic
12e70 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 64  it DELETE FROM d
12e80 6f 65 73 20 63 61 75 73 65 20 61 6e 79 20 63 6f  oes cause any co
12e90 6e 66 69 67 75 72 65 64 0a 5b 66 6f 72 65 69 67  nfigured.[foreig
12ea0 6e 20 6b 65 79 20 61 63 74 69 6f 6e 73 5d 20 74  n key actions] t
12eb0 6f 20 74 61 6b 65 20 70 6c 61 63 65 2e 20 0a 5e  o take place. .^
12ec0 49 66 20 74 68 65 20 69 6d 70 6c 69 63 69 74 20  If the implicit 
12ed0 44 45 4c 45 54 45 20 46 52 4f 4d 20 65 78 65 63  DELETE FROM exec
12ee0 75 74 65 64 0a 61 73 20 70 61 72 74 20 6f 66 20  uted.as part of 
12ef0 61 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6d  a DROP TABLE com
12f00 6d 61 6e 64 20 76 69 6f 6c 61 74 65 73 20 61 6e  mand violates an
12f10 79 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  y immediate fore
12f20 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
12f30 6e 74 73 2c 0a 61 6e 20 65 72 72 6f 72 20 69 73  nts,.an error is
12f40 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20 74 68   returned and th
12f50 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 64  e table is not d
12f60 72 6f 70 70 65 64 2e 20 5e 49 66 20 0a 74 68 65  ropped. ^If .the
12f70 20 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45   implicit DELETE
12f80 20 46 52 4f 4d 20 63 61 75 73 65 73 20 61 6e 79   FROM causes any
12f90 20 0a 64 65 66 65 72 72 65 64 20 66 6f 72 65 69   .deferred forei
12fa0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
12fb0 74 73 20 74 6f 20 62 65 20 76 69 6f 6c 61 74 65  ts to be violate
12fc0 64 2c 20 61 6e 64 20 74 68 65 20 76 69 6f 6c 61  d, and the viola
12fd0 74 69 6f 6e 73 20 73 74 69 6c 6c 0a 65 78 69 73  tions still.exis
12fe0 74 20 77 68 65 6e 20 74 68 65 20 74 72 61 6e 73  t when the trans
12ff0 61 63 74 69 6f 6e 20 69 73 20 63 6f 6d 6d 69 74  action is commit
13000 74 65 64 2c 20 61 6e 20 65 72 72 6f 72 20 69 73  ted, an error is
13010 20 72 65 74 75 72 6e 65 64 20 61 74 20 74 68 65   returned at the
13020 20 74 69 6d 65 0a 6f 66 20 63 6f 6d 6d 69 74 2e   time.of commit.
13030 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
13040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13080 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
13090 44 52 4f 50 20 54 52 49 47 47 45 52 7d 20 64 72  DROP TRIGGER} dr
130a0 6f 70 74 72 69 67 67 65 72 20 7b 7b 44 52 4f 50  optrigger {{DROP
130b0 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63 75   TRIGGER}}..Recu
130c0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
130d0 61 6d 20 64 72 6f 70 2d 74 72 69 67 67 65 72 2d  am drop-trigger-
130e0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
130f0 5e 54 68 65 20 44 52 4f 50 20 54 52 49 47 47 45  ^The DROP TRIGGE
13100 52 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d 6f  R statement remo
13110 76 65 73 20 61 20 74 72 69 67 67 65 72 20 63 72  ves a trigger cr
13120 65 61 74 65 64 20 62 79 20 74 68 65 20 0a 5b 43  eated by the .[C
13130 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73  REATE TRIGGER] s
13140 74 61 74 65 6d 65 6e 74 2e 20 5e 4f 6e 63 65 20  tatement. ^Once 
13150 72 65 6d 6f 76 65 64 2c 20 74 68 65 20 74 72 69  removed, the tri
13160 67 67 65 72 20 64 65 66 69 6e 69 74 69 6f 6e 20  gger definition 
13170 69 73 20 6e 6f 0a 6c 6f 6e 67 65 72 20 70 72 65  is no.longer pre
13180 73 65 6e 74 20 69 6e 20 74 68 65 20 73 71 6c 69  sent in the sqli
13190 74 65 5f 6d 61 73 74 65 72 20 28 6f 72 20 73 71  te_master (or sq
131a0 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
131b0 29 20 74 61 62 6c 65 20 61 6e 64 20 69 73 0a 6e  ) table and is.n
131c0 6f 74 20 66 69 72 65 64 20 62 79 20 61 6e 79 20  ot fired by any 
131d0 73 75 62 73 65 71 75 65 6e 74 20 49 4e 53 45 52  subsequent INSER
131e0 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
131f0 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ETE statements..
13200 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74  .<p>^Note that t
13210 72 69 67 67 65 72 73 20 61 72 65 20 61 75 74 6f  riggers are auto
13220 6d 61 74 69 63 61 6c 6c 79 20 64 72 6f 70 70 65  matically droppe
13230 64 20 77 68 65 6e 20 74 68 65 20 61 73 73 6f 63  d when the assoc
13240 69 61 74 65 64 20 74 61 62 6c 65 20 69 73 0a 64  iated table is.d
13250 72 6f 70 70 65 64 2e 0a 0a 3c 74 63 6c 3e 0a 23  ropped...<tcl>.#
13260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
132a0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
132b0 63 74 69 6f 6e 20 7b 44 52 4f 50 20 56 49 45 57  ction {DROP VIEW
132c0 7d 20 64 72 6f 70 76 69 65 77 20 7b 7b 44 52 4f  } dropview {{DRO
132d0 50 20 56 49 45 57 7d 7d 0a 0a 52 65 63 75 72 73  P VIEW}}..Recurs
132e0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
132f0 20 64 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 0a   drop-view-stmt.
13300 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
13310 44 52 4f 50 20 56 49 45 57 20 73 74 61 74 65 6d  DROP VIEW statem
13320 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 76 69  ent removes a vi
13330 65 77 20 63 72 65 61 74 65 64 20 62 79 20 74 68  ew created by th
13340 65 20 5b 43 52 45 41 54 45 20 56 49 45 57 5d 20  e [CREATE VIEW] 
13350 0a 20 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 54  .  statement. ^T
13360 68 65 20 76 69 65 77 20 64 65 66 69 6e 69 74 69  he view definiti
13370 6f 6e 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72  on is removed fr
13380 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
13390 73 63 68 65 6d 61 2c 20 62 75 74 20 0a 20 20 6e  schema, but .  n
133a0 6f 20 61 63 74 75 61 6c 20 64 61 74 61 20 69 6e  o actual data in
133b0 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
133c0 62 61 73 65 20 74 61 62 6c 65 73 20 69 73 20 6d  base tables is m
133d0 6f 64 69 66 69 65 64 2e 0a 0a 3c 70 3e 5e 28 54  odified...<p>^(T
133e0 68 65 20 76 69 65 77 20 74 6f 20 64 72 6f 70 20  he view to drop 
133f0 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
13400 20 74 68 65 20 76 69 65 77 2d 6e 61 6d 65 20 61   the view-name a
13410 6e 64 20 6f 70 74 69 6f 6e 61 6c 20 0a 20 20 73  nd optional .  s
13420 63 68 65 6d 61 2d 6e 61 6d 65 20 73 70 65 63 69  chema-name speci
13430 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  fied as part of 
13440 74 68 65 20 44 52 4f 50 20 56 49 45 57 20 73 74  the DROP VIEW st
13450 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 0a 20  atement. This . 
13460 20 72 65 66 65 72 65 6e 63 65 20 69 73 20 72 65   reference is re
13470 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 74 68 65  solved using the
13480 20 73 74 61 6e 64 61 72 64 20 70 72 6f 63 65 64   standard proced
13490 75 72 65 20 66 6f 72 20 5b 6f 62 6a 65 63 74 20  ure for [object 
134a0 72 65 73 6f 6c 75 74 69 6f 6e 5d 2e 29 5e 0a 0a  resolution].)^..
134b0 3c 70 3e 0a 20 20 5e 49 66 20 74 68 65 20 73 70  <p>.  ^If the sp
134c0 65 63 69 66 69 65 64 20 76 69 65 77 20 63 61 6e  ecified view can
134d0 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20 61 6e 64  not be found and
134e0 20 74 68 65 20 49 46 20 45 58 49 53 54 53 20 63   the IF EXISTS c
134f0 6c 61 75 73 65 20 69 73 20 6e 6f 74 20 0a 20 20  lause is not .  
13500 70 72 65 73 65 6e 74 2c 20 69 74 20 69 73 20 61  present, it is a
13510 6e 20 65 72 72 6f 72 2e 20 5e 49 66 20 74 68 65  n error. ^If the
13520 20 73 70 65 63 69 66 69 65 64 20 76 69 65 77 20   specified view 
13530 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 20  cannot be found 
13540 61 6e 64 20 61 6e 20 49 46 0a 20 20 45 58 49 53  and an IF.  EXIS
13550 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
13560 73 65 6e 74 20 69 6e 20 74 68 65 20 44 52 4f 50  sent in the DROP
13570 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74 2c   VIEW statement,
13580 20 74 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d   then the statem
13590 65 6e 74 0a 20 20 69 73 20 61 20 6e 6f 2d 6f 70  ent.  is a no-op
135a0 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  ....<tcl>.######
135b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
135f0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
13600 20 7b 44 61 74 61 62 61 73 65 20 4f 62 6a 65 63   {Database Objec
13610 74 20 4e 61 6d 65 20 52 65 73 6f 6c 75 74 69 6f  t Name Resolutio
13620 6e 7d 20 7b 6e 61 6d 69 6e 67 7d 20 7b 7b 6f 62  n} {naming} {{ob
13630 6a 65 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 7d  ject resolution}
13640 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 20 20  }.</tcl>..<p>.  
13650 49 6e 20 53 51 4c 69 74 65 2c 20 61 20 64 61 74  In SQLite, a dat
13660 61 62 61 73 65 20 6f 62 6a 65 63 74 20 28 61 20  abase object (a 
13670 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 74 72  table, index, tr
13680 69 67 67 65 72 20 6f 72 20 76 69 65 77 29 20 69  igger or view) i
13690 73 20 69 64 65 6e 74 69 66 69 65 64 0a 20 20 62  s identified.  b
136a0 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
136b0 65 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65  e object and the
136c0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74   name of the dat
136d0 61 62 61 73 65 20 74 68 61 74 20 69 74 20 72 65  abase that it re
136e0 73 69 64 65 73 20 69 6e 2e 20 0a 20 20 44 61 74  sides in. .  Dat
136f0 61 62 61 73 65 20 6f 62 6a 65 63 74 73 20 6d 61  abase objects ma
13700 79 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20  y reside in the 
13710 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 74  main database, t
13720 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
13730 2c 20 6f 72 20 69 6e 0a 20 20 61 6e 20 5b 41 54  , or in.  an [AT
13740 54 41 43 48 7c 61 74 74 61 63 68 65 64 20 64 61  TACH|attached da
13750 74 61 62 61 73 65 5d 2e 0a 0a 3c 70 3e 0a 20 20  tabase]...<p>.  
13760 54 68 65 20 73 79 6e 74 61 78 20 6f 66 20 74 68  The syntax of th
13770 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 2c 20  e [DROP TABLE], 
13780 5b 44 52 4f 50 20 49 4e 44 45 58 5d 2c 20 5b 44  [DROP INDEX], [D
13790 52 4f 50 20 56 49 45 57 5d 2c 20 5b 44 52 4f 50  ROP VIEW], [DROP
137a0 20 54 52 49 47 47 45 52 5d 2c 0a 20 20 5b 52 45   TRIGGER],.  [RE
137b0 49 4e 44 45 58 5d 2c 20 5b 41 4c 54 45 52 20 54  INDEX], [ALTER T
137c0 41 42 4c 45 5d 20 61 6e 64 20 6d 61 6e 79 20 6f  ABLE] and many o
137d0 74 68 65 72 20 63 6f 6d 6d 61 6e 64 73 20 61 6c  ther commands al
137e0 6c 20 70 65 72 6d 69 74 20 74 68 65 20 75 73 65  l permit the use
137f0 72 20 74 6f 0a 20 20 73 70 65 63 69 66 79 20 61  r to.  specify a
13800 20 64 61 74 61 62 61 73 65 20 6f 62 6a 65 63 74   database object
13810 20 65 69 74 68 65 72 20 62 79 20 69 74 73 20 6e   either by its n
13820 61 6d 65 20 61 6c 6f 6e 65 2c 20 6f 72 20 62 79  ame alone, or by
13830 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
13840 66 0a 20 20 69 74 73 20 6e 61 6d 65 20 61 6e 64  f.  its name and
13850 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 69 74 73   the name of its
13860 20 64 61 74 61 62 61 73 65 2e 20 5e 28 49 66 20   database. ^(If 
13870 6e 6f 20 64 61 74 61 62 61 73 65 20 69 73 20 73  no database is s
13880 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
13890 0a 20 20 6f 66 20 74 68 65 20 6f 62 6a 65 63 74  .  of the object
138a0 20 72 65 66 65 72 65 6e 63 65 2c 20 74 68 65 6e   reference, then
138b0 20 53 51 4c 69 74 65 20 73 65 61 72 63 68 65 73   SQLite searches
138c0 20 74 68 65 20 6d 61 69 6e 2c 20 74 65 6d 70 20   the main, temp 
138d0 61 6e 64 20 61 6c 6c 20 61 74 74 61 63 68 65 64  and all attached
138e0 0a 20 20 64 61 74 61 62 61 73 65 73 20 66 6f 72  .  databases for
138f0 20 61 6e 20 6f 62 6a 65 63 74 20 77 69 74 68 20   an object with 
13900 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 2e  a matching name.
13910 20 54 68 65 20 74 65 6d 70 20 64 61 74 61 62 61   The temp databa
13920 73 65 20 69 73 20 73 65 61 72 63 68 65 64 0a 20  se is searched. 
13930 20 66 69 72 73 74 2c 20 66 6f 6c 6c 6f 77 65 64   first, followed
13940 20 62 79 20 74 68 65 20 6d 61 69 6e 20 64 61 74   by the main dat
13950 61 62 61 73 65 2c 20 66 6f 6c 6c 6f 77 65 64 20  abase, followed 
13960 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
13970 61 62 61 73 65 73 20 69 6e 20 74 68 65 0a 20 20  abases in the.  
13980 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20  order that they 
13990 77 65 72 65 20 61 74 74 61 63 68 65 64 2e 20 54  were attached. T
139a0 68 65 20 72 65 66 65 72 65 6e 63 65 20 72 65 73  he reference res
139b0 6f 6c 76 65 73 20 74 6f 20 74 68 65 20 66 69 72  olves to the fir
139c0 73 74 20 6d 61 74 63 68 0a 20 20 66 6f 75 6e 64  st match.  found
139d0 2e 29 5e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a  .)^ For example:
139e0 0a 0a 3c 70 72 65 3e 5e 28 0a 20 20 20 20 20 20  ..<pre>^(.      
139f0 2f 2a 20 41 64 64 20 61 20 74 61 62 6c 65 20 6e  /* Add a table n
13a00 61 6d 65 64 20 27 74 31 27 20 74 6f 20 74 68 65  amed 't1' to the
13a10 20 74 65 6d 70 2c 20 6d 61 69 6e 20 61 6e 64 20   temp, main and 
13a20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
13a30 62 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 41 54  base */.      AT
13a40 54 41 43 48 20 27 66 69 6c 65 2e 64 62 27 20 41  TACH 'file.db' A
13a50 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45  S aux;.      CRE
13a60 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
13a70 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  y);.      CREATE
13a80 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 78   TEMP TABLE t1(x
13a90 2c 20 79 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , y);.      CREA
13aa0 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28  TE TABLE aux.t1(
13ab0 78 2c 20 79 29 3b 0a 0a 20 20 20 20 20 20 44 52  x, y);..      DR
13ac0 4f 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20  OP TABLE t1;    
13ad0 20 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62       /* Drop tab
13ae0 6c 65 20 69 6e 20 74 65 6d 70 20 64 61 74 61 62  le in temp datab
13af0 61 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f  ase */.      DRO
13b00 50 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20  P TABLE t1;     
13b10 20 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c      /* Drop tabl
13b20 65 20 69 6e 20 6d 61 69 6e 20 64 61 74 61 62 61  e in main databa
13b30 73 65 20 2a 2f 0a 20 20 20 20 20 20 44 52 4f 50  se */.      DROP
13b40 20 54 41 42 4c 45 20 74 31 3b 20 20 20 20 20 20   TABLE t1;      
13b50 20 20 20 2f 2a 20 44 72 6f 70 20 74 61 62 6c 65     /* Drop table
13b60 20 69 6e 20 61 75 78 20 64 61 74 61 62 61 73 65   in aux database
13b70 20 2a 2f 0a 29 5e 3c 2f 70 72 65 3e 0a 0a 3c 70   */.)^</pre>..<p
13b80 3e 0a 20 20 5e 49 66 20 61 20 73 63 68 65 6d 61  >.  ^If a schema
13b90 20 6e 61 6d 65 20 69 73 20 73 70 65 63 69 66 69   name is specifi
13ba0 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
13bb0 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
13bc0 65 2c 20 69 74 20 6d 75 73 74 20 62 65 0a 20 20  e, it must be.  
13bd0 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c 20 6f  either "main", o
13be0 72 20 22 74 65 6d 70 22 20 6f 72 20 74 68 65 20  r "temp" or the 
13bf0 73 63 68 65 6d 61 2d 6e 61 6d 65 20 6f 66 20 61  schema-name of a
13c00 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
13c10 61 73 65 2e 0a 20 20 5e 4c 69 6b 65 20 6f 74 68  ase..  ^Like oth
13c20 65 72 20 53 51 4c 20 69 64 65 6e 74 69 66 69 65  er SQL identifie
13c30 72 73 2c 20 73 63 68 65 6d 61 20 6e 61 6d 65 73  rs, schema names
13c40 20 61 72 65 20 63 61 73 65 2d 69 6e 73 65 6e 73   are case-insens
13c50 69 74 69 76 65 2e 0a 20 20 5e 49 66 20 61 20 73  itive..  ^If a s
13c60 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70  chema name is sp
13c70 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 6f 6e  ecified, then on
13c80 6c 79 20 74 68 61 74 20 6f 6e 65 20 73 63 68 65  ly that one sche
13c90 6d 61 20 69 73 20 73 65 61 72 63 68 65 64 20 66  ma is searched f
13ca0 6f 72 0a 20 20 74 68 65 20 6e 61 6d 65 64 20 6f  or.  the named o
13cb0 62 6a 65 63 74 2e 0a 0a 3c 70 3e 0a 20 20 4d 6f  bject...<p>.  Mo
13cc0 73 74 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  st object refere
13cd0 6e 63 65 73 20 6d 61 79 20 6f 6e 6c 79 20 72 65  nces may only re
13ce0 73 6f 6c 76 65 20 74 6f 20 61 20 73 70 65 63 69  solve to a speci
13cf0 66 69 63 20 74 79 70 65 20 6f 66 20 6f 62 6a 65  fic type of obje
13d00 63 74 20 28 66 6f 72 0a 20 20 65 78 61 6d 70 6c  ct (for.  exampl
13d10 65 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 68  e a reference th
13d20 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 20  at is part of a 
13d30 44 52 4f 50 20 54 41 42 4c 45 20 73 74 61 74 65  DROP TABLE state
13d40 6d 65 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 72 65  ment may only re
13d50 73 6f 6c 76 65 0a 20 20 74 6f 20 61 20 74 61 62  solve.  to a tab
13d60 6c 65 20 6f 62 6a 65 63 74 2c 20 6e 6f 74 20 61  le object, not a
13d70 6e 20 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72  n index, trigger
13d80 20 6f 72 20 76 69 65 77 29 2e 20 48 6f 77 65 76   or view). Howev
13d90 65 72 20 69 6e 20 73 6f 6d 65 20 63 6f 6e 74 65  er in some conte
13da0 78 74 73 20 0a 20 20 28 65 2e 67 2e 20 5b 52 45  xts .  (e.g. [RE
13db0 49 4e 44 45 58 5d 29 20 61 6e 20 6f 62 6a 65 63  INDEX]) an objec
13dc0 74 20 72 65 66 65 72 65 6e 63 65 20 6d 61 79 20  t reference may 
13dd0 62 65 20 72 65 73 6f 6c 76 65 20 74 6f 20 6d 6f  be resolve to mo
13de0 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 79 70 65  re than one type
13df0 0a 20 20 6f 66 20 6f 62 6a 65 63 74 2e 20 5e 57  .  of object. ^W
13e00 68 65 6e 20 73 65 61 72 63 68 69 6e 67 20 64 61  hen searching da
13e10 74 61 62 61 73 65 20 73 63 68 65 6d 61 73 20 66  tabase schemas f
13e20 6f 72 20 61 20 6e 61 6d 65 64 20 6f 62 6a 65 63  or a named objec
13e30 74 2c 20 6f 62 6a 65 63 74 73 20 6f 66 0a 20 20  t, objects of.  
13e40 74 79 70 65 73 20 74 68 61 74 20 63 61 6e 6e 6f  types that canno
13e50 74 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65  t be used in the
13e60 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20   context of the 
13e70 72 65 66 65 72 65 6e 63 65 20 61 72 65 20 61 6c  reference are al
13e80 77 61 79 73 20 0a 20 20 69 67 6e 6f 72 65 64 2e  ways .  ignored.
13e90 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
13ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ee0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 45  ######.Section E
13ef0 58 50 4c 41 49 4e 20 65 78 70 6c 61 69 6e 20 45  XPLAIN explain E
13f00 58 50 4c 41 49 4e 0a 0a 42 75 62 62 6c 65 44 69  XPLAIN..BubbleDi
13f10 61 67 72 61 6d 20 73 71 6c 2d 73 74 6d 74 0a 3c  agram sql-stmt.<
13f20 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 53 51  /tcl>..<p>^An SQ
13f30 4c 20 73 74 61 74 65 6d 65 6e 74 20 63 61 6e 20  L statement can 
13f40 62 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74  be preceded by t
13f50 68 65 20 6b 65 79 77 6f 72 64 20 22 45 58 50 4c  he keyword "EXPL
13f60 41 49 4e 22 20 6f 72 0a 62 79 20 74 68 65 20 70  AIN" or.by the p
13f70 68 72 61 73 65 20 22 45 58 50 4c 41 49 4e 20 51  hrase "EXPLAIN Q
13f80 55 45 52 59 20 50 4c 41 4e 22 2e 20 20 5e 45 69  UERY PLAN".  ^Ei
13f90 74 68 65 72 20 6d 6f 64 69 66 69 63 61 74 69 6f  ther modificatio
13fa0 6e 20 63 61 75 73 65 73 20 74 68 65 0a 53 51 4c  n causes the.SQL
13fb0 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65   statement to be
13fc0 68 61 76 65 20 61 73 20 61 20 71 75 65 72 79 20  have as a query 
13fd0 61 6e 64 20 74 6f 20 72 65 74 75 72 6e 20 69 6e  and to return in
13fe0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 0a  formation about.
13ff0 68 6f 77 20 74 68 65 20 53 51 4c 20 73 74 61 74  how the SQL stat
14000 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65  ement would have
14010 20 6f 70 65 72 61 74 65 64 20 69 66 20 74 68 65   operated if the
14020 20 45 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64   EXPLAIN keyword
14030 20 6f 72 0a 70 68 72 61 73 65 20 68 61 64 20 62   or.phrase had b
14040 65 65 6e 20 6f 6d 69 74 74 65 64 2e 3c 2f 70 3e  een omitted.</p>
14050 0a 0a 3c 70 3e 54 68 65 20 6f 75 74 70 75 74 20  ..<p>The output 
14060 66 72 6f 6d 20 45 58 50 4c 41 49 4e 20 61 6e 64  from EXPLAIN and
14070 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
14080 4c 41 4e 20 69 73 20 69 6e 74 65 6e 64 65 64 20  LAN is intended 
14090 66 6f 72 0a 69 6e 74 65 72 61 63 74 69 76 65 20  for.interactive 
140a0 61 6e 61 6c 79 73 69 73 20 61 6e 64 20 74 72 6f  analysis and tro
140b0 75 62 6c 65 73 68 6f 6f 74 69 6e 67 20 6f 6e 6c  ubleshooting onl
140c0 79 2e 20 20 54 68 65 20 64 65 74 61 69 6c 73 20  y.  The details 
140d0 6f 66 20 74 68 65 20 0a 6f 75 74 70 75 74 20 66  of the .output f
140e0 6f 72 6d 61 74 20 61 72 65 20 73 75 62 6a 65 63  ormat are subjec
140f0 74 20 74 6f 20 63 68 61 6e 67 65 20 66 72 6f 6d  t to change from
14100 20 6f 6e 65 20 72 65 6c 65 61 73 65 20 6f 66 20   one release of 
14110 53 51 4c 69 74 65 20 74 6f 20 74 68 65 20 6e 65  SQLite to the ne
14120 78 74 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73  xt..Applications
14130 20 73 68 6f 75 6c 64 20 6e 6f 74 20 75 73 65 20   should not use 
14140 45 58 50 4c 41 49 4e 20 6f 72 20 45 58 50 4c 41  EXPLAIN or EXPLA
14150 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 69  IN QUERY PLAN si
14160 6e 63 65 0a 74 68 65 69 72 20 65 78 61 63 74 20  nce.their exact 
14170 62 65 68 61 76 69 6f 72 20 69 73 20 76 61 72 69  behavior is vari
14180 61 62 6c 65 20 61 6e 64 20 6f 6e 6c 79 20 70 61  able and only pa
14190 72 74 69 61 6c 6c 79 20 64 6f 63 75 6d 65 6e 74  rtially document
141a0 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65  ed.</p>..<p>^Whe
141b0 6e 20 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65  n the EXPLAIN ke
141c0 79 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 79  yword appears by
141d0 20 69 74 73 65 6c 66 20 69 74 20 63 61 75 73 65   itself it cause
141e0 73 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  s the statement.
141f0 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 20 71  to behave as a q
14200 75 65 72 79 20 74 68 61 74 20 72 65 74 75 72 6e  uery that return
14210 73 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f  s the sequence o
14220 66 20 0a 5b 76 69 72 74 75 61 6c 20 6d 61 63 68  f .[virtual mach
14230 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ine instructions
14240 5d 20 69 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ] it would have 
14250 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
14260 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 64 0a  the command had.
14270 74 68 65 20 45 58 50 4c 41 49 4e 20 6b 65 79 77  the EXPLAIN keyw
14280 6f 72 64 20 6e 6f 74 20 62 65 65 6e 20 70 72 65  ord not been pre
14290 73 65 6e 74 2e 20 5e 57 68 65 6e 20 74 68 65 20  sent. ^When the 
142a0 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
142b0 41 4e 20 70 68 72 61 73 65 0a 61 70 70 65 61 72  AN phrase.appear
142c0 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  s, the statement
142d0 20 72 65 74 75 72 6e 73 20 68 69 67 68 2d 6c 65   returns high-le
142e0 76 65 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  vel information 
142f0 72 65 67 61 72 64 69 6e 67 20 74 68 65 20 71 75  regarding the qu
14300 65 72 79 0a 70 6c 61 6e 20 74 68 61 74 20 77 6f  ery.plan that wo
14310 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 75 73  uld have been us
14320 65 64 2e 0a 0a 54 68 65 20 45 58 50 4c 41 49 4e  ed...The EXPLAIN
14330 20 51 55 45 52 59 20 50 4c 41 4e 20 63 6f 6d 6d   QUERY PLAN comm
14340 61 6e 64 20 69 73 20 64 65 73 63 72 69 62 65 64  and is described
14350 20 69 6e 20 0a 5b 65 78 70 6c 61 69 6e 20 71 75   in .[explain qu
14360 65 72 79 20 70 6c 61 6e 7c 6d 6f 72 65 20 64 65  ery plan|more de
14370 74 61 69 6c 20 68 65 72 65 5d 2e 0a 0a 3c 74 63  tail here]...<tc
14380 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
14390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
143d0 23 0a 53 65 63 74 69 6f 6e 20 65 78 70 72 65 73  #.Section expres
143e0 73 69 6f 6e 20 65 78 70 72 20 7b 2a 65 78 70 72  sion expr {*expr
143f0 65 73 73 69 6f 6e 20 7b 65 78 70 72 65 73 73 69  ession {expressi
14400 6f 6e 20 73 79 6e 74 61 78 7d 7d 0a 0a 52 65 63  on syntax}}..Rec
14410 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
14420 72 61 6d 20 65 78 70 72 0a 3c 2f 74 63 6c 3e 0a  ram expr.</tcl>.
14430 0a 3c 70 3e 54 68 69 73 20 73 65 63 74 69 6f 6e  .<p>This section
14440 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72   is different fr
14450 6f 6d 20 74 68 65 20 6f 74 68 65 72 73 2e 20 20  om the others.  
14460 4d 6f 73 74 20 6f 74 68 65 72 20 73 65 63 74 69  Most other secti
14470 6f 6e 73 20 6f 66 0a 74 68 69 73 20 64 6f 63 75  ons of.this docu
14480 6d 65 6e 74 20 74 61 6c 6b 73 20 61 62 6f 75 74  ment talks about
14490 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 53 51   a particular SQ
144a0 4c 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 69 73  L command.  This
144b0 20 73 65 63 74 69 6f 6e 20 64 6f 65 73 0a 6e 6f   section does.no
144c0 74 20 74 61 6c 6b 20 61 62 6f 75 74 20 61 20 73  t talk about a s
144d0 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e  tandalone comman
144e0 64 20 62 75 74 20 61 62 6f 75 74 20 22 65 78 70  d but about "exp
144f0 72 65 73 73 69 6f 6e 73 22 20 77 68 69 63 68 20  ressions" which 
14500 61 72 65 20 0a 73 75 62 63 6f 6d 70 6f 6e 65 6e  are .subcomponen
14510 74 73 20 6f 66 20 6d 6f 73 74 20 6f 74 68 65 72  ts of most other
14520 20 63 6f 6d 6d 61 6e 64 73 2e 3c 2f 70 3e 0a 0a   commands.</p>..
14530 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
14540 20 62 69 6e 61 72 79 6f 70 73 20 7b 62 69 6e 61   binaryops {bina
14550 72 79 20 6f 70 65 72 61 74 6f 72 73 7d 3c 2f 74  ry operators}</t
14560 63 6c 3e 0a 3c 68 33 3e 4f 70 65 72 61 74 6f 72  cl>.<h3>Operator
14570 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 28 53 51 4c 69  s</h3>.<p>^(SQLi
14580 74 65 20 75 6e 64 65 72 73 74 61 6e 64 73 20 74  te understands t
14590 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 6e  he following bin
145a0 61 72 79 20 6f 70 65 72 61 74 6f 72 73 2c 20 69  ary operators, i
145b0 6e 20 6f 72 64 65 72 20 66 72 6f 6d 0a 68 69 67  n order from.hig
145c0 68 65 73 74 20 74 6f 20 6c 6f 77 65 73 74 20 70  hest to lowest p
145d0 72 65 63 65 64 65 6e 63 65 3a 3c 2f 70 3e 0a 0a  recedence:</p>..
145e0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
145f0 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
14600 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 7c 7c 0a  2c2cf0"><big>||.
14610 2a 20 20 20 20 2f 20 20 20 20 25 0a 2b 20 20 20  *    /    %.+   
14620 20 2d 0a 26 6c 74 3b 26 6c 74 3b 20 20 20 26 67   -.&lt;&lt;   &g
14630 74 3b 26 67 74 3b 20 20 20 26 61 6d 70 3b 20 20  t;&gt;   &amp;  
14640 20 20 7c 0a 26 6c 74 3b 20 20 20 20 26 6c 74 3b    |.&lt;    &lt;
14650 3d 20 20 20 26 67 74 3b 20 20 20 20 26 67 74 3b  =   &gt;    &gt;
14660 3d 0a 3d 20 20 20 20 3d 3d 20 20 20 21 3d 20 20  =.=    ==   !=  
14670 20 26 6c 74 3b 26 67 74 3b 20 20 20 3c 2f 62 69   &lt;&gt;   </bi
14680 67 3e 49 53 20 20 20 49 53 20 4e 4f 54 20 20 20  g>IS   IS NOT   
14690 49 4e 20 20 20 4c 49 4b 45 20 20 20 47 4c 4f 42  IN   LIKE   GLOB
146a0 20 20 20 4d 41 54 43 48 20 20 20 52 45 47 45 58     MATCH   REGEX
146b0 50 0a 41 4e 44 20 20 20 0a 4f 52 3c 2f 66 6f 6e  P.AND   .OR</fon
146c0 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  t>.</pre></block
146d0 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 28 53  quote>)^..<p>^(S
146e0 75 70 70 6f 72 74 65 64 20 75 6e 61 72 79 20 70  upported unary p
146f0 72 65 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  refix operators 
14700 61 72 65 20 74 68 65 73 65 3a 3c 2f 70 3e 0a 0a  are these:</p>..
14710 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
14720 3e 0a 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  >.<font color="#
14730 32 63 32 63 66 30 22 3e 3c 62 69 67 3e 2d 20 20  2c2cf0"><big>-  
14740 20 20 2b 20 20 20 20 7e 20 20 20 20 4e 4f 54 3c    +    ~    NOT<
14750 2f 62 69 67 3e 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70  /big></font>.</p
14760 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
14770 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
14780 6d 65 6e 74 20 63 6f 6c 6c 61 74 65 6f 70 20 7b  ment collateop {
14790 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
147a0 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20  }</tcl>.<p>^The 
147b0 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72  COLLATE operator
147c0 20 69 73 20 61 20 75 6e 61 72 79 20 70 6f 73 74   is a unary post
147d0 66 69 78 0a 6f 70 65 72 61 74 6f 72 20 74 68 61  fix.operator tha
147e0 74 20 61 73 73 69 67 6e 73 20 61 20 5b 63 6f 6c  t assigns a [col
147f0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 5d  lating sequence]
14800 20 74 6f 20 61 6e 20 65 78 70 72 65 73 73 69 6f   to an expressio
14810 6e 2e 0a 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  n..^The COLLATE 
14820 6f 70 65 72 61 74 6f 72 20 68 61 73 20 61 20 68  operator has a h
14830 69 67 68 65 72 20 70 72 65 63 65 64 65 6e 63 65  igher precedence
14840 20 28 62 69 6e 64 73 20 6d 6f 72 65 20 74 69 67   (binds more tig
14850 68 74 6c 79 29 20 74 68 61 6e 20 61 6e 79 0a 62  htly) than any.b
14860 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 20 61  inary operator a
14870 6e 64 20 61 6e 79 20 75 6e 61 72 79 20 70 72 65  nd any unary pre
14880 66 69 78 20 6f 70 65 72 61 74 6f 72 20 65 78 63  fix operator exc
14890 65 70 74 20 22 7e 22 2e 0a 28 43 4f 4c 4c 41 54  ept "~"..(COLLAT
148a0 45 20 61 6e 64 20 22 7e 22 20 61 72 65 20 61 73  E and "~" are as
148b0 73 6f 63 69 61 74 69 76 65 20 73 6f 20 74 68 65  sociative so the
148c0 69 72 20 62 69 6e 64 69 6e 67 20 6f 72 64 65 72  ir binding order
148d0 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72   does not matter
148e0 2e 29 0a 5e 54 68 65 20 63 6f 6c 6c 61 74 69 6e  .).^The collatin
148f0 67 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  g sequence set b
14900 79 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 6f 70  y the COLLATE op
14910 65 72 61 74 6f 72 20 6f 76 65 72 72 69 64 65 73  erator overrides
14920 20 74 68 65 0a 63 6f 6c 6c 61 74 69 6e 67 20 73   the.collating s
14930 65 71 75 65 6e 63 65 20 64 65 74 65 72 6d 69 6e  equence determin
14940 65 64 20 62 79 20 74 68 65 20 43 4f 4c 4c 41 54  ed by the COLLAT
14950 45 20 63 6c 61 75 73 65 20 69 6e 20 61 20 74 61  E clause in a ta
14960 62 6c 65 0a 5b 63 6f 6c 75 6d 6e 20 64 65 66 69  ble.[column defi
14970 6e 69 74 69 6f 6e 5d 2e 0a 53 65 65 20 74 68 65  nition]..See the
14980 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75   [collating sequ
14990 65 6e 63 65 7c 20 64 65 74 61 69 6c 65 64 20 64  ence| detailed d
149a0 69 73 63 75 73 73 69 6f 6e 20 6f 6e 20 63 6f 6c  iscussion on col
149b0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
149c0 5d 0a 69 6e 20 74 68 65 20 5b 64 61 74 61 74 79  ].in the [dataty
149d0 70 65 20 7c 20 44 61 74 61 74 79 70 65 20 49 6e  pe | Datatype In
149e0 20 53 51 4c 69 74 65 33 5d 20 64 6f 63 75 6d 65   SQLite3] docume
149f0 6e 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  nt for additiona
14a00 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 3c  l information..<
14a10 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74  /p>..<tcl>hd_put
14a20 73 20 22 0a 3c 70 3e 5e 54 68 65 20 75 6e 61 72  s ".<p>^The unar
14a30 79 20 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65 72  y operator [Oper
14a40 61 74 6f 72 20 2b 5d 20 69 73 20 61 20 6e 6f 2d  ator +] is a no-
14a50 6f 70 2e 20 20 5e 49 74 20 63 61 6e 20 62 65 20  op.  ^It can be 
14a60 61 70 70 6c 69 65 64 0a 74 6f 20 73 74 72 69 6e  applied.to strin
14a70 67 73 2c 20 6e 75 6d 62 65 72 73 2c 20 62 6c 6f  gs, numbers, blo
14a80 62 73 20 6f 72 20 4e 55 4c 4c 20 61 6e 64 20 69  bs or NULL and i
14a90 74 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 73  t always returns
14aa0 20 61 20 72 65 73 75 6c 74 0a 77 69 74 68 20 74   a result.with t
14ab0 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 61 73  he same value as
14ac0 20 74 68 65 20 6f 70 65 72 61 6e 64 2e 3c 2f 70   the operand.</p
14ad0 3e 22 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74  >"</tcl>..<p>Not
14ae0 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65  e that there are
14af0 20 74 77 6f 20 76 61 72 69 61 74 69 6f 6e 73 20   two variations 
14b00 6f 66 20 74 68 65 20 65 71 75 61 6c 73 20 61 6e  of the equals an
14b10 64 20 6e 6f 74 20 65 71 75 61 6c 73 0a 6f 70 65  d not equals.ope
14b20 72 61 74 6f 72 73 2e 20 20 5e 45 71 75 61 6c 73  rators.  ^Equals
14b30 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 0a   can be either..
14b40 3c 74 63 6c 3e 0a 68 64 5f 70 75 74 73 20 22 5b  <tcl>.hd_puts "[
14b50 4f 70 65 72 61 74 6f 72 20 3d 5d 20 6f 72 20 5b  Operator =] or [
14b60 4f 70 65 72 61 74 6f 72 20 3d 3d 5d 2e 0a 5e 54  Operator ==]..^T
14b70 68 65 20 6e 6f 6e 2d 65 71 75 61 6c 73 20 6f 70  he non-equals op
14b80 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 65 69  erator can be ei
14b90 74 68 65 72 0a 5b 4f 70 65 72 61 74 6f 72 20 21  ther.[Operator !
14ba0 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20  =] or [Operator 
14bb0 7b 26 6c 74 3b 26 67 74 3b 7d 5d 2e 0a 5e 54 68  {&lt;&gt;}]..^Th
14bc0 65 20 5b 4f 70 65 72 61 74 6f 72 20 7c 7c 5d 20  e [Operator ||] 
14bd0 6f 70 65 72 61 74 6f 72 20 69 73 20 5c 22 63 6f  operator is \"co
14be0 6e 63 61 74 65 6e 61 74 65 5c 22 20 2d 20 69 74  ncatenate\" - it
14bf0 20 6a 6f 69 6e 73 20 74 6f 67 65 74 68 65 72 0a   joins together.
14c00 74 68 65 20 74 77 6f 20 73 74 72 69 6e 67 73 20  the two strings 
14c10 6f 66 20 69 74 73 20 6f 70 65 72 61 6e 64 73 2e  of its operands.
14c20 0a 5e 54 68 65 20 6f 70 65 72 61 74 6f 72 20 5b  .^The operator [
14c30 4f 70 65 72 61 74 6f 72 20 25 5d 20 6f 75 74 70  Operator %] outp
14c40 75 74 73 20 74 68 65 20 69 6e 74 65 67 65 72 20  uts the integer 
14c50 76 61 6c 75 65 20 6f 66 20 69 74 73 20 6c 65 66  value of its lef
14c60 74 20 0a 6f 70 65 72 61 6e 64 20 6d 6f 64 75 6c  t .operand modul
14c70 6f 20 69 74 73 20 72 69 67 68 74 20 6f 70 65 72  o its right oper
14c80 61 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  and.  In other w
14c90 6f 72 64 73 2c 20 74 68 65 0a 6f 70 65 72 61 74  ords, the.operat
14ca0 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 25 5d 20  or [Operator %] 
14cb0 77 6f 72 6b 73 20 69 6e 20 53 51 4c 69 74 65 20  works in SQLite 
14cc0 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 64  the same as it d
14cd0 6f 65 73 0a 69 6e 20 41 4e 53 49 2d 43 2e 3c 2f  oes.in ANSI-C.</
14ce0 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 72 65 73 75  p>..<p>^The resu
14cf0 6c 74 20 6f 66 20 61 6e 79 20 62 69 6e 61 72 79  lt of any binary
14d00 20 6f 70 65 72 61 74 6f 72 20 69 73 20 65 69 74   operator is eit
14d10 68 65 72 20 61 20 6e 75 6d 65 72 69 63 20 76 61  her a numeric va
14d20 6c 75 65 20 6f 72 20 0a 4e 55 4c 4c 2c 20 65 78  lue or .NULL, ex
14d30 63 65 70 74 20 66 6f 72 20 74 68 65 20 5b 4f 70  cept for the [Op
14d40 65 72 61 74 6f 72 20 7c 7c 5d 20 63 6f 6e 63 61  erator ||] conca
14d50 74 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f  tenation operato
14d60 72 20 77 68 69 63 68 20 61 6c 77 61 79 73 20 0a  r which always .
14d70 65 76 61 6c 75 61 74 65 73 20 74 6f 20 65 69 74  evaluates to eit
14d80 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 74 65  her NULL or a te
14d90 78 74 20 76 61 6c 75 65 2e 3c 2f 70 3e 22 0a 0a  xt value.</p>"..
14da0 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 69 73 69  hd_fragment {isi
14db0 73 6e 6f 74 7d 20 7b 49 53 20 6f 70 65 72 61 74  snot} {IS operat
14dc0 6f 72 7d 20 7b 49 53 20 4e 4f 54 20 6f 70 65 72  or} {IS NOT oper
14dd0 61 74 6f 72 7d 0a 0a 68 64 5f 70 75 74 73 20 22  ator}..hd_puts "
14de0 3c 70 3e 5e 54 68 65 20 5b 4f 70 65 72 61 74 6f  <p>^The [Operato
14df0 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65 72 61  r IS] and [Opera
14e00 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20 6f 70  tor {IS NOT}] op
14e10 65 72 61 74 6f 72 73 20 77 6f 72 6b 0a 6c 69 6b  erators work.lik
14e20 65 20 5b 4f 70 65 72 61 74 6f 72 20 3d 5d 20 61  e [Operator =] a
14e30 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 21 3d 5d  nd [Operator !=]
14e40 20 65 78 63 65 70 74 20 77 68 65 6e 20 6f 6e 65   except when one
14e50 20 6f 72 20 62 6f 74 68 20 6f 66 20 74 68 65 0a   or both of the.
14e60 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
14e70 4c 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  L. ^In this case
14e80 2c 20 69 66 20 62 6f 74 68 20 6f 70 65 72 61 6e  , if both operan
14e90 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 74 68 65  ds are NULL, the
14ea0 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61 74 6f  n the.IS operato
14eb0 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31  r evaluates to 1
14ec0 20 28 74 72 75 65 29 20 61 6e 64 20 74 68 65 20   (true) and the 
14ed0 49 53 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 20  IS NOT operator 
14ee0 65 76 61 6c 75 61 74 65 73 0a 74 6f 20 30 20 28  evaluates.to 0 (
14ef0 66 61 6c 73 65 29 2e 20 5e 49 66 20 6f 6e 65 20  false). ^If one 
14f00 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
14f10 61 6e 64 20 74 68 65 20 6f 74 68 65 72 20 69 73  and the other is
14f20 20 6e 6f 74 2c 20 74 68 65 6e 20 74 68 65 0a 49   not, then the.I
14f30 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  S operator evalu
14f40 61 74 65 73 20 74 6f 20 30 20 28 66 61 6c 73 65  ates to 0 (false
14f50 29 20 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54  ) and the IS NOT
14f60 20 6f 70 65 72 61 74 6f 72 20 69 73 20 31 20 28   operator is 1 (
14f70 74 72 75 65 29 2e 0a 5e 49 74 20 69 73 20 6e 6f  true)..^It is no
14f80 74 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61  t possible for a
14f90 6e 20 49 53 20 6f 72 20 49 53 20 4e 4f 54 20 65  n IS or IS NOT e
14fa0 78 70 72 65 73 73 69 6f 6e 20 74 6f 20 65 76 61  xpression to eva
14fb0 6c 75 61 74 65 20 74 6f 20 4e 55 4c 4c 2e 0a 5e  luate to NULL..^
14fc0 4f 70 65 72 61 74 6f 72 73 20 5b 4f 70 65 72 61  Operators [Opera
14fd0 74 6f 72 20 49 53 5d 20 61 6e 64 20 5b 4f 70 65  tor IS] and [Ope
14fe0 72 61 74 6f 72 20 7b 49 53 20 4e 4f 54 7d 5d 20  rator {IS NOT}] 
14ff0 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 0a 70  have the same .p
15000 72 65 63 65 64 65 6e 63 65 20 61 73 20 5b 4f 70  recedence as [Op
15010 65 72 61 74 6f 72 20 3d 5d 2e 22 0a 0a 3c 74 63  erator =]."..<tc
15020 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69  l>hd_fragment li
15030 74 76 61 6c 75 65 20 7b 6c 69 74 65 72 61 6c 20  tvalue {literal 
15040 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  value}</tcl>.<h3
15050 3e 4c 69 74 65 72 61 6c 20 56 61 6c 75 65 73 20  >Literal Values 
15060 28 43 6f 6e 73 74 61 6e 74 73 29 3c 2f 68 33 3e  (Constants)</h3>
15070 0a 3c 70 3e 0a 41 20 6c 69 74 65 72 61 6c 20 76  .<p>.A literal v
15080 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20  alue represents 
15090 61 20 63 6f 6e 73 74 61 6e 74 2e 0a 5e 4c 69 74  a constant..^Lit
150a0 65 72 61 6c 20 76 61 6c 75 65 73 20 6d 61 79 20  eral values may 
150b0 62 65 20 69 6e 74 65 67 65 72 73 2c 20 66 6c 6f  be integers, flo
150c0 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
150d0 65 72 73 2c 20 73 74 72 69 6e 67 73 2c 0a 42 4c  ers, strings,.BL
150e0 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 0a 3c  OBs, or NULLs..<
150f0 70 3e 0a 54 68 65 20 73 79 6e 74 61 78 20 66 6f  p>.The syntax fo
15100 72 20 69 6e 74 65 67 65 72 20 61 6e 64 20 66 6c  r integer and fl
15110 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74  oating point lit
15120 65 72 61 6c 73 20 28 63 6f 6c 6c 65 63 74 69 76  erals (collectiv
15130 65 6c 79 0a 22 6e 75 6d 65 72 69 63 20 6c 69 74  ely."numeric lit
15140 65 72 61 6c 73 22 29 20 69 73 20 73 68 6f 77 6e  erals") is shown
15150 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   by the followin
15160 67 20 64 69 61 67 72 61 6d 3a 3c 2f 70 3e 0a 0a  g diagram:</p>..
15170 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72  <tcl>BubbleDiagr
15180 61 6d 20 6e 75 6d 65 72 69 63 2d 6c 69 74 65 72  am numeric-liter
15190 61 6c 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 5e 28  al</tcl>..<p>.^(
151a0 49 66 20 61 20 6e 75 6d 65 72 69 63 20 6c 69 74  If a numeric lit
151b0 65 72 61 6c 20 68 61 73 20 61 20 64 65 63 69 6d  eral has a decim
151c0 61 6c 20 70 6f 69 6e 74 20 6f 72 20 61 6e 20 65  al point or an e
151d0 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 0a 63 6c  xponentiation.cl
151e0 61 75 73 65 20 6f 72 20 69 66 20 69 74 73 20 6d  ause or if its m
151f0 61 67 6e 69 74 75 64 65 20 69 73 20 6c 65 73 73  agnitude is less
15200 20 74 68 61 6e 20 2d 39 32 32 33 33 37 32 30 33   than -922337203
15210 36 38 35 34 37 37 35 38 30 38 20 6f 72 0a 67 72  6854775808 or.gr
15220 65 61 74 65 72 20 74 68 61 6e 20 39 32 32 33 33  eater than 92233
15230 37 32 30 33 36 38 35 34 37 37 35 38 30 37 2c 20  72036854775807, 
15240 74 68 65 6e 20 69 74 20 69 73 20 61 20 66 6c 6f  then it is a flo
15250 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65  ating point lite
15260 72 61 6c 2e 0a 4f 74 68 65 72 77 69 73 65 20 69  ral..Otherwise i
15270 73 20 69 74 20 69 73 20 61 6e 20 20 69 6e 74 65  s it is an  inte
15280 67 65 72 20 6c 69 74 65 72 61 6c 2e 29 5e 0a 5e  ger literal.)^.^
15290 54 68 65 20 22 45 22 20 63 68 61 72 61 63 74 65  The "E" characte
152a0 72 20 74 68 61 74 20 62 65 67 69 6e 73 20 74 68  r that begins th
152b0 65 20 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e  e exponentiation
152c0 0a 63 6c 61 75 73 65 20 6f 66 20 61 20 66 6c 6f  .clause of a flo
152d0 61 74 69 6e 67 20 70 6f 69 6e 74 20 6c 69 74 65  ating point lite
152e0 72 61 6c 20 63 61 6e 20 62 65 20 65 69 74 68 65  ral can be eithe
152f0 72 20 75 70 70 65 72 20 6f 72 20 6c 6f 77 65 72  r upper or lower
15300 20 63 61 73 65 2e 0a 5e 28 54 68 65 20 22 2e 22   case..^(The "."
15310 20 63 68 61 72 61 63 74 65 72 20 69 73 20 61 6c   character is al
15320 77 61 79 73 20 75 73 65 64 20 0a 61 73 20 74 68  ways used .as th
15330 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20  e decimal point 
15340 65 76 65 6e 20 69 66 20 74 68 65 20 6c 6f 63 61  even if the loca
15350 6c 65 20 73 65 74 74 69 6e 67 20 73 70 65 63 69  le setting speci
15360 66 69 65 73 20 22 2c 22 20 66 6f 72 0a 74 68 69  fies "," for.thi
15370 73 20 72 6f 6c 65 20 2d 20 74 68 65 20 75 73 65  s role - the use
15380 20 6f 66 20 22 2c 22 20 66 6f 72 20 74 68 65 20   of "," for the 
15390 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 20 77 6f  decimal point wo
153a0 75 6c 64 20 72 65 73 75 6c 74 20 69 6e 0a 73 79  uld result in.sy
153b0 6e 74 61 63 74 69 63 20 61 6d 62 69 67 75 69 74  ntactic ambiguit
153c0 79 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  y.)^..<tcl>hd_fr
153d0 61 67 6d 65 6e 74 20 68 65 78 69 6e 74 20 7b 68  agment hexint {h
153e0 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67  exadecimal integ
153f0 65 72 20 6c 69 74 65 72 61 6c 73 7d 20 7b 68 65  er literals} {he
15400 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
15410 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 48 65  rs}</tcl>.<p>^He
15420 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
15430 72 20 6c 69 74 65 72 61 6c 73 20 66 6f 6c 6c 6f  r literals follo
15440 77 20 74 68 65 20 43 2d 6c 61 6e 67 75 61 67 65  w the C-language
15450 20 6e 6f 74 61 74 69 6f 6e 20 6f 66 0a 22 30 78   notation of."0x
15460 22 20 6f 72 20 22 30 58 22 20 66 6f 6c 6c 6f 77  " or "0X" follow
15470 65 64 20 62 79 20 68 65 78 61 64 65 63 69 6d 61  ed by hexadecima
15480 6c 20 64 69 67 69 74 73 2e 0a 5e 46 6f 72 20 65  l digits..^For e
15490 78 61 6d 70 6c 65 2c 20 30 78 31 32 33 34 20 6d  xample, 0x1234 m
154a0 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73  eans the same as
154b0 20 34 36 36 30 0a 61 6e 64 20 30 78 38 30 30 30   4660.and 0x8000
154c0 30 30 30 30 30 30 30 30 30 30 30 30 20 6d 65 61  000000000000 mea
154d0 6e 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 2d  ns the same as -
154e0 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
154f0 38 30 38 2e 0a 20 5e 28 48 65 78 61 64 65 63 69  808.. ^(Hexadeci
15500 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69 74 65  mal integer lite
15510 72 61 6c 73 20 61 72 65 20 69 6e 74 65 72 70 72  rals are interpr
15520 65 74 65 64 20 61 73 20 36 34 2d 62 69 74 0a 74  eted as 64-bit.t
15530 77 6f 27 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  wo's-complement 
15540 69 6e 74 65 67 65 72 73 20 61 6e 64 20 61 72 65  integers and are
15550 20 74 68 75 73 20 6c 69 6d 69 74 65 64 0a 74 6f   thus limited.to
15560 20 73 69 78 74 65 65 6e 20 73 69 67 6e 69 66 69   sixteen signifi
15570 63 61 6e 74 20 64 69 67 69 74 73 20 6f 66 20 70  cant digits of p
15580 72 65 63 69 73 69 6f 6e 2e 29 5e 0a 53 75 70 70  recision.)^.Supp
15590 6f 72 74 20 66 6f 72 20 68 65 78 61 64 65 63 69  ort for hexadeci
155a0 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77 61 73  mal integers was
155b0 20 61 64 64 65 64 20 74 6f 20 53 51 4c 69 74 65   added to SQLite
155c0 0a 76 65 72 73 69 6f 6e 20 33 2e 38 2e 36 20 28  .version 3.8.6 (
155d0 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 36 5d 29 2e  [dateof:3.8.6]).
155e0 0a 5e 46 6f 72 20 62 61 63 6b 77 61 72 64 73 20  .^For backwards 
155f0 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20 74  compatibility, t
15600 68 65 20 22 30 78 22 20 68 65 78 61 64 65 63 69  he "0x" hexadeci
15610 6d 61 6c 20 69 6e 74 65 67 65 72 0a 6e 6f 74 61  mal integer.nota
15620 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 6e 64  tion is only und
15630 65 72 73 74 6f 6f 64 20 62 79 20 74 68 65 20 53  erstood by the S
15640 51 4c 20 6c 61 6e 67 75 61 67 65 20 70 61 72 73  QL language pars
15650 65 72 2c 20 6e 6f 74 20 62 79 20 74 68 65 0a 74  er, not by the.t
15660 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ype conversions 
15670 72 6f 75 74 69 6e 65 73 2e 0a 5e 28 53 74 72 69  routines..^(Stri
15680 6e 67 20 76 61 72 69 61 62 6c 65 73 20 74 68 61  ng variables tha
15690 74 0a 63 6f 6e 74 61 69 6e 20 74 65 78 74 20 66  t.contain text f
156a0 6f 72 6d 61 74 74 65 64 20 6c 69 6b 65 20 68 65  ormatted like he
156b0 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65 67 65  xadecimal intege
156c0 72 73 20 61 72 65 20 6e 6f 74 0a 69 6e 74 65 72  rs are not.inter
156d0 70 72 65 74 65 64 20 61 73 20 68 65 78 61 64 65  preted as hexade
156e0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 73 20 77  cimal integers w
156f0 68 65 6e 20 63 6f 65 72 63 69 6e 67 20 74 68 65  hen coercing the
15700 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0a 69 6e   string value.in
15710 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 64 75  to an integer du
15720 65 20 74 6f 20 61 20 5b 43 41 53 54 20 65 78 70  e to a [CAST exp
15730 72 65 73 73 69 6f 6e 5d 20 6f 72 20 66 6f 72 20  ression] or for 
15740 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  a [column affini
15750 74 79 5d 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69  ty].transformati
15760 6f 6e 20 6f 72 20 70 72 69 6f 72 20 74 6f 20 70  on or prior to p
15770 65 72 66 6f 72 6d 69 6e 67 20 61 20 6e 75 6d 65  erforming a nume
15780 72 69 63 20 6f 70 65 72 61 74 69 6f 6e 20 6f 72  ric operation or
15790 20 66 6f 72 0a 61 6e 79 20 6f 74 68 65 72 20 72   for.any other r
157a0 75 6e 2d 74 69 6d 65 20 63 6f 6e 76 65 72 73 69  un-time conversi
157b0 6f 6e 73 2e 29 5e 20 20 5e 28 57 68 65 6e 20 63  ons.)^  ^(When c
157c0 6f 65 72 63 69 6e 67 20 61 0a 73 74 72 69 6e 67  oercing a.string
157d0 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66 6f   value in the fo
157e0 72 6d 61 74 20 6f 66 20 61 20 68 65 78 61 64 65  rmat of a hexade
157f0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 69 6e  cimal integer in
15800 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 76 61  to an integer.va
15810 6c 75 65 2c 20 74 68 65 20 63 6f 6e 76 65 72 73  lue, the convers
15820 69 6f 6e 20 70 72 6f 63 65 73 73 20 73 74 6f 70  ion process stop
15830 73 20 77 68 65 6e 20 74 68 65 20 27 78 27 20 63  s when the 'x' c
15840 68 61 72 61 63 74 65 72 20 69 73 20 73 65 65 6e  haracter is seen
15850 0a 73 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e  .so the resultin
15860 67 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  g integer value 
15870 69 73 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e 29  is always zero.)
15880 5e 0a 5e 28 53 51 4c 69 74 65 20 6f 6e 6c 79 20  ^.^(SQLite only 
15890 75 6e 64 65 72 73 74 61 6e 64 73 20 74 68 65 20  understands the 
158a0 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
158b0 67 65 72 20 6e 6f 74 61 74 69 6f 6e 20 77 68 65  ger notation whe
158c0 6e 20 69 74 0a 61 70 70 65 61 72 73 20 69 6e 20  n it.appears in 
158d0 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
158e0 74 20 74 65 78 74 2c 20 6e 6f 74 20 77 68 65 6e  t text, not when
158f0 20 69 74 20 61 70 70 65 61 72 73 20 61 73 0a 70   it appears as.p
15900 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  art of the conte
15910 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  nt of the databa
15920 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 41 20 73 74  se.)^..<p> ^A st
15930 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 20 69 73  ring constant is
15940 20 66 6f 72 6d 65 64 20 62 79 20 65 6e 63 6c 6f   formed by enclo
15950 73 69 6e 67 20 74 68 65 0a 73 74 72 69 6e 67 20  sing the.string 
15960 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73  in single quotes
15970 20 28 27 29 2e 20 20 5e 41 20 73 69 6e 67 6c 65   (').  ^A single
15980 20 71 75 6f 74 65 20 77 69 74 68 69 6e 20 74 68   quote within th
15990 65 20 73 74 72 69 6e 67 20 63 61 6e 0a 62 65 20  e string can.be 
159a0 65 6e 63 6f 64 65 64 20 62 79 20 70 75 74 74 69  encoded by putti
159b0 6e 67 20 74 77 6f 20 73 69 6e 67 6c 65 20 71 75  ng two single qu
159c0 6f 74 65 73 20 69 6e 20 61 20 72 6f 77 20 2d 20  otes in a row - 
159d0 61 73 20 69 6e 20 50 61 73 63 61 6c 2e 0a 43 2d  as in Pascal..C-
159e0 73 74 79 6c 65 20 65 73 63 61 70 65 73 20 75 73  style escapes us
159f0 69 6e 67 20 74 68 65 20 62 61 63 6b 73 6c 61 73  ing the backslas
15a00 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65 20  h character are 
15a10 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 62 65  not supported be
15a20 63 61 75 73 65 0a 74 68 65 79 20 61 72 65 20 6e  cause.they are n
15a30 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  ot standard SQL.
15a40 0a 0a 3c 70 3e 20 5e 42 4c 4f 42 20 6c 69 74 65  ..<p> ^BLOB lite
15a50 72 61 6c 73 20 61 72 65 20 73 74 72 69 6e 67 20  rals are string 
15a60 6c 69 74 65 72 61 6c 73 20 63 6f 6e 74 61 69 6e  literals contain
15a70 69 6e 67 20 68 65 78 61 64 65 63 69 6d 61 6c 20  ing hexadecimal 
15a80 64 61 74 61 20 61 6e 64 0a 70 72 65 63 65 64 65  data and.precede
15a90 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 22 78  d by a single "x
15aa0 22 20 6f 72 20 22 58 22 20 63 68 61 72 61 63 74  " or "X" charact
15ab0 65 72 2e 20 20 5e 28 45 78 61 6d 70 6c 65 3a 20  er.  ^(Example: 
15ac0 58 27 35 33 35 31 34 43 36 39 37 34 36 35 27 29  X'53514C697465')
15ad0 5e 0a 0a 3c 70 3e 0a 5e 41 20 6c 69 74 65 72 61  ^..<p>.^A litera
15ae0 6c 20 76 61 6c 75 65 20 63 61 6e 20 61 6c 73 6f  l value can also
15af0 20 62 65 20 74 68 65 20 74 6f 6b 65 6e 20 22 4e   be the token "N
15b00 55 4c 4c 22 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c  ULL"..</p>..<tcl
15b10 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72  >hd_fragment var
15b20 70 61 72 61 6d 20 70 61 72 61 6d 65 74 65 72 20  param parameter 
15b30 70 61 72 61 6d 65 74 65 72 73 20 7b 62 6f 75 6e  parameters {boun
15b40 64 20 70 61 72 61 6d 65 74 65 72 7d 20 7b 62 6f  d parameter} {bo
15b50 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 7d 3c  und parameters}<
15b60 2f 74 63 6c 3e 0a 3c 68 33 3e 50 61 72 61 6d 65  /tcl>.<h3>Parame
15b70 74 65 72 73 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20  ters</h3>.<p>.A 
15b80 22 76 61 72 69 61 62 6c 65 22 20 6f 72 20 22 70  "variable" or "p
15b90 61 72 61 6d 65 74 65 72 22 20 74 6f 6b 65 6e 0a  arameter" token.
15ba0 73 70 65 63 69 66 69 65 73 20 61 20 70 6c 61 63  specifies a plac
15bb0 65 68 6f 6c 64 65 72 20 69 6e 20 74 68 65 20 65  eholder in the e
15bc0 78 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 61 20  xpression for a 
15bd0 0a 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 66  .value that is f
15be0 69 6c 6c 65 64 20 69 6e 20 61 74 20 72 75 6e 74  illed in at runt
15bf0 69 6d 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 73  ime using the.[s
15c00 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
15c10 28 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e  () | sqlite3_bin
15c20 64 28 29 5d 20 66 61 6d 69 6c 79 20 6f 66 20 43  d()] family of C
15c30 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 73 2e  /C++ interfaces.
15c40 0a 50 61 72 61 6d 65 74 65 72 73 20 63 61 6e 20  .Parameters can 
15c50 74 61 6b 65 20 73 65 76 65 72 61 6c 20 66 6f 72  take several for
15c60 6d 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ms:.</p>..<block
15c70 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a 3c  quote>.<table>.<
15c80 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72  tr>.<td align="r
15c90 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f  ight" valign="to
15ca0 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c 69 3e 4e 4e  p"><b>?</b><i>NN
15cb0 4e 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69  N</i></td><td wi
15cc0 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c  dth="20"></td>.<
15cd0 74 64 3e 5e 28 41 20 71 75 65 73 74 69 6f 6e 20  td>^(A question 
15ce0 6d 61 72 6b 20 66 6f 6c 6c 6f 77 65 64 20 62 79  mark followed by
15cf0 20 61 20 6e 75 6d 62 65 72 20 3c 69 3e 4e 4e 4e   a number <i>NNN
15d00 3c 2f 69 3e 20 68 6f 6c 64 73 20 61 20 73 70 6f  </i> holds a spo
15d10 74 20 66 6f 72 20 74 68 65 0a 4e 4e 4e 2d 74 68  t for the.NNN-th
15d20 20 70 61 72 61 6d 65 74 65 72 2e 20 20 4e 4e 4e   parameter.  NNN
15d30 20 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e   must be between
15d40 20 31 20 61 6e 64 20 5b 53 51 4c 49 54 45 5f 4d   1 and [SQLITE_M
15d50 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
15d60 45 52 5d 2e 29 5e 0a 3c 2f 74 64 3e 0a 3c 2f 74  ER].)^.</td>.</t
15d70 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
15d80 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
15d90 3d 22 74 6f 70 22 3e 3c 62 3e 3f 3c 2f 62 3e 3c  ="top"><b>?</b><
15da0 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32  /td><td width="2
15db0 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41 20  0"></td>.<td>^A 
15dc0 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 74 68  question mark th
15dd0 61 74 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  at is not follow
15de0 65 64 20 62 79 20 61 20 6e 75 6d 62 65 72 20 63  ed by a number c
15df0 72 65 61 74 65 73 20 61 20 70 61 72 61 6d 65 74  reates a paramet
15e00 65 72 0a 77 69 74 68 20 61 20 6e 75 6d 62 65 72  er.with a number
15e10 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74 68 61   one greater tha
15e20 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 61  n the largest pa
15e30 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 61  rameter number a
15e40 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65 64 2e  lready assigned.
15e50 0a 5e 49 66 20 74 68 69 73 20 6d 65 61 6e 73 20  .^If this means 
15e60 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 6e 75  the parameter nu
15e70 6d 62 65 72 20 69 73 20 67 72 65 61 74 65 72 20  mber is greater 
15e80 74 68 61 6e 0a 5b 53 51 4c 49 54 45 5f 4d 41 58  than.[SQLITE_MAX
15e90 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
15ea0 5d 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  ], it is an erro
15eb0 72 2e 0a 54 68 69 73 20 70 61 72 61 6d 65 74 65  r..This paramete
15ec0 72 20 66 6f 72 6d 61 74 20 69 73 20 70 72 6f 76  r format is prov
15ed0 69 64 65 64 20 66 6f 72 20 63 6f 6d 70 61 74 69  ided for compati
15ee0 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68 65  bility with othe
15ef0 72 20 64 61 74 61 62 61 73 65 0a 65 6e 67 69 6e  r database.engin
15f00 65 73 2e 20 20 42 75 74 20 62 65 63 61 75 73 65  es.  But because
15f10 20 69 74 20 69 73 20 65 61 73 79 20 74 6f 20 6d   it is easy to m
15f20 69 73 63 6f 75 6e 74 20 74 68 65 20 71 75 65 73  iscount the ques
15f30 74 69 6f 6e 20 6d 61 72 6b 73 2c 20 74 68 65 0a  tion marks, the.
15f40 75 73 65 20 6f 66 20 74 68 69 73 20 70 61 72 61  use of this para
15f50 6d 65 74 65 72 20 66 6f 72 6d 61 74 20 69 73 20  meter format is 
15f60 64 69 73 63 6f 75 72 61 67 65 64 2e 20 20 50 72  discouraged.  Pr
15f70 6f 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e  ogrammers are en
15f80 63 6f 75 72 61 67 65 64 0a 74 6f 20 75 73 65 20  couraged.to use 
15f90 6f 6e 65 20 6f 66 20 74 68 65 20 73 79 6d 62 6f  one of the symbo
15fa0 6c 69 63 20 66 6f 72 6d 61 74 73 20 62 65 6c 6f  lic formats belo
15fb0 77 20 6f 72 20 74 68 65 20 3f 4e 4e 4e 20 66 6f  w or the ?NNN fo
15fc0 72 6d 61 74 20 61 62 6f 76 65 20 69 6e 73 74 65  rmat above inste
15fd0 61 64 2e 0a 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ad..</td>.</tr>.
15fe0 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  <tr>.<td align="
15ff0 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22 74  right" valign="t
16000 6f 70 22 3e 3c 62 3e 3a 3c 2f 62 3e 3c 69 3e 41  op"><b>:</b><i>A
16010 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20  AAA</i></td><td 
16020 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e  width="20"></td>
16030 0a 3c 74 64 3e 5e 41 20 63 6f 6c 6f 6e 20 66 6f  .<td>^A colon fo
16040 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69 64 65  llowed by an ide
16050 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 68 6f 6c  ntifier name hol
16060 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20  ds a spot for a 
16070 0a 5b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  .[sqlite3_bind_p
16080 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 7c 6e 61  arameter_name|na
16090 6d 65 64 20 70 61 72 61 6d 65 74 65 72 5d 20 77  med parameter] w
160a0 69 74 68 20 74 68 65 20 6e 61 6d 65 20 3a 41 41  ith the name :AA
160b0 41 41 2e 20 20 0a 5e 28 4e 61 6d 65 64 20 70 61  AA.  .^(Named pa
160c0 72 61 6d 65 74 65 72 73 20 61 72 65 20 61 6c 73  rameters are als
160d0 6f 20 6e 75 6d 62 65 72 65 64 2e 20 54 68 65 20  o numbered. The 
160e0 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20  number assigned 
160f0 69 73 20 6f 6e 65 20 67 72 65 61 74 65 72 20 74  is one greater t
16100 68 61 6e 0a 74 68 65 20 6c 61 72 67 65 73 74 20  han.the largest 
16110 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
16120 20 61 6c 72 65 61 64 79 20 61 73 73 69 67 6e 65   already assigne
16130 64 2e 29 5e 20 5e 49 66 20 74 68 69 73 20 6d 65  d.)^ ^If this me
16140 61 6e 73 20 74 68 65 20 70 61 72 61 6d 65 74 65  ans the paramete
16150 72 0a 77 6f 75 6c 64 20 62 65 20 61 73 73 69 67  r.would be assig
16160 6e 65 64 20 61 20 6e 75 6d 62 65 72 20 67 72 65  ned a number gre
16170 61 74 65 72 20 74 68 61 6e 20 5b 53 51 4c 49 54  ater than [SQLIT
16180 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
16190 55 4d 42 45 52 5d 2c 20 69 74 20 69 73 0a 61 6e  UMBER], it is.an
161a0 20 65 72 72 6f 72 2e 20 54 6f 20 61 76 6f 69 64   error. To avoid
161b0 20 63 6f 6e 66 75 73 69 6f 6e 2c 20 69 74 20 69   confusion, it i
161c0 73 20 62 65 73 74 20 74 6f 20 61 76 6f 69 64 20  s best to avoid 
161d0 6d 69 78 69 6e 67 20 6e 61 6d 65 64 20 61 6e 64  mixing named and
161e0 20 6e 75 6d 62 65 72 65 64 0a 70 61 72 61 6d 65   numbered.parame
161f0 74 65 72 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ters.</td>.</tr>
16200 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d  .<tr>.<td align=
16210 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e 3d 22  "right" valign="
16220 74 6f 70 22 3e 3c 62 3e 40 3c 2f 62 3e 3c 69 3e  top"><b>@</b><i>
16230 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c 74 64  AAAA</i></td><td
16240 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
16250 3e 0a 3c 74 64 3e 5e 41 6e 20 22 61 74 22 20 73  >.<td>^An "at" s
16260 69 67 6e 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  ign works exactl
16270 79 20 6c 69 6b 65 20 61 20 63 6f 6c 6f 6e 2c 20  y like a colon, 
16280 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
16290 6e 61 6d 65 20 6f 66 0a 74 68 65 20 70 61 72 61  name of.the para
162a0 6d 65 74 65 72 20 63 72 65 61 74 65 64 20 69 73  meter created is
162b0 20 40 41 41 41 41 2e 3c 2f 74 64 3e 0a 3c 2f 74   @AAAA.</td>.</t
162c0 72 3e 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  r>.<tr>.<td alig
162d0 6e 3d 22 72 69 67 68 74 22 20 76 61 6c 69 67 6e  n="right" valign
162e0 3d 22 74 6f 70 22 3e 3c 62 3e 24 3c 2f 62 3e 3c  ="top"><b>$</b><
162f0 69 3e 41 41 41 41 3c 2f 69 3e 3c 2f 74 64 3e 3c  i>AAAA</i></td><
16300 74 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f  td width="20"></
16310 74 64 3e 0a 3c 74 64 3e 5e 41 20 64 6f 6c 6c 61  td>.<td>^A dolla
16320 72 2d 73 69 67 6e 20 66 6f 6c 6c 6f 77 65 64 20  r-sign followed 
16330 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  by an identifier
16340 20 6e 61 6d 65 20 61 6c 73 6f 20 68 6f 6c 64 73   name also holds
16350 20 61 20 73 70 6f 74 20 66 6f 72 20 61 20 6e 61   a spot for a na
16360 6d 65 64 0a 70 61 72 61 6d 65 74 65 72 20 77 69  med.parameter wi
16370 74 68 20 74 68 65 20 6e 61 6d 65 20 24 41 41 41  th the name $AAA
16380 41 2e 20 20 5e 28 54 68 65 20 69 64 65 6e 74 69  A.  ^(The identi
16390 66 69 65 72 20 6e 61 6d 65 20 69 6e 20 74 68 69  fier name in thi
163a0 73 20 63 61 73 65 20 63 61 6e 20 69 6e 63 6c 75  s case can inclu
163b0 64 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  de.one or more o
163c0 63 63 75 72 72 65 6e 63 65 73 20 6f 66 20 22 3a  ccurrences of ":
163d0 3a 22 20 61 6e 64 20 61 20 73 75 66 66 69 78 20  :" and a suffix 
163e0 65 6e 63 6c 6f 73 65 64 20 69 6e 20 22 28 2e 2e  enclosed in "(..
163f0 2e 29 22 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 61  .)" containing.a
16400 6e 79 20 74 65 78 74 20 61 74 20 61 6c 6c 2e 29  ny text at all.)
16410 5e 20 20 54 68 69 73 20 73 79 6e 74 61 78 20 69  ^  This syntax i
16420 73 20 74 68 65 20 66 6f 72 6d 20 6f 66 20 61 20  s the form of a 
16430 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 69 6e  variable name in
16440 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77   the.[http://www
16450 2e 74 63 6c 2d 6c 61 6e 67 2e 6f 72 67 2f 20 7c  .tcl-lang.org/ |
16460 20 54 63 6c 20 70 72 6f 67 72 61 6d 6d 69 6e 67   Tcl programming
16470 20 6c 61 6e 67 75 61 67 65 5d 2e 20 20 54 68 65   language].  The
16480 20 70 72 65 73 65 6e 63 65 0a 6f 66 20 74 68 69   presence.of thi
16490 73 20 73 79 6e 74 61 78 20 72 65 73 75 6c 74 73  s syntax results
164a0 20 66 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74   from the fact t
164b0 68 61 74 20 53 51 4c 69 74 65 20 69 73 20 72 65  hat SQLite is re
164c0 61 6c 6c 79 20 61 20 0a 5b 54 63 6c 20 65 78 74  ally a .[Tcl ext
164d0 65 6e 73 69 6f 6e 5d 20 74 68 61 74 20 68 61 73  ension] that has
164e0 20 65 73 63 61 70 65 64 20 69 6e 74 6f 20 74 68   escaped into th
164f0 65 20 77 69 6c 64 2e 3c 2f 74 64 3e 0a 3c 2f 74  e wild.</td>.</t
16500 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c  r>.</table>.</bl
16510 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 50  ockquote>..<p>^P
16520 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 61  arameters that a
16530 72 65 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20  re not assigned 
16540 76 61 6c 75 65 73 20 75 73 69 6e 67 0a 5b 73 71  values using.[sq
16550 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28  lite3_bind_blob(
16560 29 20 7c 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  ) | sqlite3_bind
16570 28 29 5d 20 61 72 65 20 74 72 65 61 74 65 64 0a  ()] are treated.
16580 61 73 20 4e 55 4c 4c 2e 20 20 54 68 65 20 5b 73  as NULL.  The [s
16590 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
165a0 6d 65 74 65 72 5f 69 6e 64 65 78 28 29 5d 20 69  meter_index()] i
165b0 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62 65 20  nterface can be 
165c0 75 73 65 64 0a 74 6f 20 74 72 61 6e 73 6c 61 74  used.to translat
165d0 65 20 61 20 73 79 6d 62 6f 6c 69 63 20 70 61 72  e a symbolic par
165e0 61 6d 65 74 65 72 20 6e 61 6d 65 20 69 6e 74 6f  ameter name into
165f0 20 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20   its equivalent 
16600 6e 75 6d 65 72 69 63 20 69 6e 64 65 78 2e 3c 2f  numeric index.</
16610 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69  p>..<p>^The maxi
16620 6d 75 6d 20 70 61 72 61 6d 65 74 65 72 20 6e 75  mum parameter nu
16630 6d 62 65 72 20 69 73 20 73 65 74 20 61 74 20 63  mber is set at c
16640 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 62 79 0a 74  ompile-time by.t
16650 68 65 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56  he [SQLITE_MAX_V
16660 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 20  ARIABLE_NUMBER] 
16670 6d 61 63 72 6f 2e 20 20 5e 28 41 6e 20 69 6e 64  macro.  ^(An ind
16680 69 76 69 64 75 61 6c 20 5b 64 61 74 61 62 61 73  ividual [databas
16690 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 44 20  e connection].D 
166a0 63 61 6e 20 72 65 64 75 63 65 20 69 74 73 20 6d  can reduce its m
166b0 61 78 69 6d 75 6d 20 70 61 72 61 6d 65 74 65 72  aximum parameter
166c0 20 6e 75 6d 62 65 72 20 62 65 6c 6f 77 20 74 68   number below th
166d0 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6d  e compile-time m
166e0 61 78 69 6d 75 6d 0a 75 73 69 6e 67 20 74 68 65  aximum.using the
166f0 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 5d   [sqlite3_limit]
16700 28 44 2c 20 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  (D, [SQLITE_LIMI
16710 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  T_VARIABLE_NUMBE
16720 52 5d 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63  R],...) interfac
16730 65 2e 29 5e 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  e.)^.</p>..<tcl>
16740 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 69 6b 65  hd_fragment like
16750 20 4c 49 4b 45 20 45 53 43 41 50 45 3c 2f 74 63   LIKE ESCAPE</tc
16760 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c 49 4b 45 2c  l>.<h3>The LIKE,
16770 20 47 4c 4f 42 2c 20 52 45 47 45 58 50 2c 20 61   GLOB, REGEXP, a
16780 6e 64 20 4d 41 54 43 48 20 6f 70 65 72 61 74 6f  nd MATCH operato
16790 72 73 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20  rs</h3>.<p>^The 
167a0 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 64 6f  LIKE operator do
167b0 65 73 20 61 20 70 61 74 74 65 72 6e 20 6d 61 74  es a pattern mat
167c0 63 68 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e  ching comparison
167d0 2e 20 5e 54 68 65 20 6f 70 65 72 61 6e 64 0a 74  . ^The operand.t
167e0 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74  o the right of t
167f0 68 65 20 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72  he LIKE operator
16800 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 70 61   contains the pa
16810 74 74 65 72 6e 20 61 6e 64 20 74 68 65 20 6c 65  ttern and the le
16820 66 74 20 68 61 6e 64 0a 6f 70 65 72 61 6e 64 20  ft hand.operand 
16830 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 73 74 72  contains the str
16840 69 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61  ing to match aga
16850 69 6e 73 74 20 74 68 65 20 70 61 74 74 65 72 6e  inst the pattern
16860 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  ...<tcl>hd_puts 
16870 22 5e 41 20 70 65 72 63 65 6e 74 20 73 79 6d 62  "^A percent symb
16880 6f 6c 20 28 5c 22 25 5c 22 29 20 69 6e 20 74 68  ol (\"%\") in th
16890 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 20 6d  e LIKE pattern m
168a0 61 74 63 68 65 73 20 61 6e 79 0a 73 65 71 75 65  atches any.seque
168b0 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d  nce of zero or m
168c0 6f 72 65 20 63 68 61 72 61 63 74 65 72 73 20 69  ore characters i
168d0 6e 20 74 68 65 20 73 74 72 69 6e 67 2e 20 20 5e  n the string.  ^
168e0 41 6e 20 75 6e 64 65 72 73 63 6f 72 65 0a 28 5c  An underscore.(\
168f0 22 5f 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b  "_\") in the LIK
16900 45 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65  E pattern matche
16910 73 20 61 6e 79 20 73 69 6e 67 6c 65 20 63 68 61  s any single cha
16920 72 61 63 74 65 72 20 69 6e 20 74 68 65 0a 73 74  racter in the.st
16930 72 69 6e 67 2e 20 20 5e 28 41 6e 79 20 6f 74 68  ring.  ^(Any oth
16940 65 72 20 63 68 61 72 61 63 74 65 72 20 6d 61 74  er character mat
16950 63 68 65 73 20 69 74 73 65 6c 66 20 6f 72 20 69  ches itself or i
16960 74 73 20 6c 6f 77 65 72 2f 75 70 70 65 72 20 63  ts lower/upper c
16970 61 73 65 0a 65 71 75 69 76 61 6c 65 6e 74 20 28  ase.equivalent (
16980 69 2e 65 2e 20 63 61 73 65 2d 69 6e 73 65 6e 73  i.e. case-insens
16990 69 74 69 76 65 20 6d 61 74 63 68 69 6e 67 29 2e  itive matching).
169a0 29 5e 0a 0a 3c 75 3e 49 6d 70 6f 72 74 61 6e 74  )^..<u>Important
169b0 20 4e 6f 74 65 3a 3c 2f 75 3e 20 5e 53 51 4c 69   Note:</u> ^SQLi
169c0 74 65 20 6f 6e 6c 79 0a 75 6e 64 65 72 73 74 61  te only.understa
169d0 6e 64 73 20 75 70 70 65 72 2f 6c 6f 77 65 72 20  nds upper/lower 
169e0 63 61 73 65 20 66 6f 72 20 41 53 43 49 49 20 63  case for ASCII c
169f0 68 61 72 61 63 74 65 72 73 20 62 79 20 64 65 66  haracters by def
16a00 61 75 6c 74 2e 20 20 5e 54 68 65 0a 4c 49 4b 45  ault.  ^The.LIKE
16a10 20 6f 70 65 72 61 74 6f 72 20 69 73 20 63 61 73   operator is cas
16a20 65 20 73 65 6e 73 69 74 69 76 65 20 62 79 20 64  e sensitive by d
16a30 65 66 61 75 6c 74 20 66 6f 72 20 75 6e 69 63 6f  efault for unico
16a40 64 65 20 63 68 61 72 61 63 74 65 72 73 20 74 68  de characters th
16a50 61 74 20 61 72 65 0a 62 65 79 6f 6e 64 20 74 68  at are.beyond th
16a60 65 20 41 53 43 49 49 20 72 61 6e 67 65 2e 20 20  e ASCII range.  
16a70 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 5e 74 68  For example,.^th
16a80 65 20 65 78 70 72 65 73 73 69 6f 6e 20 3c 62 3e  e expression <b>
16a90 27 61 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  'a'&nbsp;LIKE&nb
16aa0 73 70 3b 27 41 27 3c 2f 62 3e 0a 69 73 20 54 52  sp;'A'</b>.is TR
16ab0 55 45 20 62 75 74 20 3c 62 3e 27 26 61 65 6c 69  UE but <b>'&aeli
16ac0 67 3b 27 26 6e 62 73 70 3b 4c 49 4b 45 26 6e 62  g;'&nbsp;LIKE&nb
16ad0 73 70 3b 27 26 41 45 6c 69 67 3b 27 3c 2f 62 3e  sp;'&AElig;'</b>
16ae0 20 69 73 20 46 41 4c 53 45 2e 22 3c 2f 74 63 6c   is FALSE."</tcl
16af0 3e 0a 54 68 65 20 49 43 55 20 65 78 74 65 6e 73  >.The ICU extens
16b00 69 6f 6e 20 74 6f 20 53 51 4c 69 74 65 20 69 6e  ion to SQLite in
16b10 63 6c 75 64 65 73 20 61 6e 20 65 6e 68 61 6e 63  cludes an enhanc
16b20 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ed version of th
16b30 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20  e.LIKE operator 
16b40 74 68 61 74 20 64 6f 65 73 20 63 61 73 65 20 66  that does case f
16b50 6f 6c 64 69 6e 67 20 61 63 72 6f 73 73 20 61 6c  olding across al
16b60 6c 20 75 6e 69 63 6f 64 65 20 63 68 61 72 61 63  l unicode charac
16b70 74 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ters.</p>..<p>^I
16b80 66 20 74 68 65 20 6f 70 74 69 6f 6e 61 6c 20 45  f the optional E
16b90 53 43 41 50 45 20 63 6c 61 75 73 65 20 69 73 20  SCAPE clause is 
16ba0 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74 68  present, then th
16bb0 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 66 6f 6c  e expression.fol
16bc0 6c 6f 77 69 6e 67 20 74 68 65 20 45 53 43 41 50  lowing the ESCAP
16bd0 45 20 6b 65 79 77 6f 72 64 20 6d 75 73 74 20 65  E keyword must e
16be0 76 61 6c 75 61 74 65 20 74 6f 20 61 20 73 74 72  valuate to a str
16bf0 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f  ing consisting o
16c00 66 0a 61 20 73 69 6e 67 6c 65 20 63 68 61 72 61  f.a single chara
16c10 63 74 65 72 2e 20 5e 54 68 69 73 20 63 68 61 72  cter. ^This char
16c20 61 63 74 65 72 20 6d 61 79 20 62 65 20 75 73 65  acter may be use
16c30 64 20 69 6e 20 74 68 65 20 4c 49 4b 45 20 70 61  d in the LIKE pa
16c40 74 74 65 72 6e 0a 74 6f 20 69 6e 63 6c 75 64 65  ttern.to include
16c50 20 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74   literal percent
16c60 20 6f 72 20 75 6e 64 65 72 73 63 6f 72 65 20 63   or underscore c
16c70 68 61 72 61 63 74 65 72 73 2e 20 5e 54 68 65 20  haracters. ^The 
16c80 65 73 63 61 70 65 0a 63 68 61 72 61 63 74 65 72  escape.character
16c90 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 70   followed by a p
16ca0 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 25  ercent symbol (%
16cb0 29 2c 20 75 6e 64 65 72 73 63 6f 72 65 20 28 5f  ), underscore (_
16cc0 29 2c 20 6f 72 20 61 20 73 65 63 6f 6e 64 0a 69  ), or a second.i
16cd0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 65  nstance of the e
16ce0 73 63 61 70 65 20 63 68 61 72 61 63 74 65 72 20  scape character 
16cf0 69 74 73 65 6c 66 20 6d 61 74 63 68 65 73 20 61  itself matches a
16d00 0a 6c 69 74 65 72 61 6c 20 70 65 72 63 65 6e 74  .literal percent
16d10 20 73 79 6d 62 6f 6c 2c 20 75 6e 64 65 72 73 63   symbol, undersc
16d20 6f 72 65 2c 20 6f 72 20 61 20 73 69 6e 67 6c 65  ore, or a single
16d30 20 65 73 63 61 70 65 20 63 68 61 72 61 63 74 65   escape characte
16d40 72 2c 0a 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r,.respectively.
16d50 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 66 69 78 20  ..<p>^The infix 
16d60 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 69 73  LIKE operator is
16d70 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
16d80 63 61 6c 6c 69 6e 67 20 74 68 65 0a 61 70 70 6c  calling the.appl
16d90 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
16da0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20 5b 6c  SQL functions [l
16db0 69 6b 65 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e  ike(<i>Y</i>,<i>
16dc0 58 3c 2f 69 3e 29 5d 20 6f 72 0a 5b 6c 69 6b 65  X</i>)] or.[like
16dd0 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f  (<i>Y</i>,<i>X</
16de0 69 3e 2c 3c 69 3e 5a 3c 2f 69 3e 29 5d 3c 2f 61  i>,<i>Z</i>)]</a
16df0 3e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  >.</p>..<p>^The 
16e00 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 63 61  LIKE operator ca
16e10 6e 20 62 65 20 6d 61 64 65 20 63 61 73 65 20 73  n be made case s
16e20 65 6e 73 69 74 69 76 65 20 75 73 69 6e 67 20 74  ensitive using t
16e30 68 65 0a 5b 63 61 73 65 5f 73 65 6e 73 69 74 69  he.[case_sensiti
16e40 76 65 5f 6c 69 6b 65 20 70 72 61 67 6d 61 5d 2e  ve_like pragma].
16e50 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
16e60 61 67 6d 65 6e 74 20 67 6c 6f 62 20 47 4c 4f 42  agment glob GLOB
16e70 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 47  </tcl>.<p>^The G
16e80 4c 4f 42 20 6f 70 65 72 61 74 6f 72 20 69 73 20  LOB operator is 
16e90 73 69 6d 69 6c 61 72 20 74 6f 20 4c 49 4b 45 20  similar to LIKE 
16ea0 62 75 74 20 75 73 65 73 20 74 68 65 20 55 6e 69  but uses the Uni
16eb0 78 0a 66 69 6c 65 20 67 6c 6f 62 62 69 6e 67 20  x.file globbing 
16ec0 73 79 6e 74 61 78 20 66 6f 72 20 69 74 73 20 77  syntax for its w
16ed0 69 6c 64 63 61 72 64 73 2e 20 20 5e 41 6c 73 6f  ildcards.  ^Also
16ee0 2c 20 47 4c 4f 42 20 69 73 20 63 61 73 65 0a 73  , GLOB is case.s
16ef0 65 6e 73 69 74 69 76 65 2c 20 75 6e 6c 69 6b 65  ensitive, unlike
16f00 20 4c 49 4b 45 2e 20 20 5e 42 6f 74 68 20 47 4c   LIKE.  ^Both GL
16f10 4f 42 20 61 6e 64 20 4c 49 4b 45 20 6d 61 79 20  OB and LIKE may 
16f20 62 65 20 70 72 65 63 65 64 65 64 20 62 79 0a 74  be preceded by.t
16f30 68 65 20 4e 4f 54 20 6b 65 79 77 6f 72 64 20 74  he NOT keyword t
16f40 6f 20 69 6e 76 65 72 74 20 74 68 65 20 73 65 6e  o invert the sen
16f50 73 65 20 6f 66 20 74 68 65 20 74 65 73 74 2e 20  se of the test. 
16f60 20 5e 54 68 65 20 69 6e 66 69 78 20 47 4c 4f 42   ^The infix GLOB
16f70 20 0a 6f 70 65 72 61 74 6f 72 20 69 73 20 69 6d   .operator is im
16f80 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c  plemented by cal
16f90 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ling the functio
16fa0 6e 0a 5b 67 6c 6f 62 28 3c 69 3e 59 3c 2f 69 3e  n.[glob(<i>Y</i>
16fb0 2c 3c 69 3e 58 3c 2f 69 3e 29 5d 20 61 6e 64 20  ,<i>X</i>)] and 
16fc0 63 61 6e 20 62 65 20 6d 6f 64 69 66 69 65 64 20  can be modified 
16fd0 62 79 20 6f 76 65 72 72 69 64 69 6e 67 0a 74 68  by overriding.th
16fe0 61 74 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 3e  at function.</p>
16ff0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
17000 6e 74 20 72 65 67 65 78 70 20 52 45 47 45 58 50  nt regexp REGEXP
17010 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 52  </tcl>.<p>^The R
17020 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20 69  EGEXP operator i
17030 73 20 61 20 73 70 65 63 69 61 6c 20 73 79 6e 74  s a special synt
17040 61 78 20 66 6f 72 20 74 68 65 20 72 65 67 65 78  ax for the regex
17050 70 28 29 0a 75 73 65 72 20 66 75 6e 63 74 69 6f  p().user functio
17060 6e 2e 20 20 5e 4e 6f 20 72 65 67 65 78 70 28 29  n.  ^No regexp()
17070 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69   user function i
17080 73 20 64 65 66 69 6e 65 64 20 62 79 20 64 65 66  s defined by def
17090 61 75 6c 74 0a 61 6e 64 20 73 6f 20 75 73 65 20  ault.and so use 
170a0 6f 66 20 74 68 65 20 52 45 47 45 58 50 20 6f 70  of the REGEXP op
170b0 65 72 61 74 6f 72 20 77 69 6c 6c 20 6e 6f 72 6d  erator will norm
170c0 61 6c 6c 79 20 72 65 73 75 6c 74 20 69 6e 20 61  ally result in a
170d0 6e 0a 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  n.error message.
170e0 20 20 5e 49 66 20 61 6e 20 5b 61 70 70 6c 69 63    ^If an [applic
170f0 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 53 51  ation-defined SQ
17100 4c 20 66 75 6e 63 74 69 6f 6e 5d 20 6e 61 6d 65  L function] name
17110 64 20 22 72 65 67 65 78 70 22 0a 69 73 20 61 64  d "regexp".is ad
17120 64 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 2c  ded at run-time,
17130 20 74 68 65 6e 20 74 68 65 20 22 3c 69 3e 58 3c   then the "<i>X<
17140 2f 69 3e 20 52 45 47 45 58 50 20 3c 69 3e 59 3c  /i> REGEXP <i>Y<
17150 2f 69 3e 22 20 6f 70 65 72 61 74 6f 72 20 77 69  /i>" operator wi
17160 6c 6c 0a 62 65 20 69 6d 70 6c 65 6d 65 6e 74 65  ll.be implemente
17170 64 20 61 73 20 61 20 63 61 6c 6c 20 74 6f 20 22  d as a call to "
17180 72 65 67 65 78 70 28 3c 69 3e 59 3c 2f 69 3e 2c  regexp(<i>Y</i>,
17190 3c 69 3e 58 3c 2f 69 3e 29 22 2e 3c 2f 70 3e 0a  <i>X</i>)".</p>.
171a0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
171b0 74 20 6d 61 74 63 68 20 4d 41 54 43 48 3c 2f 74  t match MATCH</t
171c0 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 4d 41 54 43  cl>.<p>^The MATC
171d0 48 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  H operator is a 
171e0 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20 66  special syntax f
171f0 6f 72 20 74 68 65 20 6d 61 74 63 68 28 29 0a 61  or the match().a
17200 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
17210 65 64 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 54  ed function.  ^T
17220 68 65 20 64 65 66 61 75 6c 74 20 6d 61 74 63 68  he default match
17230 28 29 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c  () function impl
17240 65 6d 65 6e 74 61 74 69 6f 6e 0a 72 61 69 73 65  ementation.raise
17250 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 61  s an exception a
17260 6e 64 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79  nd is not really
17270 20 75 73 65 66 75 6c 20 66 6f 72 20 61 6e 79 74   useful for anyt
17280 68 69 6e 67 2e 0a 5e 42 75 74 20 65 78 74 65 6e  hing..^But exten
17290 73 69 6f 6e 73 20 63 61 6e 20 6f 76 65 72 72 69  sions can overri
172a0 64 65 20 74 68 65 20 6d 61 74 63 68 28 29 20 66  de the match() f
172b0 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 6d 6f 72  unction with mor
172c0 65 0a 68 65 6c 70 66 75 6c 20 6c 6f 67 69 63 2e  e.helpful logic.
172d0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
172e0 61 67 6d 65 6e 74 20 62 65 74 77 65 65 6e 20 42  agment between B
172f0 45 54 57 45 45 4e 3c 2f 74 63 6c 3e 0a 3c 68 33  ETWEEN</tcl>.<h3
17300 3e 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65  >The BETWEEN ope
17310 72 61 74 6f 72 3c 2f 68 33 3e 0a 3c 70 3e 5e 28  rator</h3>.<p>^(
17320 54 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72  The BETWEEN oper
17330 61 74 6f 72 20 69 73 20 6c 6f 67 69 63 61 6c 6c  ator is logicall
17340 79 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  y equivalent to 
17350 61 20 70 61 69 72 20 6f 66 20 63 6f 6d 70 61 72  a pair of compar
17360 69 73 6f 6e 73 2e 0a 22 3c 69 3e 78 3c 2f 69 3e  isons.."<i>x</i>
17370 20 3c 62 3e 42 45 54 57 45 45 4e 3c 2f 62 3e 20   <b>BETWEEN</b> 
17380 3c 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c  <i>y</i> <b>AND<
17390 2f 62 3e 20 3c 69 3e 7a 3c 2f 69 3e 22 20 69 73  /b> <i>z</i>" is
173a0 20 0a 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20   .equivalent to 
173b0 0a 22 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 67 74  ."<i>x</i><b>&gt
173c0 3b 3d 3c 2f 62 3e 3c 69 3e 79 3c 2f 69 3e 20 3c  ;=</b><i>y</i> <
173d0 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e 78 3c 2f  b>AND</b> <i>x</
173e0 69 3e 3c 62 3e 26 6c 74 3b 3d 3c 2f 62 3e 3c 69  i><b>&lt;=</b><i
173f0 3e 7a 3c 2f 69 3e 22 20 65 78 63 65 70 74 0a 74  >z</i>" except.t
17400 68 61 74 20 77 69 74 68 20 42 45 54 57 45 45 4e  hat with BETWEEN
17410 2c 20 74 68 65 20 3c 69 3e 78 3c 2f 69 3e 20 65  , the <i>x</i> e
17420 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6f 6e 6c  xpression is onl
17430 79 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65  y evaluated once
17440 2e 29 5e 0a 5e 54 68 65 20 70 72 65 63 65 64 65  .)^.^The precede
17450 6e 63 65 20 6f 66 20 74 68 65 20 42 45 54 57 45  nce of the BETWE
17460 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20 74  EN operator is t
17470 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 70  he same as the p
17480 72 65 63 65 64 65 6e 63 65 0a 61 73 20 6f 70 65  recedence.as ope
17490 72 61 74 6f 72 73 20 3c 62 3e 3d 3d 3c 2f 62 3e  rators <b>==</b>
174a0 20 61 6e 64 20 3c 62 3e 21 3d 3c 2f 62 3e 20 61   and <b>!=</b> a
174b0 6e 64 20 3c 62 3e 4c 49 4b 45 3c 2f 62 3e 20 61  nd <b>LIKE</b> a
174c0 6e 64 20 67 72 6f 75 70 73 20 6c 65 66 74 20 74  nd groups left t
174d0 6f 20 72 69 67 68 74 2e 0a 0a 3c 74 63 6c 3e 68  o right...<tcl>h
174e0 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 65 20  d_fragment case 
174f0 7b 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e  {CASE expression
17500 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20  }</tcl>.<h3>The 
17510 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 3c  CASE expression<
17520 2f 68 33 3e 0a 3c 70 3e 41 20 43 41 53 45 20 65  /h3>.<p>A CASE e
17530 78 70 72 65 73 73 69 6f 6e 20 73 65 72 76 65 73  xpression serves
17540 20 61 20 72 6f 6c 65 20 73 69 6d 69 6c 61 72 20   a role similar 
17550 74 6f 20 49 46 2d 54 48 45 4e 2d 45 4c 53 45 20  to IF-THEN-ELSE 
17560 69 6e 20 6f 74 68 65 72 0a 70 72 6f 67 72 61 6d  in other.program
17570 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 73 2e 20  ming languages. 
17580 20 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e   ..<p>The option
17590 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  al expression th
175a0 61 74 20 6f 63 63 75 72 73 20 69 6e 20 62 65 74  at occurs in bet
175b0 77 65 65 6e 20 74 68 65 20 43 41 53 45 20 6b 65  ween the CASE ke
175c0 79 77 6f 72 64 20 61 6e 64 20 74 68 65 0a 66 69  yword and the.fi
175d0 72 73 74 20 57 48 45 4e 20 6b 65 79 77 6f 72 64  rst WHEN keyword
175e0 20 69 73 20 63 61 6c 6c 65 64 20 74 68 65 20 22   is called the "
175f0 62 61 73 65 22 20 65 78 70 72 65 73 73 69 6f 6e  base" expression
17600 2e 20 5e 54 68 65 72 65 20 61 72 65 20 74 77 6f  . ^There are two
17610 20 62 61 73 69 63 20 66 6f 72 6d 73 0a 6f 66 20   basic forms.of 
17620 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73 73  the CASE express
17630 69 6f 6e 3a 20 74 68 6f 73 65 20 77 69 74 68 20  ion: those with 
17640 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f  a base expressio
17650 6e 20 61 6e 64 20 74 68 6f 73 65 20 77 69 74 68  n and those with
17660 6f 75 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 43  out...<p>^In a C
17670 41 53 45 20 77 69 74 68 6f 75 74 20 61 20 62 61  ASE without a ba
17680 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 65  se expression, e
17690 61 63 68 20 57 48 45 4e 20 65 78 70 72 65 73 73  ach WHEN express
176a0 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
176b0 0a 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20  .and the result 
176c0 74 72 65 61 74 65 64 20 61 73 20 61 20 62 6f 6f  treated as a boo
176d0 6c 65 61 6e 2c 20 73 74 61 72 74 69 6e 67 20 77  lean, starting w
176e0 69 74 68 20 74 68 65 20 6c 65 66 74 6d 6f 73 74  ith the leftmost
176f0 20 61 6e 64 20 63 6f 6e 74 69 6e 75 69 6e 67 0a   and continuing.
17700 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 5e 54  to the right. ^T
17710 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
17720 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
17730 20 69 73 20 74 68 65 20 65 76 61 6c 75 61 74 69   is the evaluati
17740 6f 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 0a 65  on of the THEN.e
17750 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 63  xpression that c
17760 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
17770 65 20 66 69 72 73 74 20 57 48 45 4e 20 65 78 70  e first WHEN exp
17780 72 65 73 73 69 6f 6e 20 74 68 61 74 20 65 76 61  ression that eva
17790 6c 75 61 74 65 73 20 74 6f 0a 74 72 75 65 2e 20  luates to.true. 
177a0 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65 20 6f 66 20  ^Or, if none of 
177b0 74 68 65 20 57 48 45 4e 20 65 78 70 72 65 73 73  the WHEN express
177c0 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 20 74 6f  ions evaluate to
177d0 20 74 72 75 65 2c 20 74 68 65 20 72 65 73 75 6c   true, the resul
177e0 74 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20  t of.evaluating 
177f0 74 68 65 20 45 4c 53 45 20 65 78 70 72 65 73 73  the ELSE express
17800 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20 5e 49 66  ion, if any. ^If
17810 20 74 68 65 72 65 20 69 73 20 6e 6f 20 45 4c 53   there is no ELS
17820 45 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  E expression and
17830 0a 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45  .none of the WHE
17840 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  N expressions ar
17850 65 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  e true, then the
17860 20 6f 76 65 72 61 6c 6c 20 72 65 73 75 6c 74 20   overall result 
17870 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70 3e 5e 41 20  is NULL...<p>^A 
17880 4e 55 4c 4c 20 72 65 73 75 6c 74 20 69 73 20 63  NULL result is c
17890 6f 6e 73 69 64 65 72 65 64 20 75 6e 74 72 75 65  onsidered untrue
178a0 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67   when evaluating
178b0 20 57 48 45 4e 20 74 65 72 6d 73 2e 0a 0a 3c 70   WHEN terms...<p
178c0 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74 68  >^In a CASE with
178d0 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69   a base expressi
178e0 6f 6e 2c 20 74 68 65 20 62 61 73 65 20 65 78 70  on, the base exp
178f0 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
17900 61 74 65 64 20 6a 75 73 74 0a 6f 6e 63 65 20 61  ated just.once a
17910 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  nd the result is
17920 20 63 6f 6d 70 61 72 65 64 20 61 67 61 69 6e 73   compared agains
17930 74 20 74 68 65 20 65 76 61 6c 75 61 74 69 6f 6e  t the evaluation
17940 20 6f 66 20 65 61 63 68 20 57 48 45 4e 20 0a 65   of each WHEN .e
17950 78 70 72 65 73 73 69 6f 6e 20 66 72 6f 6d 20 6c  xpression from l
17960 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 5e 54  eft to right. ^T
17970 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
17980 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
17990 20 69 73 20 74 68 65 20 0a 65 76 61 6c 75 61 74   is the .evaluat
179a0 69 6f 6e 20 6f 66 20 74 68 65 20 54 48 45 4e 20  ion of the THEN 
179b0 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
179c0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
179d0 68 65 20 66 69 72 73 74 20 57 48 45 4e 0a 65 78  he first WHEN.ex
179e0 70 72 65 73 73 69 6f 6e 20 66 6f 72 20 77 68 69  pression for whi
179f0 63 68 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  ch the compariso
17a00 6e 20 69 73 20 74 72 75 65 2e 20 5e 4f 72 2c 20  n is true. ^Or, 
17a10 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57  if none of the W
17a20 48 45 4e 0a 65 78 70 72 65 73 73 69 6f 6e 73 20  HEN.expressions 
17a30 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 76 61  evaluate to a va
17a40 6c 75 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65  lue equal to the
17a50 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
17a60 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 6f 66 20  , the result.of 
17a70 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45  evaluating the E
17a80 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  LSE expression, 
17a90 69 66 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72  if any. ^If ther
17aa0 65 20 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70  e is no ELSE exp
17ab0 72 65 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65  ression and.none
17ac0 20 6f 66 20 74 68 65 20 57 48 45 4e 20 65 78 70   of the WHEN exp
17ad0 72 65 73 73 69 6f 6e 73 20 70 72 6f 64 75 63 65  ressions produce
17ae0 20 61 20 72 65 73 75 6c 74 20 65 71 75 61 6c 20   a result equal 
17af0 74 6f 20 74 68 65 20 62 61 73 65 20 65 78 70 72  to the base expr
17b00 65 73 73 69 6f 6e 2c 0a 74 68 65 20 6f 76 65 72  ession,.the over
17b10 61 6c 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55  all result is NU
17b20 4c 4c 2e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 63 6f  LL...<p>^When co
17b30 6d 70 61 72 69 6e 67 20 61 20 62 61 73 65 20 65  mparing a base e
17b40 78 70 72 65 73 73 69 6f 6e 20 61 67 61 69 6e 73  xpression agains
17b50 74 20 61 20 57 48 45 4e 20 65 78 70 72 65 73 73  t a WHEN express
17b60 69 6f 6e 2c 20 74 68 65 20 73 61 6d 65 0a 63 6f  ion, the same.co
17b70 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
17b80 2c 20 61 66 66 69 6e 69 74 79 2c 20 61 6e 64 20  , affinity, and 
17b90 4e 55 4c 4c 2d 68 61 6e 64 6c 69 6e 67 20 72 75  NULL-handling ru
17ba0 6c 65 73 20 61 70 70 6c 79 20 61 73 20 69 66 20  les apply as if 
17bb0 74 68 65 0a 62 61 73 65 20 65 78 70 72 65 73 73  the.base express
17bc0 69 6f 6e 20 61 6e 64 20 57 48 45 4e 20 65 78 70  ion and WHEN exp
17bd0 72 65 73 73 69 6f 6e 20 61 72 65 20 72 65 73 70  ression are resp
17be0 65 63 74 69 76 65 6c 79 20 74 68 65 20 6c 65 66  ectively the lef
17bf0 74 2d 20 61 6e 64 0a 72 69 67 68 74 2d 68 61 6e  t- and.right-han
17c00 64 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 6e  d operands of an
17c10 20 3c 62 69 67 3e 3c 62 3e 3d 3c 2f 62 3e 3c 2f   <big><b>=</b></
17c20 62 69 67 3e 20 6f 70 65 72 61 74 6f 72 2e 3c 2f  big> operator.</
17c30 70 3e 20 5e 49 66 20 74 68 65 20 62 61 73 65 20  p> ^If the base 
17c40 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 4e  .expression is N
17c50 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
17c60 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20  ult of the CASE 
17c70 69 73 20 61 6c 77 61 79 73 20 74 68 65 20 72 65  is always the re
17c80 73 75 6c 74 20 0a 6f 66 20 65 76 61 6c 75 61 74  sult .of evaluat
17c90 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70  ing the ELSE exp
17ca0 72 65 73 73 69 6f 6e 20 69 66 20 69 74 20 65 78  ression if it ex
17cb0 69 73 74 73 2c 20 6f 72 20 4e 55 4c 4c 20 69 66  ists, or NULL if
17cc0 20 69 74 20 64 6f 65 73 20 6e 6f 74 2e 0a 0a 3c   it does not...<
17cd0 70 3e 5e 42 6f 74 68 20 66 6f 72 6d 73 20 6f 66  p>^Both forms of
17ce0 20 74 68 65 20 43 41 53 45 20 65 78 70 72 65 73   the CASE expres
17cf0 73 69 6f 6e 20 75 73 65 20 6c 61 7a 79 2c 20 6f  sion use lazy, o
17d00 72 20 73 68 6f 72 74 2d 63 69 72 63 75 69 74 2c  r short-circuit,
17d10 20 0a 65 76 61 6c 75 61 74 69 6f 6e 2e 0a 0a 3c   .evaluation...<
17d20 70 3e 5e 28 54 68 65 20 6f 6e 6c 79 20 64 69 66  p>^(The only dif
17d30 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
17d40 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77  the following tw
17d50 6f 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  o CASE expressio
17d60 6e 73 20 69 73 20 74 68 61 74 20 0a 74 68 65 20  ns is that .the 
17d70 3c 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73  <i>x</i> express
17d80 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64  ion is evaluated
17d90 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e   exactly once in
17da0 20 74 68 65 20 66 69 72 73 74 20 65 78 61 6d 70   the first examp
17db0 6c 65 20 62 75 74 20 0a 6d 69 67 68 74 20 62 65  le but .might be
17dc0 20 65 76 61 6c 75 61 74 65 64 20 6d 75 6c 74 69   evaluated multi
17dd0 70 6c 65 20 74 69 6d 65 73 20 69 6e 20 74 68 65  ple times in the
17de0 20 73 65 63 6f 6e 64 3a 0a 0a 3c 75 6c 3e 3c 70   second:..<ul><p
17df0 72 65 3e 0a 3c 6c 69 3e 43 41 53 45 20 78 20 57  re>.<li>CASE x W
17e00 48 45 4e 20 77 31 20 54 48 45 4e 20 72 31 20 57  HEN w1 THEN r1 W
17e10 48 45 4e 20 77 32 20 54 48 45 4e 20 72 32 20 45  HEN w2 THEN r2 E
17e20 4c 53 45 20 72 33 20 45 4e 44 0a 3c 6c 69 3e 43  LSE r3 END.<li>C
17e30 41 53 45 20 57 48 45 4e 20 78 3d 77 31 20 54 48  ASE WHEN x=w1 TH
17e40 45 4e 20 72 31 20 57 48 45 4e 20 78 3d 77 32 20  EN r1 WHEN x=w2 
17e50 54 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20  THEN r2 ELSE r3 
17e60 45 4e 44 0a 3c 2f 70 72 65 3e 3c 2f 75 6c 3e 29  END.</pre></ul>)
17e70 5e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  ^...<tcl>hd_frag
17e80 6d 65 6e 74 20 69 6e 5f 6f 70 20 7b 49 4e 20 6f  ment in_op {IN o
17e90 70 65 72 61 74 6f 72 7d 20 7b 4e 4f 54 20 49 4e  perator} {NOT IN
17ea0 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e   operator}</tcl>
17eb0 0a 3c 68 33 3e 54 68 65 20 49 4e 20 61 6e 64 20  .<h3>The IN and 
17ec0 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73  NOT IN operators
17ed0 3c 2f 68 33 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e  </h3>.<p>^The IN
17ee0 20 61 6e 64 20 4e 4f 54 20 49 4e 20 6f 70 65 72   and NOT IN oper
17ef0 61 74 6f 72 73 20 74 61 6b 65 20 61 6e 20 65 78  ators take an ex
17f00 70 72 65 73 73 69 6f 6e 20 6f 6e 20 74 68 65 0a  pression on the.
17f10 6c 65 66 74 20 61 6e 64 20 61 20 6c 69 73 74 20  left and a list 
17f20 6f 66 20 76 61 6c 75 65 73 20 6f 72 20 61 20 73  of values or a s
17f30 75 62 71 75 65 72 79 20 6f 6e 20 74 68 65 20 72  ubquery on the r
17f40 69 67 68 74 2e 0a 5e 57 68 65 6e 20 74 68 65 20  ight..^When the 
17f50 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 6f 66  right operand of
17f60 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
17f70 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 73   operator is a s
17f80 75 62 71 75 65 72 79 2c 20 74 68 65 0a 73 75 62  ubquery, the.sub
17f90 71 75 65 72 79 20 6d 75 73 74 20 68 61 76 65 20  query must have 
17fa0 74 68 65 20 73 61 6d 65 20 6e 75 6d 62 65 72 20  the same number 
17fb0 6f 66 20 63 6f 6c 75 6d 6e 73 20 61 73 20 74 68  of columns as th
17fc0 65 72 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20  ere are columns 
17fd0 69 6e 0a 74 68 65 20 5b 72 6f 77 20 76 61 6c 75  in.the [row valu
17fe0 65 5d 20 6f 66 20 74 68 65 20 6c 65 66 74 20 6f  e] of the left o
17ff0 70 65 72 61 6e 64 2e 20 20 5e 54 68 65 20 73 75  perand.  ^The su
18000 62 71 75 65 72 79 20 6f 6e 20 74 68 65 0a 72 69  bquery on the.ri
18010 67 68 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20  ght of an IN or 
18020 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20  NOT IN operator 
18030 6d 75 73 74 20 62 65 20 61 20 73 63 61 6c 61 72  must be a scalar
18040 20 73 75 62 71 75 65 72 79 20 69 66 20 74 68 65   subquery if the
18050 20 6c 65 66 74 0a 65 78 70 72 65 73 73 69 6f 6e   left.expression
18060 20 69 73 20 6e 6f 74 20 61 20 5b 72 6f 77 20 76   is not a [row v
18070 61 6c 75 65 5d 20 65 78 70 72 65 73 73 69 6f 6e  alue] expression
18080 2e 0a 5e 49 66 20 74 68 65 20 72 69 67 68 74 20  ..^If the right 
18090 6f 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e  operand of an IN
180a0 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61   or NOT IN opera
180b0 74 6f 72 20 69 73 20 61 20 6c 69 73 74 20 6f 66  tor is a list of
180c0 20 76 61 6c 75 65 73 2c 0a 65 61 63 68 20 6f 66   values,.each of
180d0 20 74 68 6f 73 65 20 76 61 6c 75 65 73 20 6d 75   those values mu
180e0 73 74 20 62 65 20 73 63 61 6c 61 72 73 20 61 6e  st be scalars an
180f0 64 20 74 68 65 20 6c 65 66 74 20 65 78 70 72 65  d the left expre
18100 73 73 69 6f 6e 20 6d 75 73 74 20 61 6c 73 6f 0a  ssion must also.
18110 62 65 20 61 20 73 63 61 6c 61 72 2e 0a 5e 54 68  be a scalar..^Th
18120 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64  e right-hand sid
18130 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f  e of an IN or NO
18140 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 63 61  T IN operator ca
18150 6e 20 62 65 20 61 0a 74 61 62 6c 65 20 3c 69 3e  n be a.table <i>
18160 6e 61 6d 65 3c 2f 69 3e 20 6f 72 20 5b 74 61 62  name</i> or [tab
18170 6c 65 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69  le-valued functi
18180 6f 6e 5d 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e 20  on] <i>name</i> 
18190 69 6e 20 77 68 69 63 68 20 0a 63 61 73 65 20 74  in which .case t
181a0 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69  he right-hand si
181b0 64 65 20 69 73 20 75 6e 64 65 72 73 74 6f 6f 64  de is understood
181c0 20 74 6f 20 62 65 20 73 75 62 71 75 65 72 79 20   to be subquery 
181d0 6f 66 0a 74 68 65 20 66 6f 72 6d 20 22 28 53 45  of.the form "(SE
181e0 4c 45 43 54 20 2a 20 46 52 4f 4d 20 3c 69 3e 6e  LECT * FROM <i>n
181f0 61 6d 65 3c 2f 69 3e 29 22 2e 0a 5e 57 68 65 6e  ame</i>)"..^When
18200 20 74 68 65 20 72 69 67 68 74 20 6f 70 65 72 61   the right opera
18210 6e 64 20 69 73 20 61 6e 20 65 6d 70 74 79 20 73  nd is an empty s
18220 65 74 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f  et, the result o
18230 66 20 49 4e 20 69 73 20 66 61 6c 73 65 20 61 6e  f IN is false an
18240 64 20 74 68 65 0a 72 65 73 75 6c 74 20 6f 66 20  d the.result of 
18250 4e 4f 54 20 49 4e 20 69 73 20 74 72 75 65 2c 20  NOT IN is true, 
18260 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  regardless of th
18270 65 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 61  e left operand a
18280 6e 64 20 65 76 65 6e 20 69 66 20 74 68 65 0a 6c  nd even if the.l
18290 65 66 74 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  eft operand is N
182a0 55 4c 4c 2e 0a 3c 70 3e 5e 28 54 68 65 20 72 65  ULL..<p>^(The re
182b0 73 75 6c 74 20 6f 66 20 61 6e 20 49 4e 20 6f 72  sult of an IN or
182c0 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
182d0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
182e0 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  y the following.
182f0 6d 61 74 72 69 78 3a 0a 0a 3c 63 65 6e 74 65 72  matrix:..<center
18300 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
18310 31 3e 0a 3c 74 72 3e 0a 3c 74 68 3e 4c 65 66 74  1>.<tr>.<th>Left
18320 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69 73 20   operand <br>is 
18330 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f  NULL.<th>Right o
18340 70 65 72 61 6e 64 20 3c 62 72 3e 63 6f 6e 74 61  perand <br>conta
18350 69 6e 73 20 4e 55 4c 4c 0a 3c 74 68 3e 52 69 67  ins NULL.<th>Rig
18360 68 74 20 6f 70 65 72 61 6e 64 20 3c 62 72 3e 69  ht operand <br>i
18370 73 20 61 6e 20 65 6d 70 74 79 20 73 65 74 0a 3c  s an empty set.<
18380 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e 64 20  th>Left operand 
18390 66 6f 75 6e 64 20 3c 62 72 3e 77 69 74 68 69 6e  found <br>within
183a0 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 0a 3c   right operand.<
183b0 74 68 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72  th>Result of <br
183c0 3e 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c 74 68  >IN operator.<th
183d0 3e 52 65 73 75 6c 74 20 6f 66 20 3c 62 72 3e 4e  >Result of <br>N
183e0 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 0a 3c  OT IN operator.<
183f0 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  tr>.<td align="c
18400 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c  enter">no.<td al
18410 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
18420 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
18430 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
18440 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
18450 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66  align="center">f
18460 61 6c 73 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  alse.<td align="
18470 63 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 72  center">true.<tr
18480 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  >.<td align="cen
18490 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61  ter">does not ma
184a0 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  tter.<td align="
184b0 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61  center">no.<td a
184c0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65  lign="center">ye
184d0 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  s.<td align="cen
184e0 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
184f0 6e 3d 22 63 65 6e 74 65 72 22 3e 66 61 6c 73 65  n="center">false
18500 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
18510 65 72 22 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74  er">true.<tr>.<t
18520 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
18530 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
18540 65 6e 74 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20  enter">does not 
18550 6d 61 74 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e  matter.<td align
18560 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
18570 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
18580 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  yes.<td align="c
18590 65 6e 74 65 72 22 3e 74 72 75 65 0a 3c 74 64 20  enter">true.<td 
185a0 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 66  align="center">f
185b0 61 6c 73 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c  alse.<tr>.<td al
185c0 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a  ign="center">no.
185d0 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
185e0 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67 6e  r">yes.<td align
185f0 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
18600 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
18610 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
18620 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20 61  nter">NULL.<td a
18630 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
18640 4c 4c 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67  LL.<tr>.<td alig
18650 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c  n="center">yes.<
18660 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
18670 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65  ">does not matte
18680 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e  r.<td align="cen
18690 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67  ter">no.<td alig
186a0 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20  n="center">does 
186b0 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61  not matter.<td a
186c0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e 55  lign="center">NU
186d0 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  LL.<td align="ce
186e0 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 2f 74 61 62  nter">NULL.</tab
186f0 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a  le>.</center>)^.
18700 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 53  .<p>^Note that S
18710 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 74 68 65  QLite allows the
18720 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
18730 69 73 74 20 6f 66 20 73 63 61 6c 61 72 20 76 61  ist of scalar va
18740 6c 75 65 73 20 6f 6e 0a 74 68 65 20 72 69 67 68  lues on.the righ
18750 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61  t-hand side of a
18760 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f  n IN or NOT IN o
18770 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 61 6e  perator to be an
18780 20 65 6d 70 74 79 20 6c 69 73 74 20 62 75 74 0a   empty list but.
18790 6d 6f 73 74 20 6f 74 68 65 72 20 53 51 4c 20 64  most other SQL d
187a0 61 74 61 62 61 73 65 20 64 61 74 61 62 61 73 65  atabase database
187b0 20 65 6e 67 69 6e 65 73 20 61 6e 64 20 74 68 65   engines and the
187c0 20 53 51 4c 39 32 20 73 74 61 6e 64 61 72 64 20   SQL92 standard 
187d0 72 65 71 75 69 72 65 0a 74 68 65 20 6c 69 73 74  require.the list
187e0 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 74 20 6c   to contain at l
187f0 65 61 73 74 20 6f 6e 65 20 65 6c 65 6d 65 6e 74  east one element
18800 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 61 62 6c 65  .</p>..<h3>Table
18810 20 43 6f 6c 75 6d 6e 20 4e 61 6d 65 73 3c 2f 68   Column Names</h
18820 33 3e 0a 0a 3c 70 3e 5e 41 20 63 6f 6c 75 6d 6e  3>..<p>^A column
18830 20 6e 61 6d 65 20 63 61 6e 20 62 65 20 61 6e 79   name can be any
18840 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 64 65   of the names de
18850 66 69 6e 65 64 20 69 6e 20 74 68 65 20 5b 43 52  fined in the [CR
18860 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74  EATE TABLE].stat
18870 65 6d 65 6e 74 20 6f 72 20 6f 6e 65 20 6f 66 20  ement or one of 
18880 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 70  the following sp
18890 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65 72  ecial identifier
188a0 73 3a 20 22 3c 62 3e 52 4f 57 49 44 3c 2f 62 3e  s: "<b>ROWID</b>
188b0 22 2c 0a 22 3c 62 3e 4f 49 44 3c 2f 62 3e 22 2c  ",."<b>OID</b>",
188c0 20 6f 72 20 22 3c 62 3e 5f 52 4f 57 49 44 5f 3c   or "<b>_ROWID_<
188d0 2f 62 3e 22 2e 0a 5e 54 68 65 20 74 68 72 65 65  /b>"..^The three
188e0 20 73 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66   special identif
188f0 69 65 72 73 20 64 65 73 63 72 69 62 65 20 74 68  iers describe th
18900 65 0a 75 6e 69 71 75 65 20 69 6e 74 65 67 65 72  e.unique integer
18910 20 6b 65 79 20 28 74 68 65 20 5b 72 6f 77 69 64   key (the [rowid
18920 5d 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ]) associated wi
18930 74 68 20 65 76 65 72 79 20 0a 72 6f 77 20 6f 66  th every .row of
18940 20 65 76 65 72 79 20 74 61 62 6c 65 20 61 6e 64   every table and
18950 20 73 6f 20 61 72 65 20 6e 6f 74 20 61 76 61 69   so are not avai
18960 6c 61 62 6c 65 20 6f 6e 20 5b 57 49 54 48 4f 55  lable on [WITHOU
18970 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e  T ROWID] tables.
18980 0a 5e 54 68 65 20 73 70 65 63 69 61 6c 20 69 64  .^The special id
18990 65 6e 74 69 66 69 65 72 73 20 6f 6e 6c 79 20 72  entifiers only r
189a0 65 66 65 72 20 74 6f 20 74 68 65 20 72 6f 77 20  efer to the row 
189b0 6b 65 79 20 69 66 20 74 68 65 20 5b 43 52 45 41  key if the [CREA
189c0 54 45 20 54 41 42 4c 45 5d 0a 73 74 61 74 65 6d  TE TABLE].statem
189d0 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 64 65 66  ent does not def
189e0 69 6e 65 20 61 20 72 65 61 6c 20 63 6f 6c 75 6d  ine a real colum
189f0 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  n with the same 
18a00 6e 61 6d 65 2e 0a 5e 54 68 65 20 72 6f 77 69 64  name..^The rowid
18a10 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 6e 79   can be used any
18a20 77 68 65 72 65 20 61 20 72 65 67 75 6c 61 72 0a  where a regular.
18a30 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20 75 73  column can be us
18a40 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ed.</p>..<tcl>hd
18a50 5f 66 72 61 67 6d 65 6e 74 20 65 78 69 73 74 73  _fragment exists
18a60 5f 6f 70 20 7b 45 58 49 53 54 53 20 6f 70 65 72  _op {EXISTS oper
18a70 61 74 6f 72 7d 20 7b 4e 4f 54 20 45 58 49 53 54  ator} {NOT EXIST
18a80 53 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c  S operator}</tcl
18a90 3e 0a 3c 68 33 3e 54 68 65 20 45 58 49 53 54 53  >.<h3>The EXISTS
18aa0 20 6f 70 65 72 61 74 6f 72 3c 2f 68 33 3e 0a 0a   operator</h3>..
18ab0 3c 70 3e 5e 54 68 65 20 45 58 49 53 54 53 20 6f  <p>^The EXISTS o
18ac0 70 65 72 61 74 6f 72 20 61 6c 77 61 79 73 20 65  perator always e
18ad0 76 61 6c 75 61 74 65 73 20 74 6f 20 6f 6e 65 20  valuates to one 
18ae0 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  of the integer v
18af0 61 6c 75 65 73 20 30 20 0a 61 6e 64 20 31 2e 20  alues 0 .and 1. 
18b00 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20 74 68  ^If executing th
18b10 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
18b20 6e 74 20 73 70 65 63 69 66 69 65 64 20 61 73 20  nt specified as 
18b30 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 0a  the right-hand .
18b40 6f 70 65 72 61 6e 64 20 6f 66 20 74 68 65 20 45  operand of the E
18b50 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 77  XISTS operator w
18b60 6f 75 6c 64 20 72 65 74 75 72 6e 20 6f 6e 65 20  ould return one 
18b70 6f 72 20 6d 6f 72 65 20 72 6f 77 73 2c 20 74 68  or more rows, th
18b80 65 6e 20 74 68 65 0a 45 58 49 53 54 53 20 6f 70  en the.EXISTS op
18b90 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73  erator evaluates
18ba0 20 74 6f 20 31 2e 20 5e 49 66 20 65 78 65 63 75   to 1. ^If execu
18bb0 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20  ting the SELECT 
18bc0 77 6f 75 6c 64 20 72 65 74 75 72 6e 0a 6e 6f 20  would return.no 
18bd0 72 6f 77 73 20 61 74 20 61 6c 6c 2c 20 74 68 65  rows at all, the
18be0 6e 20 74 68 65 20 45 58 49 53 54 53 20 6f 70 65  n the EXISTS ope
18bf0 72 61 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20  rator evaluates 
18c00 74 6f 20 30 2e 20 0a 0a 3c 70 3e 5e 54 68 65 20  to 0. ..<p>^The 
18c10 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
18c20 73 20 69 6e 20 65 61 63 68 20 72 6f 77 20 72 65  s in each row re
18c30 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
18c40 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 0a 28  LECT statement.(
18c50 69 66 20 61 6e 79 29 20 61 6e 64 20 74 68 65 20  if any) and the 
18c60 73 70 65 63 69 66 69 63 20 76 61 6c 75 65 73 20  specific values 
18c70 72 65 74 75 72 6e 65 64 20 68 61 76 65 20 6e 6f  returned have no
18c80 20 65 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72   effect on the r
18c90 65 73 75 6c 74 73 0a 6f 66 20 74 68 65 20 45 58  esults.of the EX
18ca0 49 53 54 53 20 6f 70 65 72 61 74 6f 72 2e 20 5e  ISTS operator. ^
18cb0 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20 72  In particular, r
18cc0 6f 77 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 4e  ows containing N
18cd0 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 0a 6e  ULL values are.n
18ce0 6f 74 20 68 61 6e 64 6c 65 64 20 61 6e 79 20 64  ot handled any d
18cf0 69 66 66 65 72 65 6e 74 6c 79 20 66 72 6f 6d 20  ifferently from 
18d00 72 6f 77 73 20 77 69 74 68 6f 75 74 20 4e 55 4c  rows without NUL
18d10 4c 20 76 61 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e  L values...<tcl>
18d20 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 75 62 71  hd_fragment subq
18d30 20 7b 53 75 62 71 75 65 72 69 65 73 7d 3c 2f 74   {Subqueries}</t
18d40 63 6c 3e 0a 3c 68 33 3e 53 75 62 71 75 65 72 79  cl>.<h3>Subquery
18d50 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33   Expressions</h3
18d60 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45 43 54  >..<p>^A [SELECT
18d70 5d 20 73 74 61 74 65 6d 65 6e 74 20 65 6e 63 6c  ] statement encl
18d80 6f 73 65 64 20 69 6e 20 70 61 72 65 6e 74 68 65  osed in parenthe
18d90 73 65 73 20 69 73 20 61 20 73 75 62 71 75 65 72  ses is a subquer
18da0 79 2e 0a 5e 41 6c 6c 20 74 79 70 65 73 20 6f 66  y..^All types of
18db0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
18dc0 74 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 61 67 67  t, including.agg
18dd0 72 65 67 61 74 65 20 61 6e 64 20 63 6f 6d 70 6f  regate and compo
18de0 75 6e 64 20 53 45 4c 45 43 54 20 71 75 65 72 69  und SELECT queri
18df0 65 73 20 28 71 75 65 72 69 65 73 20 77 69 74 68  es (queries with
18e00 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 0a 55   keywords like.U
18e10 4e 49 4f 4e 20 6f 72 20 45 58 43 45 50 54 29 20  NION or EXCEPT) 
18e20 61 72 65 20 61 6c 6c 6f 77 65 64 20 61 73 20 73  are allowed as s
18e30 63 61 6c 61 72 20 73 75 62 71 75 65 72 69 65 73  calar subqueries
18e40 2e 0a 5e 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ..^The value of 
18e50 61 20 73 75 62 71 75 65 72 79 20 65 78 70 72 65  a subquery expre
18e60 73 73 69 6f 6e 20 69 73 20 74 68 65 20 66 69 72  ssion is the fir
18e70 73 74 20 72 6f 77 20 6f 66 20 74 68 65 20 72 65  st row of the re
18e80 73 75 6c 74 0a 66 72 6f 6d 20 74 68 65 20 65 6e  sult.from the en
18e90 63 6c 6f 73 65 64 20 5b 53 45 4c 45 43 54 5d 20  closed [SELECT] 
18ea0 73 74 61 74 65 6d 65 6e 74 2e 0a 5e 49 6e 20 6f  statement..^In o
18eb0 74 68 65 72 20 77 6f 72 64 73 2c 20 61 6e 20 69  ther words, an i
18ec0 6d 70 6c 69 65 64 20 22 4c 49 4d 49 54 20 31 22  mplied "LIMIT 1"
18ed0 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68 65   is added to the
18ee0 20 73 75 62 71 75 65 72 79 2c 20 6f 76 65 72 72   subquery, overr
18ef0 69 64 69 6e 67 0a 61 6e 20 65 78 70 6c 69 63 69  iding.an explici
18f00 74 6c 79 20 63 6f 64 65 64 20 4c 49 4d 49 54 2e  tly coded LIMIT.
18f10 0a 5e 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61  .^The value of a
18f20 20 73 75 62 71 75 65 72 79 20 65 78 70 72 65 73   subquery expres
18f30 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 69 66 20  sion is NULL if 
18f40 74 68 65 20 65 6e 63 6c 6f 73 65 64 0a 5b 53 45  the enclosed.[SE
18f50 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20  LECT] statement 
18f60 72 65 74 75 72 6e 73 20 6e 6f 20 72 6f 77 73 2e  returns no rows.
18f70 0a 0a 3c 70 3e 41 20 73 75 62 71 75 65 72 79 20  ..<p>A subquery 
18f80 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 73  that returns a s
18f90 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 69 73 20  ingle column is 
18fa0 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65 72  a scalar subquer
18fb0 79 20 61 6e 64 20 63 61 6e 0a 62 65 20 75 73 65  y and can.be use
18fc0 64 20 6d 6f 73 74 20 61 6e 79 77 68 65 72 65 2e  d most anywhere.
18fd0 0a 5e 41 20 73 75 62 71 75 65 72 79 20 74 68 61  .^A subquery tha
18fe0 74 20 72 65 74 75 72 6e 73 20 74 77 6f 20 6f 72  t returns two or
18ff0 20 6d 6f 72 65 20 63 6f 6c 75 6d 6e 73 20 69 73   more columns is
19000 20 61 20 5b 72 6f 77 20 76 61 6c 75 65 5d 0a 73   a [row value].s
19010 75 62 71 75 65 72 79 20 61 6e 64 20 63 61 6e 20  ubquery and can 
19020 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20  only be used as 
19030 74 68 65 20 6f 70 65 72 61 6e 64 20 6f 66 20 61  the operand of a
19040 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
19050 61 74 6f 72 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ator...<tcl>hd_f
19060 72 61 67 6d 65 6e 74 20 63 6f 73 75 62 20 7b 63  ragment cosub {c
19070 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
19080 72 69 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ries}</tcl>.<h3>
19090 43 6f 72 72 65 6c 61 74 65 64 20 53 75 62 71 75  Correlated Subqu
190a0 65 72 69 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  eries</h3>..<p>^
190b0 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  A [SELECT] state
190c0 6d 65 6e 74 20 75 73 65 64 20 61 73 20 65 69 74  ment used as eit
190d0 68 65 72 20 61 20 73 63 61 6c 61 72 20 73 75 62  her a scalar sub
190e0 71 75 65 72 79 20 6f 72 20 61 73 20 74 68 65 20  query or as the 
190f0 0a 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72  .right-hand oper
19100 61 6e 64 20 6f 66 20 61 6e 20 49 4e 2c 20 4e 4f  and of an IN, NO
19110 54 20 49 4e 20 6f 72 20 45 58 49 53 54 53 20 65  T IN or EXISTS e
19120 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 63 6f  xpression may co
19130 6e 74 61 69 6e 20 0a 72 65 66 65 72 65 6e 63 65  ntain .reference
19140 73 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  s to columns in 
19150 74 68 65 20 6f 75 74 65 72 20 71 75 65 72 79 2e  the outer query.
19160 20 53 75 63 68 20 61 20 73 75 62 71 75 65 72 79   Such a subquery
19170 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 61 20 63   is known as.a c
19180 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
19190 72 79 2e 20 5e 41 20 63 6f 72 72 65 6c 61 74 65  ry. ^A correlate
191a0 64 20 73 75 62 71 75 65 72 79 20 69 73 20 72 65  d subquery is re
191b0 65 76 61 6c 75 61 74 65 64 20 65 61 63 68 20 74  evaluated each t
191c0 69 6d 65 0a 69 74 73 20 72 65 73 75 6c 74 20 69  ime.its result i
191d0 73 20 72 65 71 75 69 72 65 64 2e 20 5e 41 6e 20  s required. ^An 
191e0 75 6e 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  uncorrelated sub
191f0 71 75 65 72 79 20 69 73 20 65 76 61 6c 75 61 74  query is evaluat
19200 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 0a 61 6e 64  ed only once.and
19210 20 74 68 65 20 72 65 73 75 6c 74 20 72 65 75 73   the result reus
19220 65 64 20 61 73 20 6e 65 63 65 73 73 61 72 79 2e  ed as necessary.
19230 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
19240 6e 74 20 63 61 73 74 65 78 70 72 20 7b 43 41 53  nt castexpr {CAS
19250 54 20 65 78 70 72 65 73 73 69 6f 6e 7d 20 7b 43  T expression} {C
19260 41 53 54 7d 20 7b 63 61 73 74 7d 20 7b 43 41 53  AST} {cast} {CAS
19270 54 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c  T operator}</tcl
19280 3e 0a 3c 68 33 3e 43 41 53 54 20 65 78 70 72 65  >.<h3>CAST expre
19290 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ssions</h3>..<p>
192a0 41 20 43 41 53 54 20 65 78 70 72 65 73 73 69 6f  A CAST expressio
192b0 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 43  n of the form "C
192c0 41 53 54 28 3c 69 3e 65 78 70 72 3c 2f 69 3e 20  AST(<i>expr</i> 
192d0 41 53 20 3c 69 3e 74 79 70 65 2d 6e 61 6d 65 3c  AS <i>type-name<
192e0 2f 69 3e 29 22 0a 69 73 20 75 73 65 64 20 74 6f  /i>)".is used to
192f0 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c   convert the val
19300 75 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c 2f 69  ue of <i>expr</i
19310 3e 20 74 6f 20 0a 61 20 64 69 66 66 65 72 65 6e  > to .a differen
19320 74 20 5b 73 74 6f 72 61 67 65 20 63 6c 61 73 73  t [storage class
19330 5d 20 73 70 65 63 69 66 69 65 64 20 62 79 20 3c  ] specified by <
19340 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65  yyterm>type-name
19350 3c 2f 79 79 74 65 72 6d 3e 2e 0a 5e 41 20 43 41  </yyterm>..^A CA
19360 53 54 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  ST conversion is
19370 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20   similar to the 
19380 63 6f 6e 76 65 72 73 69 6f 6e 20 74 68 61 74 20  conversion that 
19390 74 61 6b 65 73 0a 70 6c 61 63 65 20 77 68 65 6e  takes.place when
193a0 20 61 20 5b 63 6f 6c 75 6d 6e 20 61 66 66 69 6e   a [column affin
193b0 69 74 79 5d 20 69 73 20 61 70 70 6c 69 65 64 20  ity] is applied 
193c0 74 6f 20 61 20 76 61 6c 75 65 20 65 78 63 65 70  to a value excep
193d0 74 20 74 68 61 74 20 77 69 74 68 0a 74 68 65 20  t that with.the 
193e0 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20 74 68  CAST operator th
193f0 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61 6c 77  e conversion alw
19400 61 79 73 20 74 61 6b 65 73 20 70 6c 61 63 65 20  ays takes place 
19410 65 76 65 6e 20 69 66 20 74 68 65 20 63 6f 6e 76  even if the conv
19420 65 72 73 69 6f 6e 0a 6c 6f 73 73 79 20 61 6e 64  ersion.lossy and
19430 20 69 72 72 65 76 65 72 73 69 62 6c 65 2c 20 77   irreversible, w
19440 68 65 72 65 61 73 20 63 6f 6c 75 6d 6e 20 61 66  hereas column af
19450 66 69 6e 69 74 79 20 6f 6e 6c 79 20 63 68 61 6e  finity only chan
19460 67 65 73 20 74 68 65 20 64 61 74 61 20 74 79 70  ges the data typ
19470 65 0a 6f 66 20 61 20 76 61 6c 75 65 20 69 66 20  e.of a value if 
19480 74 68 65 20 63 68 61 6e 67 65 20 69 73 20 6c 6f  the change is lo
19490 73 73 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72  ssless and rever
194a0 73 69 62 6c 65 2e 0a 0a 3c 70 3e 5e 49 66 20 74  sible...<p>^If t
194b0 68 65 20 76 61 6c 75 65 20 6f 66 20 3c 69 3e 65  he value of <i>e
194c0 78 70 72 3c 2f 69 3e 20 69 73 20 4e 55 4c 4c 2c  xpr</i> is NULL,
194d0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
194e0 20 6f 66 20 74 68 65 20 43 41 53 54 0a 65 78 70   of the CAST.exp
194f0 72 65 73 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20  ression is also 
19500 4e 55 4c 4c 2e 20 5e 4f 74 68 65 72 77 69 73 65  NULL. ^Otherwise
19510 2c 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  , the storage cl
19520 61 73 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c  ass of the resul
19530 74 0a 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  t.is determined 
19540 62 79 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20  by applying the 
19550 5b 72 75 6c 65 73 20 66 6f 72 20 64 65 74 65 72  [rules for deter
19560 6d 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 66  mining column af
19570 66 69 6e 69 74 79 5d 20 74 6f 0a 74 68 65 20 3c  finity] to.the <
19580 79 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65  yyterm>type-name
19590 3c 2f 79 79 74 65 72 6d 3e 2e 0a 0a 3c 74 61 62  </yyterm>...<tab
195a0 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  le border=1>.<tr
195b0 3e 0a 20 20 3c 74 68 3e 20 41 66 66 69 6e 69 74  >.  <th> Affinit
195c0 79 20 6f 66 20 3c 79 79 74 65 72 6d 3e 74 79 70  y of <yyterm>typ
195d0 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a  e-name</yyterm>.
195e0 20 20 3c 74 68 3e 20 43 6f 6e 76 65 72 73 69 6f    <th> Conversio
195f0 6e 20 50 72 6f 63 65 73 73 69 6e 67 0a 3c 74 72  n Processing.<tr
19600 3e 0a 20 20 3c 74 64 3e 20 4e 4f 4e 45 20 0a 20  >.  <td> NONE . 
19610 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67 20 61   <td> ^Casting a
19620 20 76 61 6c 75 65 20 74 6f 20 61 20 3c 79 79 74   value to a <yyt
19630 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c 2f 79  erm>type-name</y
19640 79 74 65 72 6d 3e 20 77 69 74 68 20 6e 6f 20 61  yterm> with no a
19650 66 66 69 6e 69 74 79 20 0a 20 20 63 61 75 73 65  ffinity .  cause
19660 73 20 74 68 65 20 76 61 6c 75 65 20 74 6f 0a 20  s the value to. 
19670 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
19680 74 6f 20 61 20 42 4c 4f 42 2e 20 20 5e 43 61 73  to a BLOB.  ^Cas
19690 74 69 6e 67 20 74 6f 20 61 20 42 4c 4f 42 20 63  ting to a BLOB c
196a0 6f 6e 73 69 73 74 73 20 6f 66 20 66 69 72 73 74  onsists of first
196b0 20 63 61 73 74 69 6e 67 0a 20 20 74 68 65 20 76   casting.  the v
196c0 61 6c 75 65 20 74 6f 20 54 45 58 54 20 69 6e 20  alue to TEXT in 
196d0 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 6f  the [encoding] o
196e0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
196f0 6f 6e 6e 65 63 74 69 6f 6e 2c 20 74 68 65 6e 0a  onnection, then.
19700 20 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74    interpreting t
19710 68 65 20 72 65 73 75 6c 74 69 6e 67 20 62 79 74  he resulting byt
19720 65 20 73 65 71 75 65 6e 63 65 20 61 73 20 61 20  e sequence as a 
19730 42 4c 4f 42 20 69 6e 73 74 65 61 64 20 6f 66 20  BLOB instead of 
19740 61 73 20 54 45 58 54 2e 0a 0a 3c 74 72 3e 0a 20  as TEXT...<tr>. 
19750 20 3c 74 64 3e 20 54 45 58 54 0a 20 20 3c 74 64   <td> TEXT.  <td
19760 3e 20 5e 54 6f 20 63 61 73 74 20 61 20 42 4c 4f  > ^To cast a BLO
19770 42 20 76 61 6c 75 65 20 74 6f 20 54 45 58 54 2c  B value to TEXT,
19780 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66   the sequence of
19790 20 62 79 74 65 73 20 74 68 61 74 20 6d 61 6b 65   bytes that make
197a0 20 75 70 20 74 68 65 0a 20 20 42 4c 4f 42 20 69   up the.  BLOB i
197b0 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  s interpreted as
197c0 20 74 65 78 74 20 65 6e 63 6f 64 65 64 20 75 73   text encoded us
197d0 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
197e0 20 65 6e 63 6f 64 69 6e 67 2e 0a 20 20 3c 70 3e   encoding..  <p>
197f0 0a 20 20 20 5e 43 61 73 74 69 6e 67 20 61 6e 20  .   ^Casting an 
19800 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20  INTEGER or REAL 
19810 76 61 6c 75 65 20 69 6e 74 6f 20 54 45 58 54 20  value into TEXT 
19820 72 65 6e 64 65 72 73 20 74 68 65 20 76 61 6c 75  renders the valu
19830 65 20 61 73 20 69 66 20 76 69 61 20 0a 20 20 20  e as if via .   
19840 20 5b 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e   [sqlite3_snprin
19850 74 66 28 29 5d 20 65 78 63 65 70 74 20 74 68 61  tf()] except tha
19860 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  t the resulting 
19870 54 45 58 54 20 75 73 65 73 20 74 68 65 20 5b 65  TEXT uses the [e
19880 6e 63 6f 64 69 6e 67 5d 20 6f 66 0a 20 20 20 20  ncoding] of.    
19890 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
198a0 6e 65 63 74 69 6f 6e 2e 0a 0a 3c 74 72 3e 0a 20  nection...<tr>. 
198b0 20 3c 74 64 3e 20 52 45 41 4c 0a 20 20 3c 74 64   <td> REAL.  <td
198c0 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20  > ^When casting 
198d0 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74 6f 20  a BLOB value to 
198e0 61 20 52 45 41 4c 2c 20 74 68 65 20 76 61 6c 75  a REAL, the valu
198f0 65 20 69 73 20 66 69 72 73 74 20 63 6f 6e 76 65  e is first conve
19900 72 74 65 64 20 74 6f 0a 20 20 20 20 20 20 20 20  rted to.        
19910 54 45 58 54 2e 0a 20 20 20 20 20 20 20 3c 70 3e  TEXT..       <p>
19920 5e 57 68 65 6e 20 63 61 73 74 69 6e 67 20 61 20  ^When casting a 
19930 54 45 58 54 20 76 61 6c 75 65 20 74 6f 20 52 45  TEXT value to RE
19940 41 4c 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20  AL, the longest 
19950 70 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20  possible prefix 
19960 6f 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76  of.        the v
19970 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
19980 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
19990 61 20 72 65 61 6c 20 6e 75 6d 62 65 72 20 69 73  a real number is
199a0 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 0a   extracted from.
199b0 20 20 20 20 20 20 20 20 74 68 65 20 54 45 58 54          the TEXT
199c0 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 72   value and the r
199d0 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f 72 65 64  emainder ignored
199e0 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e 67 20 73  . ^Any leading s
199f0 70 61 63 65 73 20 69 6e 20 74 68 65 0a 20 20 20  paces in the.   
19a00 20 20 20 20 20 54 45 58 54 20 76 61 6c 75 65 20       TEXT value 
19a10 61 72 65 20 69 67 6e 6f 72 65 64 20 77 68 65 6e  are ignored when
19a20 20 63 6f 6e 76 65 72 67 69 6e 67 20 66 72 6f 6d   converging from
19a30 20 54 45 58 54 20 74 6f 20 52 45 41 4c 2e 20 5e   TEXT to REAL. ^
19a40 28 49 66 20 74 68 65 72 65 20 69 73 0a 20 20 20  (If there is.   
19a50 20 20 20 20 20 6e 6f 20 70 72 65 66 69 78 20 74       no prefix t
19a60 68 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72  hat can be inter
19a70 70 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c  preted as a real
19a80 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73   number, the res
19a90 75 6c 74 20 6f 66 20 74 68 65 0a 20 20 20 20 20  ult of the.     
19aa0 20 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73     conversion is
19ab0 20 30 2e 30 2e 29 5e 0a 0a 3c 74 72 3e 0a 20 20   0.0.)^..<tr>.  
19ac0 3c 74 64 3e 20 49 4e 54 45 47 45 52 0a 20 20 3c  <td> INTEGER.  <
19ad0 74 64 3e 20 5e 57 68 65 6e 20 63 61 73 74 69 6e  td> ^When castin
19ae0 67 20 61 20 42 4c 4f 42 20 76 61 6c 75 65 20 74  g a BLOB value t
19af0 6f 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 76  o INTEGER, the v
19b00 61 6c 75 65 20 69 73 20 66 69 72 73 74 20 63 6f  alue is first co
19b10 6e 76 65 72 74 65 64 20 74 6f 0a 20 20 20 20 20  nverted to.     
19b20 20 20 20 54 45 58 54 2e 0a 20 20 20 20 20 20 20     TEXT..       
19b30 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69 6e 67  <p>^When casting
19b40 20 61 20 54 45 58 54 20 76 61 6c 75 65 20 74 6f   a TEXT value to
19b50 20 49 4e 54 45 47 45 52 2c 20 74 68 65 20 6c 6f   INTEGER, the lo
19b60 6e 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 70  ngest possible p
19b70 72 65 66 69 78 20 6f 66 0a 20 20 20 20 20 20 20  refix of.       
19b80 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20   the value that 
19b90 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
19ba0 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
19bb0 20 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61   number is extra
19bc0 63 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20  cted from.      
19bd0 20 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65    the TEXT value
19be0 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64   and the remaind
19bf0 65 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79  er ignored. ^Any
19c00 20 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20   leading spaces 
19c10 69 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54  in the.        T
19c20 45 58 54 20 76 61 6c 75 65 20 77 68 65 6e 20 63  EXT value when c
19c30 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20 54  onverting from T
19c40 45 58 54 20 74 6f 20 49 4e 54 45 47 45 52 20 61  EXT to INTEGER a
19c50 72 65 20 69 67 6e 6f 72 65 64 2e 20 5e 49 66 20  re ignored. ^If 
19c60 74 68 65 72 65 0a 20 20 20 20 20 20 20 20 69 73  there.        is
19c70 20 6e 6f 20 70 72 65 66 69 78 20 74 68 61 74 20   no prefix that 
19c80 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
19c90 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  ed as an integer
19ca0 20 6e 75 6d 62 65 72 2c 20 74 68 65 20 72 65 73   number, the res
19cb0 75 6c 74 0a 20 20 20 20 20 20 20 20 6f 66 20 74  ult.        of t
19cc0 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73  he conversion is
19cd0 20 30 2e 20 20 5e 49 66 20 74 68 65 20 70 72 65   0.  ^If the pre
19ce0 66 69 78 20 69 6e 74 65 67 65 72 20 69 73 20 67  fix integer is g
19cf0 72 65 61 74 65 72 20 74 68 61 6e 0a 20 20 20 20  reater than.    
19d00 20 20 20 20 2b 39 32 32 33 33 37 32 30 33 36 38      +92233720368
19d10 35 34 37 37 35 38 30 37 20 74 68 65 6e 20 74 68  54775807 then th
19d20 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
19d30 63 61 73 74 20 69 73 20 65 78 61 63 74 6c 79 0a  cast is exactly.
19d40 20 20 20 20 20 20 20 20 2b 39 32 32 33 33 37 32          +9223372
19d50 30 33 36 38 35 34 37 37 35 38 30 37 2e 20 20 5e  036854775807.  ^
19d60 53 69 6d 69 6c 61 72 6c 79 2c 20 69 66 20 74 68  Similarly, if th
19d70 65 20 70 72 65 66 69 78 20 69 6e 74 65 67 65 72  e prefix integer
19d80 20 69 73 0a 20 20 20 20 20 20 20 20 6c 65 73 73   is.        less
19d90 20 74 68 61 6e 20 2d 39 32 32 33 33 37 32 30 33   than -922337203
19da0 36 38 35 34 37 37 35 38 30 38 20 74 68 65 6e 20  6854775808 then 
19db0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
19dc0 65 20 63 61 73 74 20 69 73 0a 20 20 20 20 20 20  e cast is.      
19dd0 20 20 65 78 61 63 74 6c 79 20 2d 39 32 32 33 33    exactly -92233
19de0 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e 0a  72036854775808..
19df0 0a 20 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65  .        <p>^Whe
19e00 6e 20 63 61 73 74 69 6e 67 20 74 6f 20 49 4e 54  n casting to INT
19e10 45 47 45 52 2c 20 69 66 20 74 68 65 20 74 65 78  EGER, if the tex
19e20 74 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 66  t looks like a f
19e30 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 20 20  loating point.  
19e40 20 20 20 20 20 20 76 61 6c 75 65 20 77 69 74 68        value with
19e50 20 61 6e 20 65 78 70 6f 6e 65 6e 74 2c 20 74 68   an exponent, th
19e60 65 20 65 78 70 6f 6e 65 6e 74 20 77 69 6c 6c 20  e exponent will 
19e70 62 65 20 69 67 6e 6f 72 65 64 20 62 65 63 61 75  be ignored becau
19e80 73 65 20 69 74 20 69 73 0a 20 20 20 20 20 20 20  se it is.       
19e90 20 6e 6f 20 70 61 72 74 20 6f 66 20 74 68 65 20   no part of the 
19ea0 69 6e 74 65 67 65 72 20 70 72 65 66 69 78 2e 20  integer prefix. 
19eb0 20 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 20   ^For example,. 
19ec0 20 20 20 20 20 20 20 22 28 43 41 53 54 20 27 31         "(CAST '1
19ed0 32 33 65 2b 35 27 20 41 53 20 49 4e 54 45 47 45  23e+5' AS INTEGE
19ee0 52 29 22 20 72 65 73 75 6c 74 73 20 69 6e 20 31  R)" results in 1
19ef0 32 33 2c 20 6e 6f 74 20 69 6e 20 31 32 33 30 30  23, not in 12300
19f00 30 30 30 2e 0a 0a 20 20 20 20 20 20 20 20 3c 70  000...        <p
19f10 3e 20 5e 28 54 68 65 20 43 41 53 54 20 6f 70 65  > ^(The CAST ope
19f20 72 61 74 6f 72 20 75 6e 64 65 72 73 74 61 6e 64  rator understand
19f30 73 20 64 65 63 69 6d 61 6c 0a 20 20 20 20 20 20  s decimal.      
19f40 20 20 69 6e 74 65 67 65 72 73 20 6f 6e 6c 79 20    integers only 
19f50 26 6d 64 61 73 68 3b 20 63 6f 6e 76 65 72 73 69  &mdash; conversi
19f60 6f 6e 20 6f 66 20 5b 68 65 78 61 64 65 63 69 6d  on of [hexadecim
19f70 61 6c 20 69 6e 74 65 67 65 72 73 5d 20 73 74 6f  al integers] sto
19f80 70 73 20 0a 20 20 20 20 20 20 20 20 61 74 20 74  ps .        at t
19f90 68 65 20 22 78 22 20 69 6e 20 74 68 65 20 22 30  he "x" in the "0
19fa0 78 22 20 70 72 65 66 69 78 20 6f 66 20 74 68 65  x" prefix of the
19fb0 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74   hexadecimal int
19fc0 65 67 65 72 20 73 74 72 69 6e 67 20 0a 20 20 20  eger string .   
19fd0 20 20 20 20 20 61 6e 64 20 74 68 75 73 20 72 65       and thus re
19fe0 73 75 6c 74 20 6f 66 20 74 68 65 20 43 41 53 54  sult of the CAST
19ff0 20 69 73 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e   is always zero.
1a000 29 5e 0a 0a 20 20 20 20 20 20 3c 70 3e 5e 41 20  )^..      <p>^A 
1a010 63 61 73 74 20 6f 66 20 61 20 52 45 41 4c 20 76  cast of a REAL v
1a020 61 6c 75 65 20 69 6e 74 6f 20 61 6e 20 49 4e 54  alue into an INT
1a030 45 47 45 52 20 72 65 73 75 6c 74 73 20 69 6e 20  EGER results in 
1a040 74 68 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  the integer.    
1a050 20 20 62 65 74 77 65 65 6e 20 74 68 65 20 52 45    between the RE
1a060 41 4c 20 76 61 6c 75 65 20 61 6e 64 20 7a 65 72  AL value and zer
1a070 6f 20 74 68 61 74 20 69 73 20 63 6c 6f 73 65 73  o that is closes
1a080 74 20 74 6f 20 74 68 65 20 52 45 41 4c 20 76 61  t to the REAL va
1a090 6c 75 65 2e 0a 20 20 20 20 20 20 5e 49 66 20 61  lue..      ^If a
1a0a0 20 52 45 41 4c 20 69 73 20 67 72 65 61 74 65 72   REAL is greater
1a0b0 20 74 68 61 6e 20 74 68 65 20 67 72 65 61 74 65   than the greate
1a0c0 73 74 20 70 6f 73 73 69 62 6c 65 20 73 69 67 6e  st possible sign
1a0d0 65 64 0a 20 20 20 20 20 20 69 6e 74 65 67 65 72  ed.      integer
1a0e0 20 28 2b 39 32 32 33 33 37 32 30 33 36 38 35 34   (+9223372036854
1a0f0 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
1a100 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 67   result is the g
1a110 72 65 61 74 65 73 74 20 70 6f 73 73 69 62 6c 65  reatest possible
1a120 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e  .      signed in
1a130 74 65 67 65 72 20 61 6e 64 20 69 66 20 74 68 65  teger and if the
1a140 20 52 45 41 4c 20 69 73 20 6c 65 73 73 20 74 68   REAL is less th
1a150 61 6e 20 74 68 65 20 6c 65 61 73 74 20 70 6f 73  an the least pos
1a160 73 69 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20  sible signed.   
1a170 20 20 20 69 6e 74 65 67 65 72 20 28 2d 39 32 32     integer (-922
1a180 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
1a190 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
1a1a0 74 20 69 73 20 74 68 65 20 6c 65 61 73 74 20 70  t is the least p
1a1b0 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20 73 69  ossible.      si
1a1c0 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 0a 0a 20  gned integer... 
1a1d0 20 20 20 20 20 3c 70 3e 50 72 69 6f 72 20 74 6f       <p>Prior to
1a1e0 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
1a1f0 33 2e 38 2e 32 20 28 5b 64 61 74 65 6f 66 3a 33  3.8.2 ([dateof:3
1a200 2e 38 2e 32 5d 29 2c 0a 20 20 20 20 20 20 63 61  .8.2]),.      ca
1a210 73 74 69 6e 67 20 61 20 52 45 41 4c 20 76 61 6c  sting a REAL val
1a220 75 65 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a  ue greater than.
1a230 20 20 20 20 20 20 2b 39 32 32 33 33 37 32 30 33        +922337203
1a240 36 38 35 34 37 37 35 38 30 37 2e 30 20 69 6e 74  6854775807.0 int
1a250 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 73  o an integer res
1a260 75 6c 74 65 64 20 69 6e 20 74 68 65 20 6d 6f 73  ulted in the mos
1a270 74 20 6e 65 67 61 74 69 76 65 0a 20 20 20 20 20  t negative.     
1a280 20 69 6e 74 65 67 65 72 2c 20 2d 39 32 32 33 33   integer, -92233
1a290 37 32 30 33 36 38 35 34 37 37 35 38 30 38 2e 20  72036854775808. 
1a2a0 20 54 68 69 73 20 62 65 68 61 76 69 6f 72 20 77   This behavior w
1a2b0 61 73 20 6d 65 61 6e 74 20 74 6f 20 65 6d 75 6c  as meant to emul
1a2c0 61 74 65 20 74 68 65 0a 20 20 20 20 20 20 62 65  ate the.      be
1a2d0 68 61 76 69 6f 72 20 6f 66 20 78 38 36 2f 78 36  havior of x86/x6
1a2e0 34 20 68 61 72 64 77 61 72 65 20 77 68 65 6e 20  4 hardware when 
1a2f0 64 6f 69 6e 67 20 74 68 65 20 65 71 75 69 76 61  doing the equiva
1a300 6c 65 6e 74 20 63 61 73 74 2e 0a 0a 3c 74 72 3e  lent cast...<tr>
1a310 0a 20 20 3c 74 64 3e 20 4e 55 4d 45 52 49 43 0a  .  <td> NUMERIC.
1a320 20 20 3c 74 64 3e 20 5e 43 61 73 74 69 6e 67 20    <td> ^Casting 
1a330 61 20 54 45 58 54 20 6f 72 20 42 4c 4f 42 20 76  a TEXT or BLOB v
1a340 61 6c 75 65 20 69 6e 74 6f 20 4e 55 4d 45 52 49  alue into NUMERI
1a350 43 20 66 69 72 73 74 20 64 6f 65 73 20 61 20 66  C first does a f
1a360 6f 72 63 65 64 0a 20 20 20 63 6f 6e 76 65 72 73  orced.   convers
1a370 69 6f 6e 20 69 6e 74 6f 20 52 45 41 4c 20 62 75  ion into REAL bu
1a380 74 20 74 68 65 6e 20 66 75 72 74 68 65 72 20 63  t then further c
1a390 6f 6e 76 65 72 74 73 20 74 68 65 20 72 65 73 75  onverts the resu
1a3a0 6c 74 20 69 6e 74 6f 20 49 4e 54 45 47 45 52 20  lt into INTEGER 
1a3b0 69 66 0a 20 20 20 61 6e 64 20 6f 6e 6c 79 20 69  if.   and only i
1a3c0 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  f the conversion
1a3d0 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20 49 4e   from REAL to IN
1a3e0 54 45 47 45 52 20 69 73 20 6c 6f 73 73 6c 65 73  TEGER is lossles
1a3f0 73 20 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65  s and reversible
1a400 2e 0a 20 20 20 54 68 69 73 20 69 73 20 74 68 65  ..   This is the
1a410 20 6f 6e 6c 79 20 63 6f 6e 74 65 78 74 20 69 6e   only context in
1a420 20 53 51 4c 69 74 65 20 77 68 65 72 65 20 74 68   SQLite where th
1a430 65 20 4e 55 4d 45 52 49 43 20 61 6e 64 20 49 4e  e NUMERIC and IN
1a440 54 45 47 45 52 20 5b 61 66 66 69 6e 69 74 69 65  TEGER [affinitie
1a450 73 5d 0a 20 20 20 62 65 68 61 76 65 20 64 69 66  s].   behave dif
1a460 66 65 72 65 6e 74 6c 79 2e 0a 20 20 20 3c 70 3e  ferently..   <p>
1a470 20 5e 43 61 73 74 69 6e 67 20 61 20 52 45 41 4c   ^Casting a REAL
1a480 20 6f 72 20 49 4e 54 45 47 45 52 20 76 61 6c 75   or INTEGER valu
1a490 65 20 74 6f 20 4e 55 4d 45 52 49 43 20 69 73 20  e to NUMERIC is 
1a4a0 61 20 6e 6f 2d 6f 70 2c 20 65 76 65 6e 20 69 66  a no-op, even if
1a4b0 20 61 20 72 65 61 6c 0a 20 20 20 76 61 6c 75 65   a real.   value
1a4c0 20 63 6f 75 6c 64 20 62 65 20 6c 6f 73 73 6c 65   could be lossle
1a4d0 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
1a4e0 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 0a 3c  o an integer...<
1a4f0 2f 74 72 3e 0a 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  /tr>..</table>..
1a500 3c 70 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68  <p>^Note that th
1a510 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 63 61  e result from ca
1a520 73 74 69 6e 67 20 61 6e 79 20 6e 6f 6e 2d 42 4c  sting any non-BL
1a530 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20  OB value into a 
1a540 0a 42 4c 4f 42 20 61 6e 64 20 74 68 65 20 72 65  .BLOB and the re
1a550 73 75 6c 74 20 66 72 6f 6d 20 63 61 73 74 69 6e  sult from castin
1a560 67 20 61 6e 79 20 42 4c 4f 42 20 76 61 6c 75 65  g any BLOB value
1a570 20 69 6e 74 6f 20 61 20 6e 6f 6e 2d 42 4c 4f 42   into a non-BLOB
1a580 20 76 61 6c 75 65 0a 6d 61 79 20 62 65 20 64 69   value.may be di
1a590 66 66 65 72 65 6e 74 20 64 65 70 65 6e 64 69 6e  fferent dependin
1a5a0 67 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65  g on whether the
1a5b0 20 64 61 74 61 62 61 73 65 20 5b 65 6e 63 6f 64   database [encod
1a5c0 69 6e 67 5d 20 69 73 20 55 54 46 2d 38 2c 0a 55  ing] is UTF-8,.U
1a5d0 54 46 2d 31 36 62 65 2c 20 6f 72 20 55 54 46 2d  TF-16be, or UTF-
1a5e0 31 36 6c 65 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f  16le....<tcl>hd_
1a5f0 66 72 61 67 6d 65 6e 74 20 62 6f 6f 6c 65 61 6e  fragment boolean
1a600 65 78 70 72 20 7b 62 6f 6f 6c 65 61 6e 20 65 78  expr {boolean ex
1a610 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  pression}</tcl>.
1a620 3c 68 33 3e 42 6f 6f 6c 65 61 6e 20 45 78 70 72  <h3>Boolean Expr
1a630 65 73 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70  essions</h3>..<p
1a640 3e 54 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67  >The SQL languag
1a650 65 20 66 65 61 74 75 72 65 73 20 73 65 76 65 72  e features sever
1a660 61 6c 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72  al contexts wher
1a670 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  e an expression 
1a680 69 73 20 0a 65 76 61 6c 75 61 74 65 64 20 61 6e  is .evaluated an
1a690 64 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e  d the result con
1a6a0 76 65 72 74 65 64 20 74 6f 20 61 20 62 6f 6f 6c  verted to a bool
1a6b0 65 61 6e 20 28 74 72 75 65 20 6f 72 20 66 61 6c  ean (true or fal
1a6c0 73 65 29 20 76 61 6c 75 65 2e 20 54 68 65 73 65  se) value. These
1a6d0 0a 63 6f 6e 74 65 78 74 73 20 61 72 65 3a 0a 0a  .contexts are:..
1a6e0 20 20 3c 75 6c 3e 0a 20 20 20 20 3c 6c 69 3e 20    <ul>.    <li> 
1a6f0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
1a700 20 6f 66 20 61 20 53 45 4c 45 43 54 2c 20 55 50   of a SELECT, UP
1a710 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 20 73  DATE or DELETE s
1a720 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c  tatement,.    <l
1a730 69 3e 20 74 68 65 20 4f 4e 20 6f 72 20 55 53 49  i> the ON or USI
1a740 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  NG clause of a j
1a750 6f 69 6e 20 69 6e 20 61 20 53 45 4c 45 43 54 20  oin in a SELECT 
1a760 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20 20 3c  statement,.    <
1a770 6c 69 3e 20 74 68 65 20 48 41 56 49 4e 47 20 63  li> the HAVING c
1a780 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
1a790 54 20 73 74 61 74 65 6d 65 6e 74 2c 0a 20 20 20  T statement,.   
1a7a0 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e 20 63   <li> the WHEN c
1a7b0 6c 61 75 73 65 20 6f 66 20 61 6e 20 53 51 4c 20  lause of an SQL 
1a7c0 74 72 69 67 67 65 72 2c 20 61 6e 64 0a 20 20 20  trigger, and.   
1a7d0 20 3c 6c 69 3e 20 74 68 65 20 57 48 45 4e 20 63   <li> the WHEN c
1a7e0 6c 61 75 73 65 20 6f 72 20 63 6c 61 75 73 65 73  lause or clauses
1a7f0 20 6f 66 20 73 6f 6d 65 20 43 41 53 45 20 65 78   of some CASE ex
1a800 70 72 65 73 73 69 6f 6e 73 2e 0a 20 20 3c 2f 75  pressions..  </u
1a810 6c 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 63 6f 6e 76  l>..<p>^(To conv
1a820 65 72 74 20 74 68 65 20 72 65 73 75 6c 74 73 20  ert the results 
1a830 6f 66 20 61 6e 20 53 51 4c 20 65 78 70 72 65 73  of an SQL expres
1a840 73 69 6f 6e 20 74 6f 20 61 20 62 6f 6f 6c 65 61  sion to a boolea
1a850 6e 20 76 61 6c 75 65 2c 20 53 51 4c 69 74 65 0a  n value, SQLite.
1a860 66 69 72 73 74 20 63 61 73 74 73 20 74 68 65 20  first casts the 
1a870 72 65 73 75 6c 74 20 74 6f 20 61 20 4e 55 4d 45  result to a NUME
1a880 52 49 43 20 76 61 6c 75 65 20 69 6e 20 74 68 65  RIC value in the
1a890 20 73 61 6d 65 20 77 61 79 20 61 73 20 61 20 0a   same way as a .
1a8a0 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  [CAST expression
1a8b0 5d 2e 20 41 20 6e 75 6d 65 72 69 63 20 7a 65 72  ]. A numeric zer
1a8c0 6f 20 76 61 6c 75 65 20 28 69 6e 74 65 67 65 72  o value (integer
1a8d0 20 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c   value 0 or real
1a8e0 20 0a 76 61 6c 75 65 20 30 2e 30 29 20 69 73 20   .value 0.0) is 
1a8f0 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65  considered to be
1a900 20 66 61 6c 73 65 2e 20 20 41 20 4e 55 4c 4c 20   false.  A NULL 
1a910 76 61 6c 75 65 20 69 73 20 73 74 69 6c 6c 20 4e  value is still N
1a920 55 4c 4c 2e 0a 41 6c 6c 20 6f 74 68 65 72 20 76  ULL..All other v
1a930 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64  alues are consid
1a940 65 72 65 64 20 74 72 75 65 2e 29 5e 0a 0a 3c 70  ered true.)^..<p
1a950 3e 5e 28 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  >^(For example, 
1a960 74 68 65 20 76 61 6c 75 65 73 20 4e 55 4c 4c 2c  the values NULL,
1a970 20 30 2e 30 2c 20 30 2c 20 27 65 6e 67 6c 69 73   0.0, 0, 'englis
1a980 68 27 20 61 6e 64 20 27 30 27 20 61 72 65 20 61  h' and '0' are a
1a990 6c 6c 20 63 6f 6e 73 69 64 65 72 65 64 0a 74 6f  ll considered.to
1a9a0 20 62 65 20 66 61 6c 73 65 2e 29 5e 20 5e 28 56   be false.)^ ^(V
1a9b0 61 6c 75 65 73 20 31 2c 20 31 2e 30 2c 20 30 2e  alues 1, 1.0, 0.
1a9c0 31 2c 20 2d 30 2e 31 20 61 6e 64 20 27 31 65 6e  1, -0.1 and '1en
1a9d0 67 6c 69 73 68 27 20 61 72 65 20 63 6f 6e 73 69  glish' are consi
1a9e0 64 65 72 65 64 20 74 6f 20 0a 62 65 20 74 72 75  dered to .be tru
1a9f0 65 2e 29 5e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69  e.)^..<p>Beginni
1aa00 6e 67 20 77 69 74 68 20 53 51 4c 69 74 65 20 33  ng with SQLite 3
1aa10 2e 32 33 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33  .23.0 ([dateof:3
1aa20 2e 32 33 2e 30 5d 29 2c 20 53 51 4c 69 74 65 20  .23.0]), SQLite 
1aa30 72 65 63 6f 67 6e 69 7a 65 73 20 74 68 65 0a 69  recognizes the.i
1aa40 64 65 6e 74 69 66 69 65 72 73 20 22 54 52 55 45  dentifiers "TRUE
1aa50 22 20 61 6e 64 20 22 46 41 4c 53 45 22 20 61 73  " and "FALSE" as
1aa60 20 62 6f 6f 6c 65 61 6e 20 6c 69 74 65 72 61 6c   boolean literal
1aa70 73 2c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  s, if and only i
1aa80 66 20 74 68 6f 73 65 0a 69 64 65 6e 74 69 66 69  f those.identifi
1aa90 65 72 73 20 61 72 65 20 6e 6f 74 20 61 6c 72 65  ers are not alre
1aaa0 61 64 79 20 75 73 65 64 20 66 6f 72 20 73 6f 6d  ady used for som
1aab0 65 20 6f 74 68 65 72 20 6d 65 61 6e 69 6e 67 2e  e other meaning.
1aac0 20 20 49 66 20 74 68 65 72 65 20 61 6c 72 65 61    If there alrea
1aad0 64 79 0a 65 78 69 73 74 73 20 63 6f 6c 75 6d 6e  dy.exists column
1aae0 73 20 6f 72 20 74 61 62 6c 65 73 20 6f 72 20 6f  s or tables or o
1aaf0 74 68 65 72 20 6f 62 6a 65 63 74 73 20 6e 61 6d  ther objects nam
1ab00 65 64 20 54 52 55 45 20 6f 72 20 46 41 4c 53 45  ed TRUE or FALSE
1ab10 2c 20 74 68 65 6e 20 66 6f 72 0a 74 68 65 20 73  , then for.the s
1ab20 61 6b 65 20 6f 66 20 62 61 63 6b 77 61 72 64 73  ake of backwards
1ab30 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20   compatibility, 
1ab40 74 68 65 20 54 52 55 45 20 61 6e 64 20 46 41 4c  the TRUE and FAL
1ab50 53 45 20 69 64 65 6e 74 69 66 69 65 72 73 20 72  SE identifiers r
1ab60 65 66 65 72 0a 74 6f 20 74 68 6f 73 65 20 6f 74  efer.to those ot
1ab70 68 65 72 20 6f 62 6a 65 63 74 73 2c 20 6e 6f 74  her objects, not
1ab80 20 74 6f 20 74 68 65 20 62 6f 6f 6c 65 61 6e 20   to the boolean 
1ab90 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 54 68 65 20  values...<p>The 
1aba0 62 6f 6f 6c 65 61 6e 20 69 64 65 6e 74 69 66 69  boolean identifi
1abb0 65 72 73 20 54 52 55 45 20 61 6e 64 20 46 41 4c  ers TRUE and FAL
1abc0 53 45 20 61 72 65 20 75 73 75 61 6c 6c 79 20 6a  SE are usually j
1abd0 75 73 74 20 61 6c 69 61 73 65 73 20 66 6f 72 0a  ust aliases for.
1abe0 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
1abf0 65 73 20 31 20 61 6e 64 20 30 2c 20 72 65 73 70  es 1 and 0, resp
1ac00 65 63 74 69 76 65 6c 79 2e 20 20 48 6f 77 65 76  ectively.  Howev
1ac10 65 72 2c 20 69 66 20 54 52 55 45 20 6f 72 20 46  er, if TRUE or F
1ac20 41 4c 53 45 0a 6f 63 63 75 72 20 6f 6e 20 74 68  ALSE.occur on th
1ac30 65 20 72 69 67 68 74 2d 68 61 6e 64 20 73 69 64  e right-hand sid
1ac40 65 20 6f 66 20 61 6e 20 49 53 20 6f 70 65 72 61  e of an IS opera
1ac50 74 6f 72 2c 20 74 68 65 6e 20 74 68 65 79 20 66  tor, then they f
1ac60 6f 72 6d 20 6e 65 77 0a 75 6e 61 72 79 20 70 6f  orm new.unary po
1ac70 73 74 66 69 78 20 6f 70 65 72 61 74 6f 72 73 20  stfix operators 
1ac80 22 49 53 20 54 52 55 45 22 20 61 6e 64 20 22 49  "IS TRUE" and "I
1ac90 53 20 46 41 4c 53 45 22 20 77 68 69 63 68 20 74  S FALSE" which t
1aca0 65 73 74 20 74 68 65 20 62 6f 6f 6c 65 61 6e 0a  est the boolean.
1acb0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 65  value of the ope
1acc0 72 61 6e 64 20 6f 6e 20 74 68 65 20 6c 65 66 74  rand on the left
1acd0 2e 0a 0a 3c 68 33 3e 46 75 6e 63 74 69 6f 6e 73  ...<h3>Functions
1ace0 3c 2f 68 33 3e 0a 3c 70 3e 53 51 4c 69 74 65 20  </h3>.<p>SQLite 
1acf0 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 5b 63  supports many [c
1ad00 6f 72 65 66 75 6e 63 7c 73 69 6d 70 6c 65 5d 2c  orefunc|simple],
1ad10 20 5b 61 67 67 66 75 6e 63 7c 61 67 67 72 65 67   [aggfunc|aggreg
1ad20 61 74 65 5d 2c 0a 61 6e 64 20 5b 77 69 6e 64 6f  ate],.and [windo
1ad30 77 20 66 75 6e 63 74 69 6f 6e 73 7c 77 69 6e 64  w functions|wind
1ad40 6f 77 5d 0a 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ow].SQL function
1ad50 73 2e 20 20 46 6f 72 20 70 72 65 73 65 6e 74 61  s.  For presenta
1ad60 74 69 6f 6e 20 70 75 72 70 6f 73 65 73 2c 20 73  tion purposes, s
1ad70 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 73 20  imple functions 
1ad80 61 72 65 20 66 75 72 74 68 65 72 0a 73 75 62 64  are further.subd
1ad90 69 76 69 64 65 64 20 69 6e 74 6f 20 5b 63 6f 72  ivided into [cor
1ada0 65 66 75 6e 63 20 7c 20 63 6f 72 65 20 66 75 6e  efunc | core fun
1adb0 63 74 69 6f 6e 73 5d 2c 20 5b 64 61 74 65 66 75  ctions], [datefu
1adc0 6e 63 7c 64 61 74 65 2d 74 69 6d 65 20 66 75 6e  nc|date-time fun
1add0 63 74 69 6f 6e 73 5d 2c 0a 61 6e 64 20 5b 6a 73  ctions],.and [js
1ade0 6f 6e 31 7c 4a 53 4f 4e 20 66 75 6e 63 74 69 6f  on1|JSON functio
1adf0 6e 73 5d 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e  ns]..Application
1ae00 73 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75  s can add new fu
1ae10 6e 63 74 69 6f 6e 73 2c 20 77 72 69 74 74 65 6e  nctions, written
1ae20 20 69 6e 20 43 2f 43 2b 2b 2c 20 75 73 69 6e 67   in C/C++, using
1ae30 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f 63 72   the.[sqlite3_cr
1ae40 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
1ae50 20 69 6e 74 65 72 66 61 63 65 2e 0a 3c 2f 70 3e   interface..</p>
1ae60 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 70 6f 73 73  ..<p>^It is poss
1ae70 69 62 6c 65 20 74 6f 20 68 61 76 65 20 61 6e 20  ible to have an 
1ae80 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1ae90 6f 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  on with the same
1aea0 20 6e 61 6d 65 20 61 73 20 61 0a 73 69 6d 70 6c   name as a.simpl
1aeb0 65 20 66 75 6e 63 74 69 6f 6e 2c 20 61 73 20 6c  e function, as l
1aec0 6f 6e 67 20 61 73 20 74 68 65 20 6e 75 6d 62 65  ong as the numbe
1aed0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 66  r of arguments f
1aee0 6f 72 20 74 68 65 20 74 77 6f 20 66 6f 72 6d 73  or the two forms
1aef0 20 6f 66 20 74 68 65 0a 66 75 6e 63 74 69 6f 6e   of the.function
1af00 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 20   are different. 
1af10 20 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74   ^For example, t
1af20 68 65 20 5b 61 67 67 5f 6d 61 78 7c 6d 61 78 28  he [agg_max|max(
1af30 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  )] function with
1af40 20 61 0a 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a.single argume
1af50 6e 74 20 69 73 20 61 6e 20 61 67 67 72 65 67 61  nt is an aggrega
1af60 74 65 20 61 6e 64 20 74 68 65 20 5b 6d 61 78 28  te and the [max(
1af70 29 5d 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  )] function with
1af80 20 74 77 6f 20 6f 72 20 6d 6f 72 65 0a 61 72 67   two or more.arg
1af90 75 6d 65 6e 74 73 20 69 73 20 61 20 73 69 6d 70  uments is a simp
1afa0 6c 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 3c 74  le function...<t
1afb0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
1afc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1afd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1afe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b000 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 6f 72 65  ##.Section {Core
1b010 20 46 75 6e 63 74 69 6f 6e 73 7d 20 63 6f 72 65   Functions} core
1b020 66 75 6e 63 20 7b 2a 63 6f 72 65 66 75 6e 63 7d  func {*corefunc}
1b030 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61  .unset -nocompla
1b040 69 6e 20 63 6f 72 65 66 75 6e 63 73 65 74 0a 70  in corefuncset.p
1b050 72 6f 63 20 66 75 6e 63 64 65 66 20 7b 73 79 6e  roc funcdef {syn
1b060 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73  tax keywords des
1b070 63 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 63 6f  c} {.  global co
1b080 72 65 66 75 6e 63 73 65 74 0a 20 20 72 65 67 65  refuncset.  rege
1b090 78 70 20 7b 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 73  xp {^[a-z_]+} $s
1b0a0 79 6e 74 61 78 20 62 61 73 65 73 79 6e 74 61 78  yntax basesyntax
1b0b0 0a 20 20 73 65 74 20 63 6f 72 65 66 75 6e 63 73  .  set corefuncs
1b0c0 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20  et($basesyntax) 
1b0d0 5b 6c 69 73 74 20 24 73 79 6e 74 61 78 20 24 6b  [list $syntax $k
1b0e0 65 79 77 6f 72 64 73 20 24 64 65 73 63 5d 0a 7d  eywords $desc].}
1b0f0 0a 66 75 6e 63 64 65 66 20 7b 61 62 73 28 58 29  .funcdef {abs(X)
1b100 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 61 62  } {} {.  ^The ab
1b110 73 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  s(X) function re
1b120 74 75 72 6e 73 20 74 68 65 20 61 62 73 6f 6c 75  turns the absolu
1b130 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  te value of the 
1b140 6e 75 6d 65 72 69 63 0a 20 20 61 72 67 75 6d 65  numeric.  argume
1b150 6e 74 20 58 2e 20 20 5e 41 62 73 28 58 29 20 72  nt X.  ^Abs(X) r
1b160 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 58  eturns NULL if X
1b170 20 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 28 41   is NULL. .  ^(A
1b180 62 73 28 58 29 20 72 65 74 75 72 6e 73 20 30 2e  bs(X) returns 0.
1b190 30 20 69 66 20 58 20 69 73 20 61 20 73 74 72 69  0 if X is a stri
1b1a0 6e 67 20 6f 72 20 62 6c 6f 62 0a 20 20 74 68 61  ng or blob.  tha
1b1b0 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  t cannot be conv
1b1c0 65 72 74 65 64 20 74 6f 20 61 20 6e 75 6d 65 72  erted to a numer
1b1d0 69 63 20 76 61 6c 75 65 2e 29 5e 20 20 5e 49 66  ic value.)^  ^If
1b1e0 20 58 20 69 73 20 74 68 65 20 0a 20 20 69 6e 74   X is the .  int
1b1f0 65 67 65 72 20 2d 39 32 32 33 33 37 32 30 33 36  eger -9223372036
1b200 38 35 34 37 37 35 38 30 38 20 74 68 65 6e 20 61  854775808 then a
1b210 62 73 28 58 29 20 74 68 72 6f 77 73 20 61 6e 20  bs(X) throws an 
1b220 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
1b230 0a 20 20 65 72 72 6f 72 20 73 69 6e 63 65 20 74  .  error since t
1b240 68 65 72 65 20 69 73 20 6e 6f 20 65 71 75 69 76  here is no equiv
1b250 61 6c 65 6e 74 20 70 6f 73 69 74 69 76 65 20 36  alent positive 6
1b260 34 2d 62 69 74 20 74 77 6f 20 63 6f 6d 70 6c 65  4-bit two comple
1b270 6d 65 6e 74 20 76 61 6c 75 65 2e 0a 7d 0a 0a 66  ment value..}..f
1b280 75 6e 63 64 65 66 20 7b 63 68 61 6e 67 65 73 28  uncdef {changes(
1b290 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 63  )} {} {.  ^The c
1b2a0 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
1b2b0 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
1b2c0 6d 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65  mber of database
1b2d0 20 72 6f 77 73 20 74 68 61 74 20 77 65 72 65 20   rows that were 
1b2e0 63 68 61 6e 67 65 64 0a 20 20 6f 72 20 69 6e 73  changed.  or ins
1b2f0 65 72 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  erted or deleted
1b300 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
1b310 65 6e 74 6c 79 20 63 6f 6d 70 6c 65 74 65 64 20  ently completed 
1b320 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 0a  INSERT, DELETE,.
1b330 20 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74    or UPDATE stat
1b340 65 6d 65 6e 74 2c 20 65 78 63 6c 75 73 69 76 65  ement, exclusive
1b350 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 69   of statements i
1b360 6e 20 6c 6f 77 65 72 2d 6c 65 76 65 6c 20 74 72  n lower-level tr
1b370 69 67 67 65 72 73 2e 0a 20 20 5e 54 68 65 20 63  iggers..  ^The c
1b380 68 61 6e 67 65 73 28 29 20 53 51 4c 20 66 75 6e  hanges() SQL fun
1b390 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
1b3a0 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
1b3b0 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
1b3c0 5d 0a 20 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69  ].  C/C++ functi
1b3d0 6f 6e 20 61 6e 64 20 68 65 6e 63 65 20 66 6f 6c  on and hence fol
1b3e0 6c 6f 77 73 20 74 68 65 20 73 61 6d 65 20 72 75  lows the same ru
1b3f0 6c 65 73 20 66 6f 72 20 63 6f 75 6e 74 69 6e 67  les for counting
1b400 20 63 68 61 6e 67 65 73 2e 0a 7d 0a 0a 66 75 6e   changes..}..fun
1b410 63 64 65 66 20 7b 63 68 61 72 28 58 31 2c 58 32  cdef {char(X1,X2
1b420 2c 2e 2e 2e 2c 58 4e 29 7d 20 7b 7d 20 7b 0a 20  ,...,XN)} {} {. 
1b430 20 5e 28 54 68 65 20 63 68 61 72 28 58 31 2c 58   ^(The char(X1,X
1b440 32 2c 2e 2e 2e 2c 58 4e 29 20 66 75 6e 63 74 69  2,...,XN) functi
1b450 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1b460 69 6e 67 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20  ing composed of 
1b470 63 68 61 72 61 63 74 65 72 73 20 68 61 76 69 6e  characters havin
1b480 67 20 74 68 65 0a 20 20 20 75 6e 69 63 6f 64 65  g the.   unicode
1b490 20 63 6f 64 65 20 70 6f 69 6e 74 20 76 61 6c 75   code point valu
1b4a0 65 73 20 6f 66 20 69 6e 74 65 67 65 72 73 20 58  es of integers X
1b4b0 31 20 74 68 72 6f 75 67 68 20 58 4e 2c 20 72 65  1 through XN, re
1b4c0 73 70 65 63 74 69 76 65 6c 79 2e 29 5e 0a 7d 0a  spectively.)^.}.
1b4d0 0a 66 75 6e 63 64 65 66 20 7b 63 6f 61 6c 65 73  .funcdef {coales
1b4e0 63 65 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 7d 20  ce(X,Y,...)} {} 
1b4f0 7b 0a 20 20 5e 54 68 65 20 63 6f 61 6c 65 73 63  {.  ^The coalesc
1b500 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  e() function ret
1b510 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69  urns a copy of i
1b520 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  ts first non-NUL
1b530 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f 72 0a 20  L argument, or. 
1b540 20 4e 55 4c 4c 20 69 66 20 61 6c 6c 20 61 72 67   NULL if all arg
1b550 75 6d 65 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e  uments are NULL.
1b560 20 20 5e 43 6f 61 6c 65 73 63 65 28 29 20 6d 75    ^Coalesce() mu
1b570 73 74 20 68 61 76 65 20 61 74 20 6c 65 61 73 74  st have at least
1b580 20 0a 20 20 32 20 61 72 67 75 6d 65 6e 74 73 2e   .  2 arguments.
1b590 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 6c 6f  .}..funcdef {glo
1b5a0 62 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  b(X,Y)} {} {.  ^
1b5b0 54 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66 75  The glob(X,Y) fu
1b5c0 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76 61  nction is equiva
1b5d0 6c 65 6e 74 20 74 6f 20 74 68 65 0a 20 20 65 78  lent to the.  ex
1b5e0 70 72 65 73 73 69 6f 6e 20 22 3c 62 3e 59 20 47  pression "<b>Y G
1b5f0 4c 4f 42 20 58 3c 2f 62 3e 22 2e 0a 20 20 4e 6f  LOB X</b>"..  No
1b600 74 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e  te that the X an
1b610 64 20 59 20 61 72 67 75 6d 65 6e 74 73 20 61 72  d Y arguments ar
1b620 65 20 72 65 76 65 72 73 65 64 20 69 6e 20 74 68  e reversed in th
1b630 65 20 67 6c 6f 62 28 29 20 66 75 6e 63 74 69 6f  e glob() functio
1b640 6e 0a 20 20 72 65 6c 61 74 69 76 65 20 74 6f 20  n.  relative to 
1b650 74 68 65 20 69 6e 66 69 78 20 5b 47 4c 4f 42 5d  the infix [GLOB]
1b660 20 6f 70 65 72 61 74 6f 72 2e 20 20 59 20 69 73   operator.  Y is
1b670 20 74 68 65 20 73 74 72 69 6e 67 20 61 6e 64 20   the string and 
1b680 58 20 69 73 20 74 68 65 0a 20 20 70 61 74 74 65  X is the.  patte
1b690 72 6e 2e 20 20 53 6f 2c 20 66 6f 72 20 65 78 61  rn.  So, for exa
1b6a0 6d 70 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  mple, the follow
1b6b0 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ing expressions 
1b6c0 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a  are equivalent:.
1b6d0 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70    <blockquote><p
1b6e0 72 65 3e 0a 20 20 20 20 20 6e 61 6d 65 20 47 4c  re>.     name GL
1b6f0 4f 42 20 27 2a 68 65 6c 69 75 6d 2a 27 0a 20 20  OB '*helium*'.  
1b700 20 20 20 67 6c 6f 62 28 27 2a 68 65 6c 69 75 6d     glob('*helium
1b710 2a 27 2c 6e 61 6d 65 29 0a 20 20 3c 2f 70 72 65  *',name).  </pre
1b720 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ></blockquote>. 
1b730 20 3c 70 3e 5e 49 66 20 74 68 65 20 5b 73 71 6c   <p>^If the [sql
1b740 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
1b750 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63  tion()] interfac
1b760 65 20 69 73 20 75 73 65 64 20 74 6f 0a 20 20 6f  e is used to.  o
1b770 76 65 72 72 69 64 65 20 74 68 65 20 67 6c 6f 62  verride the glob
1b780 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 77  (X,Y) function w
1b790 69 74 68 20 61 6e 20 61 6c 74 65 72 6e 61 74 69  ith an alternati
1b7a0 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ve implementatio
1b7b0 6e 20 74 68 65 6e 0a 20 20 74 68 65 20 5b 47 4c  n then.  the [GL
1b7c0 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20 77 69 6c  OB] operator wil
1b7d0 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 61 6c 74  l invoke the alt
1b7e0 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65  ernative impleme
1b7f0 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63  ntation..}..func
1b800 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c 59 29  def {ifnull(X,Y)
1b810 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 66  } {} {.  ^The if
1b820 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e 20  null() function 
1b830 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f  returns a copy o
1b840 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f 6e 2d  f its first non-
1b850 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c 20 6f  NULL argument, o
1b860 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f 74 68  r.  NULL if both
1b870 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 4e   arguments are N
1b880 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28 29 20  ULL.  ^Ifnull() 
1b890 6d 75 73 74 20 68 61 76 65 20 65 78 61 63 74 6c  must have exactl
1b8a0 79 20 32 20 61 72 67 75 6d 65 6e 74 73 2e 0a 20  y 2 arguments.. 
1b8b0 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20 66   ^The ifnull() f
1b8c0 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69 76  unction is equiv
1b8d0 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c 65 73  alent to [coales
1b8e0 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f 20 61  ce()] with two a
1b8f0 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e  rguments..}..fun
1b900 63 64 65 66 20 7b 69 6e 73 74 72 28 58 2c 59 29  cdef {instr(X,Y)
1b910 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 69 6e  } {} {.  ^The in
1b920 73 74 72 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  str(X,Y) functio
1b930 6e 20 66 69 6e 64 73 20 74 68 65 20 66 69 72 73  n finds the firs
1b940 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66 20  t occurrence of 
1b950 73 74 72 69 6e 67 20 59 20 77 69 74 68 69 6e 20  string Y within 
1b960 0a 20 20 73 74 72 69 6e 67 20 58 20 61 6e 64 20  .  string X and 
1b970 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
1b980 65 72 20 6f 66 20 70 72 69 6f 72 20 63 68 61 72  er of prior char
1b990 61 63 74 65 72 73 20 70 6c 75 73 20 31 2c 20 6f  acters plus 1, o
1b9a0 72 20 30 20 69 66 0a 20 20 59 20 69 73 20 6e 6f  r 0 if.  Y is no
1b9b0 77 68 65 72 65 20 66 6f 75 6e 64 20 77 69 74 68  where found with
1b9c0 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20 69 66 20  in X..  ^Or, if 
1b9d0 58 20 61 6e 64 20 59 20 61 72 65 20 62 6f 74 68  X and Y are both
1b9e0 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20 69 6e 73   BLOBs, then ins
1b9f0 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20  tr(X,Y) returns 
1ba00 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68 61 6e 20  one.  more than 
1ba10 74 68 65 20 6e 75 6d 62 65 72 20 62 79 74 65 73  the number bytes
1ba20 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 66 69   prior to the fi
1ba30 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f  rst occurrence o
1ba40 66 20 59 2c 20 6f 72 20 30 20 69 66 0a 20 20 59  f Y, or 0 if.  Y
1ba50 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63 75 72 20   does not occur 
1ba60 61 6e 79 77 68 65 72 65 20 77 69 74 68 69 6e 20  anywhere within 
1ba70 58 2e 0a 20 20 5e 49 66 20 62 6f 74 68 20 61 72  X..  ^If both ar
1ba80 67 75 6d 65 6e 74 73 20 58 20 61 6e 64 20 59 20  guments X and Y 
1ba90 74 6f 20 69 6e 73 74 72 28 58 2c 59 29 20 61 72  to instr(X,Y) ar
1baa0 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e 64 20 61  e non-NULL and a
1bab0 72 65 20 6e 6f 74 20 42 4c 4f 42 73 0a 20 20 74  re not BLOBs.  t
1bac0 68 65 6e 20 62 6f 74 68 20 61 72 65 20 69 6e 74  hen both are int
1bad0 65 72 70 72 65 74 65 64 20 61 73 20 73 74 72 69  erpreted as stri
1bae0 6e 67 73 2e 0a 20 20 5e 49 66 20 65 69 74 68 65  ngs..  ^If eithe
1baf0 72 20 58 20 6f 72 20 59 20 61 72 65 20 4e 55 4c  r X or Y are NUL
1bb00 4c 20 69 6e 20 69 6e 73 74 72 28 58 2c 59 29 20  L in instr(X,Y) 
1bb10 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
1bb20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75 6e 63  is NULL..}..func
1bb30 64 65 66 20 7b 68 65 78 28 58 29 7d 20 7b 7d 20  def {hex(X)} {} 
1bb40 7b 0a 20 20 5e 54 68 65 20 68 65 78 28 29 20 66  {.  ^The hex() f
1bb50 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70 72 65  unction interpre
1bb60 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20  ts its argument 
1bb70 61 73 20 61 20 42 4c 4f 42 20 61 6e 64 20 72 65  as a BLOB and re
1bb80 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67  turns.  a string
1bb90 20 77 68 69 63 68 20 69 73 20 74 68 65 20 75 70   which is the up
1bba0 70 65 72 2d 63 61 73 65 20 68 65 78 61 64 65 63  per-case hexadec
1bbb0 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67 20 6f  imal rendering o
1bbc0 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
1bbd0 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a 7d 0a  .  that blob..}.
1bbe0 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74 5f 69  .funcdef {last_i
1bbf0 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d 20 7b  nsert_rowid()} {
1bc00 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f  } {.  ^The last_
1bc10 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
1bc20 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1bc30 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20 6f 66  the [ROWID].  of
1bc40 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20 69 6e   the last row in
1bc50 73 65 72 74 20 66 72 6f 6d 20 74 68 65 20 64 61  sert from the da
1bc60 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
1bc70 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b 65 64 20  n which invoked 
1bc80 74 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 0a  the.  function..
1bc90 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e 73 65    ^The last_inse
1bca0 72 74 5f 72 6f 77 69 64 28 29 20 53 51 4c 20 66  rt_rowid() SQL f
1bcb0 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
1bcc0 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a  pper around the.
1bcd0 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f    [sqlite3_last_
1bce0 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 5d 20  insert_rowid()] 
1bcf0 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 20  C/C++ interface 
1bd00 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e  function..}..fun
1bd10 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58 29 7d  cdef {length(X)}
1bd20 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20 61 20 73   {} {.  ^For a s
1bd30 74 72 69 6e 67 20 76 61 6c 75 65 20 58 2c 20 74  tring value X, t
1bd40 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e  he length(X) fun
1bd50 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1bd60 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a 20 20 63  e number of .  c
1bd70 68 61 72 61 63 74 65 72 73 20 28 6e 6f 74 20 62  haracters (not b
1bd80 79 74 65 73 29 20 69 6e 20 58 20 70 72 69 6f 72  ytes) in X prior
1bd90 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55   to the first NU
1bda0 4c 20 63 68 61 72 61 63 74 65 72 2e 0a 20 20 53  L character..  S
1bdb0 69 6e 63 65 20 53 51 4c 69 74 65 20 73 74 72 69  ince SQLite stri
1bdc0 6e 67 73 20 64 6f 20 6e 6f 74 20 6e 6f 72 6d 61  ngs do not norma
1bdd0 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 4e 55 4c 20  lly contain NUL 
1bde0 63 68 61 72 61 63 74 65 72 73 2c 20 74 68 65 20  characters, the 
1bdf0 6c 65 6e 67 74 68 28 58 29 0a 20 20 66 75 6e 63  length(X).  func
1be00 74 69 6f 6e 20 77 69 6c 6c 20 75 73 75 61 6c 6c  tion will usuall
1be10 79 20 72 65 74 75 72 6e 20 74 68 65 20 74 6f 74  y return the tot
1be20 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  al number of cha
1be30 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73  racters in the s
1be40 74 72 69 6e 67 20 58 2e 0a 20 20 5e 46 6f 72 20  tring X..  ^For 
1be50 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 58 2c 20  a blob value X, 
1be60 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75 72 6e  length(X) return
1be70 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1be80 62 79 74 65 73 20 69 6e 20 74 68 65 20 62 6c 6f  bytes in the blo
1be90 62 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 4e 55  b..  ^If X is NU
1bea0 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68 28 58  LL then length(X
1beb0 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e 49 66  ) is NULL..  ^If
1bec0 20 58 20 69 73 20 6e 75 6d 65 72 69 63 20 74 68   X is numeric th
1bed0 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74  en length(X) ret
1bee0 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74 68 20  urns the length 
1bef0 6f 66 20 61 20 73 74 72 69 6e 67 0a 20 20 72 65  of a string.  re
1bf00 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
1bf10 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  X..}..funcdef {l
1bf20 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28 58 2c  ike(X,Y) like(X,
1bf30 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  Y,Z)} {} {.  ^Th
1bf40 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f  e like() functio
1bf50 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  n is used to imp
1bf60 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 22 3c 62  lement the.  "<b
1bf70 3e 59 20 4c 49 4b 45 20 58 20 26 23 39 31 3b 45  >Y LIKE X &#91;E
1bf80 53 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f 62 3e  SCAPE Z&#93;</b>
1bf90 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 0a 20  " expression. . 
1bfa0 20 5e 49 66 20 74 68 65 20 6f 70 74 69 6f 6e 61   ^If the optiona
1bfb0 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73 65 20  l ESCAPE clause 
1bfc0 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e  is present, then
1bfd0 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20 66 75   the.  like() fu
1bfe0 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f 6b 65  nction is invoke
1bff0 64 20 77 69 74 68 20 74 68 72 65 65 20 61 72 67  d with three arg
1c000 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65 72 77  uments.  ^Otherw
1c010 69 73 65 2c 20 69 74 20 69 73 0a 20 20 69 6e 76  ise, it is.  inv
1c020 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20 61 72  oked with two ar
1c030 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20 4e 6f  guments only. No
1c040 74 65 20 74 68 61 74 20 74 68 65 20 58 20 61 6e  te that the X an
1c050 64 20 59 20 70 61 72 61 6d 65 74 65 72 73 20 61  d Y parameters a
1c060 72 65 0a 20 20 72 65 76 65 72 73 65 64 20 69 6e  re.  reversed in
1c070 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63   the like() func
1c080 74 69 6f 6e 20 72 65 6c 61 74 69 76 65 20 74 6f  tion relative to
1c090 20 74 68 65 20 69 6e 66 69 78 20 5b 4c 49 4b 45   the infix [LIKE
1c0a0 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20 58 20  ] operator..  X 
1c0b0 69 73 20 74 68 65 20 70 61 74 74 65 72 6e 20 61  is the pattern a
1c0c0 6e 64 20 59 20 69 73 20 74 68 65 20 73 74 72 69  nd Y is the stri
1c0d0 6e 67 20 74 6f 20 6d 61 74 63 68 20 61 67 61 69  ng to match agai
1c0e0 6e 73 74 20 74 68 61 74 20 70 61 74 74 65 72 6e  nst that pattern
1c0f0 2e 0a 20 20 48 65 6e 63 65 2c 20 74 68 65 20 66  ..  Hence, the f
1c100 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65 73 73  ollowing express
1c110 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76 61 6c  ions are equival
1c120 65 6e 74 3a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f  ent:.  <blockquo
1c130 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 6e 61  te><pre>.     na
1c140 6d 65 20 4c 49 4b 45 20 27 25 6e 65 6f 6e 25 27  me LIKE '%neon%'
1c150 0a 20 20 20 20 20 6c 69 6b 65 28 27 25 6e 65 6f  .     like('%neo
1c160 6e 25 27 2c 6e 61 6d 65 29 0a 20 20 3c 2f 70 72  n%',name).  </pr
1c170 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
1c180 20 20 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f    ^The [sqlite3_
1c190 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
1c1a0 29 5d 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e  )] interface can
1c1b0 20 62 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72   be used to over
1c1c0 72 69 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28  ride the.  like(
1c1d0 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  ) function and t
1c1e0 68 65 72 65 62 79 20 63 68 61 6e 67 65 20 74 68  hereby change th
1c1f0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74  e operation of t
1c200 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72  he.  [LIKE] oper
1c210 61 74 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72  ator.  When over
1c220 72 69 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28  riding the like(
1c230 29 20 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d  ) function, it m
1c240 61 79 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a  ay be important.
1c250 20 20 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f    to override bo
1c260 74 68 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74  th the two and t
1c270 68 72 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65  hree argument ve
1c280 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69  rsions of the li
1c290 6b 65 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e  ke() .  function
1c2a0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66  . Otherwise, dif
1c2b0 66 65 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20  ferent code may 
1c2c0 62 65 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70  be called to imp
1c2d0 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49  lement the.  [LI
1c2e0 4b 45 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70  KE] operator dep
1c2f0 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
1c300 72 20 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41  r or not an ESCA
1c310 50 45 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20  PE clause was . 
1c320 20 73 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 0a   specified..}...
1c330 66 75 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 69 68  funcdef {likelih
1c340 6f 6f 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  ood(X,Y)} {} {. 
1c350 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64   ^The likelihood
1c360 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72  (X,Y) function r
1c370 65 74 75 72 6e 73 20 61 72 67 75 6d 65 6e 74 20  eturns argument 
1c380 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e  X unchanged..  ^
1c390 28 54 68 65 20 76 61 6c 75 65 20 59 20 69 6e 20  (The value Y in 
1c3a0 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20  likelihood(X,Y) 
1c3b0 6d 75 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69  must be a floati
1c3c0 6e 67 20 70 6f 69 6e 74 20 63 6f 6e 73 74 61 6e  ng point constan
1c3d0 74 0a 20 20 62 65 74 77 65 65 6e 20 30 2e 30 20  t.  between 0.0 
1c3e0 61 6e 64 20 31 2e 30 2c 20 69 6e 63 6c 75 73 69  and 1.0, inclusi
1c3f0 76 65 2e 29 5e 0a 20 20 5e 54 68 65 20 6c 69 6b  ve.)^.  ^The lik
1c400 65 6c 69 68 6f 6f 64 28 58 29 20 66 75 6e 63 74  elihood(X) funct
1c410 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74  ion is a no-op t
1c420 68 61 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e  hat the code gen
1c430 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a  erator.  optimiz
1c440 65 73 20 61 77 61 79 20 73 6f 20 74 68 61 74 20  es away so that 
1c450 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43  it consumes no C
1c460 50 55 20 63 79 63 6c 65 73 20 64 75 72 69 6e 67  PU cycles during
1c470 20 72 75 6e 2d 74 69 6d 65 0a 20 20 28 74 68 61   run-time.  (tha
1c480 74 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c  t is, during cal
1c490 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73  ls to [sqlite3_s
1c4a0 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20  tep()])..  ^The 
1c4b0 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c  purpose of the l
1c4c0 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66  ikelihood(X,Y) f
1c4d0 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72  unction is to pr
1c4e0 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74  ovide a hint.  t
1c4f0 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  o the query plan
1c500 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67  ner that the arg
1c510 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f  ument X is a boo
1c520 6c 65 61 6e 20 74 68 61 74 20 69 73 0a 20 20 74  lean that is.  t
1c530 72 75 65 20 77 69 74 68 20 61 20 70 72 6f 62 61  rue with a proba
1c540 62 69 6c 69 74 79 20 6f 66 20 61 70 70 72 6f 78  bility of approx
1c550 69 6d 61 74 65 6c 79 20 59 2e 0a 20 20 5e 28 54  imately Y..  ^(T
1c560 68 65 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d  he [unlikely(X)]
1c570 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f   function is sho
1c580 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65  rt-hand for like
1c590 6c 69 68 6f 6f 64 28 58 2c 30 2e 30 36 32 35 29  lihood(X,0.0625)
1c5a0 2e 29 5e 0a 20 20 5e 28 54 68 65 20 5b 6c 69 6b  .)^.  ^(The [lik
1c5b0 65 6c 79 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e  ely(X)] function
1c5c0 20 69 73 20 73 68 6f 72 74 2d 68 61 6e 64 20 66   is short-hand f
1c5d0 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c  or likelihood(X,
1c5e0 30 2e 39 33 37 35 29 2e 29 5e 0a 7d 0a 0a 66 75  0.9375).)^.}..fu
1c5f0 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 79 28 58 29  ncdef {likely(X)
1c600 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69  } {} {.  ^The li
1c610 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e  kely(X) function
1c620 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1c630 75 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65  ument X unchange
1c640 64 2e 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79  d..  ^The likely
1c650 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
1c660 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65  a no-op that the
1c670 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a   code generator.
1c680 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79    optimizes away
1c690 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73   so that it cons
1c6a0 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c  umes no CPU cycl
1c6b0 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65  es at.  run-time
1c6c0 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e   (that is, durin
1c6d0 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69  g calls to [sqli
1c6e0 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20  te3_step()])..  
1c6f0 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20  ^The purpose of 
1c700 74 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75  the likely(X) fu
1c710 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f  nction is to pro
1c720 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f  vide a hint.  to
1c730 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e   the query plann
1c740 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75  er that the argu
1c750 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c  ment X is a bool
1c760 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61 74  ean value.  that
1c770 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65   is usually true
1c780 2e 20 5e 28 54 68 65 20 6c 69 6b 65 6c 79 28 58  . ^(The likely(X
1c790 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71  ) function is eq
1c7a0 75 69 76 61 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c  uivalent.  to [l
1c7b0 69 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c 30 2e 39  ikelihood](X,0.9
1c7c0 33 37 35 29 2e 29 5e 20 53 65 65 20 61 6c 73 6f  375).)^ See also
1c7d0 3a 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 2e  : [unlikely(X)].
1c7e0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61  .}..funcdef {loa
1c7f0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c  d_extension(X) l
1c800 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c  oad_extension(X,
1c810 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1c820 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58  load_extension(X
1c830 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61  ,Y) function loa
1c840 64 73 20 5b 53 51 4c 69 74 65 20 65 78 74 65 6e  ds [SQLite exten
1c850 73 69 6f 6e 73 5d 20 6f 75 74 20 6f 66 20 74 68  sions] out of th
1c860 65 20 73 68 61 72 65 64 0a 20 20 6c 69 62 72 61  e shared.  libra
1c870 72 79 20 66 69 6c 65 20 6e 61 6d 65 64 20 58 20  ry file named X 
1c880 75 73 69 6e 67 20 74 68 65 20 65 6e 74 72 79 20  using the entry 
1c890 70 6f 69 6e 74 20 59 2e 20 20 5e 54 68 65 20 72  point Y.  ^The r
1c8a0 65 73 75 6c 74 20 6f 66 20 6c 6f 61 64 5f 65 78  esult of load_ex
1c8b0 74 65 6e 73 69 6f 6e 28 29 0a 20 20 69 73 20 61  tension().  is a
1c8c0 6c 77 61 79 73 20 61 20 4e 55 4c 4c 2e 20 20 5e  lways a NULL.  ^
1c8d0 49 66 20 59 20 69 73 20 6f 6d 69 74 74 65 64 20  If Y is omitted 
1c8e0 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74  then the default
1c8f0 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 6e 61 6d   entry point nam
1c900 65 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 54 68  e is used..  ^Th
1c910 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
1c920 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 61 69 73  () function rais
1c930 65 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  es an exception 
1c940 69 66 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  if the extension
1c950 20 66 61 69 6c 73 20 74 6f 0a 20 20 6c 6f 61 64   fails to.  load
1c960 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63   or initialize c
1c970 6f 72 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e  orrectly...  <p>
1c980 5e 54 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  ^The load_extens
1c990 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 77  ion() function w
1c9a0 69 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20  ill fail if the 
1c9b0 65 78 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70  extension attemp
1c9c0 74 73 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79 20  ts to .  modify 
1c9d0 6f 72 20 64 65 6c 65 74 65 20 61 6e 20 53 51 4c  or delete an SQL
1c9e0 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c   function or col
1c9f0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
1ca00 20 20 5e 54 68 65 0a 20 20 65 78 74 65 6e 73 69    ^The.  extensi
1ca10 6f 6e 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66  on can add new f
1ca20 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c  unctions or coll
1ca30 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c  ating sequences,
1ca40 20 62 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f   but cannot.  mo
1ca50 64 69 66 79 20 6f 72 20 64 65 6c 65 74 65 20 65  dify or delete e
1ca60 78 69 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  xisting function
1ca70 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  s or collating s
1ca80 65 71 75 65 6e 63 65 73 20 62 65 63 61 75 73 65  equences because
1ca90 0a 20 20 74 68 6f 73 65 20 66 75 6e 63 74 69 6f  .  those functio
1caa0 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74  ns and/or collat
1cab0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 6d 69  ing sequences mi
1cac0 67 68 74 20 62 65 20 75 73 65 64 20 65 6c 73 65  ght be used else
1cad0 77 68 65 72 65 0a 20 20 69 6e 20 74 68 65 20 63  where.  in the c
1cae0 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
1caf0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20   SQL statement. 
1cb00 20 54 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74 65   To load an exte
1cb10 6e 73 69 6f 6e 20 74 68 61 74 0a 20 20 63 68 61  nsion that.  cha
1cb20 6e 67 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20  nges or deletes 
1cb30 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c  functions or col
1cb40 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
1cb50 2c 20 75 73 65 20 74 68 65 0a 20 20 5b 73 71 6c  , use the.  [sql
1cb60 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
1cb70 69 6f 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67  ion()] C-languag
1cb80 65 20 41 50 49 2e 3c 2f 70 3e 0a 0a 20 20 3c 70  e API.</p>..  <p
1cb90 3e 46 6f 72 20 73 65 63 75 72 69 74 79 20 72 65  >For security re
1cba0 61 73 6f 6e 73 2c 20 65 78 74 65 6e 73 69 6f 6e  asons, extension
1cbb0 20 6c 6f 61 64 65 64 20 69 73 20 74 75 72 6e 65   loaded is turne
1cbc0 64 20 6f 66 66 20 62 79 20 64 65 66 61 75 6c 74  d off by default
1cbd0 20 61 6e 64 20 6d 75 73 74 0a 20 20 62 65 20 65   and must.  be e
1cbe0 6e 61 62 6c 65 64 20 62 79 20 61 20 70 72 69 6f  nabled by a prio
1cbf0 72 20 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69 74  r call to [sqlit
1cc00 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65  e3_enable_load_e
1cc10 78 74 65 6e 73 69 6f 6e 28 29 5d 2e 3c 2f 70 3e  xtension()].</p>
1cc20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77  .}..funcdef {low
1cc30 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  er(X)} {} {.  ^T
1cc40 68 65 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63  he lower(X) func
1cc50 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63  tion returns a c
1cc60 6f 70 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20  opy of string X 
1cc70 77 69 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63  with all ASCII c
1cc80 68 61 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76  haracters.  conv
1cc90 65 72 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63  erted to lower c
1cca0 61 73 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75  ase.  ^The defau
1ccb0 6c 74 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65  lt built-in lowe
1ccc0 72 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72  r() function wor
1ccd0 6b 73 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63  ks.  for ASCII c
1cce0 68 61 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20  haracters only. 
1ccf0 20 54 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76   To do case conv
1cd00 65 72 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41  ersions on non-A
1cd10 53 43 49 49 0a 20 20 63 68 61 72 61 63 74 65 72  SCII.  character
1cd20 73 2c 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20  s, load the ICU 
1cd30 65 78 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75  extension..}..fu
1cd40 6e 63 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20  ncdef {ltrim(X) 
1cd50 6c 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b  ltrim(X,Y)} {} {
1cd60 0a 20 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c  .  ^The ltrim(X,
1cd70 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1cd80 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
1cd90 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
1cda0 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
1cdb0 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
1cdc0 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74  pear in Y from t
1cdd0 68 65 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20  he left side of 
1cde0 58 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61  X..  ^If the Y a
1cdf0 72 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74  rgument is omitt
1ce00 65 64 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d  ed, ltrim(X) rem
1ce10 6f 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d  oves spaces from
1ce20 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20   the left side. 
1ce30 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
1ce40 66 20 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d  f {max(X,Y,...)}
1ce50 20 7b 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a   {*maxCoreFunc *
1ce60 6d 61 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66  max {max() SQL f
1ce70 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1ce80 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
1ce90 74 20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e  t max() function
1cea0 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1ceb0 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a  ument with the .
1cec0 20 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c    maximum value,
1ced0 20 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20   or return NULL 
1cee0 69 66 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20  if any argument 
1cef0 69 73 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65  is NULL. .  ^The
1cf00 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
1cf10 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73  max() function s
1cf20 65 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75  earches its argu
1cf30 6d 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20  ments from left 
1cf40 74 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61  to right.  for a
1cf50 6e 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20  n argument that 
1cf60 64 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74  defines a collat
1cf70 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ing function and
1cf80 20 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61   uses that colla
1cf90 74 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20  ting.  function 
1cfa0 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63  for all string c
1cfb0 6f 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66  omparisons.  ^If
1cfc0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67   none of the arg
1cfd0 75 6d 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a  uments to max().
1cfe0 20 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61    define a colla
1cff0 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74  ting function, t
1d000 68 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63  hen the BINARY c
1d010 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1d020 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e  n is used..  ^(N
1d030 6f 74 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28  ote that <b>max(
1d040 29 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c  )</b> is a simpl
1d050 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a  e function when.
1d060 20 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f    it has 2 or mo
1d070 72 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74  re arguments but
1d080 20 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a   operates as an.
1d090 20 20 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20    [maxAggFunc | 
1d0a0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1d0b0 6f 6e 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c  on] if given onl
1d0c0 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  y a single argum
1d0d0 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  ent.)^.}..funcde
1d0e0 66 20 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d  f {min(X,Y,...)}
1d0f0 20 7b 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a   {*minCoreFunc *
1d100 6d 69 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66  min {min() SQL f
1d110 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54  unction}} {.  ^T
1d120 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e  he multi-argumen
1d130 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e  t min() function
1d140 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67   returns the arg
1d150 75 6d 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20  ument with the. 
1d160 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a   minimum value..
1d170 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67    ^The multi-arg
1d180 75 6d 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63  ument min() func
1d190 74 69 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74  tion searches it
1d1a0 73 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d  s arguments from
1d1b0 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20   left to right. 
1d1c0 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74   for an argument
1d1d0 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 61 20   that defines a 
1d1e0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1d1f0 6f 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74  on and uses that
1d200 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e   collating.  fun
1d210 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74  ction for all st
1d220 72 69 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73  ring comparisons
1d230 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .  ^If none of t
1d240 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  he arguments to 
1d250 6d 69 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61  min().  define a
1d260 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
1d270 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49  ion, then the BI
1d280 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66  NARY collating f
1d290 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e  unction is used.
1d2a0 0a 20 20 5e 28 4e 6f 74 65 20 74 68 61 74 20 3c  .  ^(Note that <
1d2b0 62 3e 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61  b>min()</b> is a
1d2c0 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e   simple function
1d2d0 20 77 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32   when.  it has 2
1d2e0 20 6f 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e   or more argumen
1d2f0 74 73 20 62 75 74 20 6f 70 65 72 61 74 65 73 20  ts but operates 
1d300 61 73 20 61 6e 20 0a 20 20 5b 6d 69 6e 41 67 67  as an .  [minAgg
1d310 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65  Func | aggregate
1d320 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69   function] if gi
1d330 76 65 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e  ven.  only a sin
1d340 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a  gle argument.)^.
1d350 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c  }..funcdef {null
1d360 69 66 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20  if(X,Y)} {} {.  
1d370 5e 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29  ^The nullif(X,Y)
1d380 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1d390 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75  s its first argu
1d3a0 6d 65 6e 74 20 69 66 20 74 68 65 20 61 72 67 75  ment if the argu
1d3b0 6d 65 6e 74 73 20 61 72 65 0a 20 20 64 69 66 66  ments are.  diff
1d3c0 65 72 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69  erent and NULL i
1d3d0 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
1d3e0 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 5e  are the same.  ^
1d3f0 54 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20  The nullif(X,Y) 
1d400 66 75 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72 63  function.  searc
1d410 68 65 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74  hes its argument
1d420 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  s from left to r
1d430 69 67 68 74 20 66 6f 72 20 61 6e 20 61 72 67 75  ight for an argu
1d440 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65  ment that define
1d450 73 20 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20  s a.  collating 
1d460 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65  function and use
1d470 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67  s that collating
1d480 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
1d490 6c 20 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61  l string.  compa
1d4a0 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69  risons.  ^If nei
1d4b0 74 68 65 72 20 61 72 67 75 6d 65 6e 74 20 74 6f  ther argument to
1d4c0 20 6e 75 6c 6c 69 66 28 29 20 64 65 66 69 6e 65   nullif() define
1d4d0 73 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  s a collating fu
1d4e0 6e 63 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68  nction.  then th
1d4f0 65 20 42 49 4e 41 52 59 20 69 73 20 75 73 65 64  e BINARY is used
1d500 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 70 72  ..}..funcdef {pr
1d510 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29  intf(FORMAT,...)
1d520 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20 70  } {} {.  ^(The p
1d530 72 69 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e  rintf(FORMAT,...
1d540 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77  ) SQL function w
1d550 6f 72 6b 73 20 6c 69 6b 65 20 74 68 65 20 5b 73  orks like the [s
1d560 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29  qlite3_mprintf()
1d570 5d 20 43 2d 6c 61 6e 67 75 61 67 65 0a 20 20 66  ] C-language.  f
1d580 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 20  unction and the 
1d590 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f  printf() functio
1d5a0 6e 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64  n from the stand
1d5b0 61 72 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e  ard C library.)^
1d5c0 0a 20 20 54 68 65 20 66 69 72 73 74 20 61 72 67  .  The first arg
1d5d0 75 6d 65 6e 74 20 69 73 20 61 20 66 6f 72 6d 61  ument is a forma
1d5e0 74 20 73 74 72 69 6e 67 20 74 68 61 74 20 73 70  t string that sp
1d5f0 65 63 69 66 69 65 73 20 68 6f 77 20 74 6f 20 63  ecifies how to c
1d600 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6f 75 74  onstruct the out
1d610 70 75 74 0a 20 20 73 74 72 69 6e 67 20 75 73 69  put.  string usi
1d620 6e 67 20 76 61 6c 75 65 73 20 74 61 6b 65 6e 20  ng values taken 
1d630 66 72 6f 6d 20 73 75 62 73 65 71 75 65 6e 74 20  from subsequent 
1d640 61 72 67 75 6d 65 6e 74 73 2e 20 20 5e 49 66 20  arguments.  ^If 
1d650 74 68 65 20 46 4f 52 4d 41 54 20 61 72 67 75 6d  the FORMAT argum
1d660 65 6e 74 20 69 73 0a 20 20 6d 69 73 73 69 6e 67  ent is.  missing
1d670 20 6f 72 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   or NULL then th
1d680 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
1d690 2e 20 20 5e 54 68 65 20 25 6e 20 66 6f 72 6d 61  .  ^The %n forma
1d6a0 74 20 69 73 20 73 69 6c 65 6e 74 6c 79 20 69 67  t is silently ig
1d6b0 6e 6f 72 65 64 20 61 6e 64 0a 20 20 64 6f 65 73  nored and.  does
1d6c0 20 6e 6f 74 20 63 6f 6e 73 75 6d 65 20 61 6e 20   not consume an 
1d6d0 61 72 67 75 6d 65 6e 74 2e 20 20 5e 54 68 65 20  argument.  ^The 
1d6e0 25 70 20 66 6f 72 6d 61 74 20 69 73 20 61 6e 20  %p format is an 
1d6f0 61 6c 69 61 73 20 66 6f 72 20 25 58 2e 20 20 5e  alias for %X.  ^
1d700 54 68 65 20 25 7a 20 66 6f 72 6d 61 74 0a 20 20  The %z format.  
1d710 69 73 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62  is interchangeab
1d720 6c 65 20 77 69 74 68 20 25 73 2e 20 20 5e 28 49  le with %s.  ^(I
1d730 66 20 74 68 65 72 65 20 61 72 65 20 74 6f 6f 20  f there are too 
1d740 66 65 77 20 61 72 67 75 6d 65 6e 74 73 20 69 6e  few arguments in
1d750 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69   the argument li
1d760 73 74 2c 0a 20 20 6d 69 73 73 69 6e 67 20 61 72  st,.  missing ar
1d770 67 75 6d 65 6e 74 73 20 61 72 65 20 61 73 73 75  guments are assu
1d780 6d 65 64 20 74 6f 20 68 61 76 65 20 61 20 4e 55  med to have a NU
1d790 4c 4c 20 76 61 6c 75 65 2c 20 77 68 69 63 68 20  LL value, which 
1d7a0 69 73 20 74 72 61 6e 73 6c 61 74 65 64 20 69 6e  is translated in
1d7b0 74 6f 0a 20 20 30 20 6f 72 20 30 2e 30 20 66 6f  to.  0 or 0.0 fo
1d7c0 72 20 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61 74  r numeric format
1d7d0 73 20 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74  s or an empty st
1d7e0 72 69 6e 67 20 66 6f 72 20 25 73 2e 29 5e 20 20  ring for %s.)^  
1d7f0 53 65 65 20 74 68 65 0a 20 20 5b 62 75 69 6c 74  See the.  [built
1d800 2d 69 6e 20 70 72 69 6e 74 66 28 29 5d 20 64 6f  -in printf()] do
1d810 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
1d820 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1d830 6d 61 74 69 6f 6e 2e 0a 7d 0a 20 20 0a 0a 66 75  mation..}.  ..fu
1d840 6e 63 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d  ncdef {quote(X)}
1d850 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f   {} {.  ^The quo
1d860 74 65 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  te(X) function r
1d870 65 74 75 72 6e 73 20 74 68 65 20 74 65 78 74 20  eturns the text 
1d880 6f 66 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  of an SQL litera
1d890 6c 20 77 68 69 63 68 0a 20 20 69 73 20 74 68 65  l which.  is the
1d8a0 20 76 61 6c 75 65 20 6f 66 20 69 74 73 20 61 72   value of its ar
1d8b0 67 75 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20  gument suitable 
1d8c0 66 6f 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e  for inclusion in
1d8d0 74 6f 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d  to an SQL statem
1d8e0 65 6e 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20  ent..  ^Strings 
1d8f0 61 72 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62  are surrounded b
1d900 79 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20  y single-quotes 
1d910 77 69 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20  with escapes on 
1d920 69 6e 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a  interior quotes.
1d930 20 20 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42    as needed.  ^B
1d940 4c 4f 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64  LOBs are encoded
1d950 20 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20   as hexadecimal 
1d960 6c 69 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74 72  literals..  ^Str
1d970 69 6e 67 73 20 77 69 74 68 20 65 6d 62 65 64 64  ings with embedd
1d980 65 64 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72  ed NUL character
1d990 73 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 70 72  s cannot be repr
1d9a0 65 73 65 6e 74 65 64 20 61 73 20 73 74 72 69 6e  esented as strin
1d9b0 67 0a 20 20 6c 69 74 65 72 61 6c 73 20 69 6e 20  g.  literals in 
1d9c0 53 51 4c 20 61 6e 64 20 68 65 6e 63 65 20 74 68  SQL and hence th
1d9d0 65 20 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e  e returned strin
1d9e0 67 20 6c 69 74 65 72 61 6c 20 69 73 20 74 72 75  g literal is tru
1d9f0 6e 63 61 74 65 64 20 70 72 69 6f 72 0a 20 20 74  ncated prior.  t
1da00 6f 20 74 68 65 20 66 69 72 73 74 20 4e 55 4c 2e  o the first NUL.
1da10 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e  .}..funcdef {ran
1da20 64 6f 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  dom()} {} {.  ^T
1da30 68 65 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63  he random() func
1da40 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 70  tion returns a p
1da50 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74  seudo-random int
1da60 65 67 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d  eger.  between -
1da70 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
1da80 38 30 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32  808 and +9223372
1da90 30 33 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a  036854775807..}.
1daa0 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d  .funcdef {random
1dab0 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20  blob(N)} {} {.  
1dac0 5e 54 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  ^The randomblob(
1dad0 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  N) function retu
1dae0 72 6e 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f  rn an N-byte blo
1daf0 62 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65  b containing pse
1db00 75 64 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74  udo-random.  byt
1db10 65 73 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65 73  es. ^If N is les
1db20 73 20 74 68 61 6e 20 31 20 74 68 65 6e 20 61 20  s than 1 then a 
1db30 31 2d 62 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c  1-byte random bl
1db40 6f 62 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a  ob is returned..
1db50 0a 20 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70  .  <p>Hint:  app
1db60 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65  lications can ge
1db70 6e 65 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20  nerate globally 
1db80 75 6e 69 71 75 65 20 69 64 65 6e 74 69 66 69 65  unique identifie
1db90 72 73 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20  rs.  using this 
1dba0 66 75 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65  function togethe
1dbb0 72 20 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61  r with [hex()] a
1dbc0 6e 64 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29  nd/or.  [lower()
1dbd0 5d 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e  ] like this:</p>
1dbe0 0a 0a 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  ..  <blockquote>
1dbf0 0a 20 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f  .  hex(randomblo
1dc00 62 28 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a  b(16))<br></br>.
1dc10 20 20 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64    lower(hex(rand
1dc20 6f 6d 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c  omblob(16))).  <
1dc30 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a  /blockquote>.}..
1dc40 66 75 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65  funcdef {replace
1dc50 28 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20  (X,Y,Z)} {} {.  
1dc60 5e 54 68 65 20 72 65 70 6c 61 63 65 28 58 2c 59  ^The replace(X,Y
1dc70 2c 5a 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Z) function ret
1dc80 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f  urns a string fo
1dc90 72 6d 65 64 20 62 79 20 73 75 62 73 74 69 74 75  rmed by substitu
1dca0 74 69 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a 20  ting.  string Z 
1dcb0 66 6f 72 20 65 76 65 72 79 20 6f 63 63 75 72 72  for every occurr
1dcc0 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59  ence of string Y
1dcd0 20 69 6e 20 73 74 72 69 6e 67 20 58 2e 20 20 5e   in string X.  ^
1dce0 54 68 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63  The [BINARY].  c
1dcf0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
1dd00 65 20 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f  e is used for co
1dd10 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20  mparisons.  ^If 
1dd20 59 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20  Y is an empty.  
1dd30 73 74 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75  string then retu
1dd40 72 6e 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 20  rn X unchanged. 
1dd50 20 5e 49 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e   ^If Z is not in
1dd60 69 74 69 61 6c 6c 79 0a 20 20 61 20 73 74 72 69  itially.  a stri
1dd70 6e 67 2c 20 69 74 20 69 73 20 63 61 73 74 20 74  ng, it is cast t
1dd80 6f 20 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67  o a UTF-8 string
1dd90 20 70 72 69 6f 72 20 74 6f 20 70 72 6f 63 65 73   prior to proces
1dda0 73 69 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  sing..}..funcdef
1ddb0 20 7b 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64   {round(X) round
1ddc0 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
1ddd0 68 65 20 72 6f 75 6e 64 28 58 2c 59 29 20 66 75  he round(X,Y) fu
1dde0 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61  nction returns a
1ddf0 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a   floating-point.
1de00 20 20 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65    value X rounde
1de10 64 20 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f  d to Y digits to
1de20 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 74 68   the right of th
1de30 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e  e decimal point.
1de40 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
1de50 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
1de60 2c 20 69 74 20 69 73 20 61 73 73 75 6d 65 64 20  , it is assumed 
1de70 74 6f 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63  to be 0..}..func
1de80 64 65 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74  def {rtrim(X) rt
1de90 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
1dea0 20 5e 54 68 65 20 72 74 72 69 6d 28 58 2c 59 29   ^The rtrim(X,Y)
1deb0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1dec0 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
1ded0 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
1dee0 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
1def0 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
1df00 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65  ar in Y from the
1df10 20 72 69 67 68 74 20 73 69 64 65 20 6f 66 20 58   right side of X
1df20 2e 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72  ..  ^If the Y ar
1df30 67 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65  gument is omitte
1df40 64 2c 20 72 74 72 69 6d 28 58 29 20 72 65 6d 6f  d, rtrim(X) remo
1df50 76 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20  ves spaces from 
1df60 74 68 65 20 72 69 67 68 74 0a 20 20 73 69 64 65  the right.  side
1df70 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65   of X..}..funcde
1df80 66 20 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b  f {soundex(X)} {
1df90 7d 20 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e 64  } {.  ^The sound
1dfa0 65 78 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  ex(X) function r
1dfb0 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20  eturns a string 
1dfc0 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 6e  that is the soun
1dfd0 64 65 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20 20  dex encoding .  
1dfe0 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e  of the string X.
1dff0 0a 20 20 5e 54 68 65 20 73 74 72 69 6e 67 20 22  .  ^The string "
1e000 3f 30 30 30 22 20 69 73 20 72 65 74 75 72 6e 65  ?000" is returne
1e010 64 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  d if the argumen
1e020 74 20 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e  t is NULL or con
1e030 74 61 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49 49  tains.  no ASCII
1e040 20 61 6c 70 68 61 62 65 74 69 63 20 63 68 61 72   alphabetic char
1e050 61 63 74 65 72 73 2e 0a 20 20 5e 28 54 68 69 73  acters..  ^(This
1e060 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69   function is omi
1e070 74 74 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65  tted from SQLite
1e080 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49   by default..  I
1e090 74 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61  t is only availa
1e0a0 62 6c 65 20 69 66 20 74 68 65 20 5b 53 51 4c 49  ble if the [SQLI
1e0b0 54 45 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d 70  TE_SOUNDEX] comp
1e0c0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a  ile-time option.
1e0d0 20 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 53    is used when S
1e0e0 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 2e 29  QLite is built.)
1e0f0 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ^.}..funcdef {sq
1e100 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
1e110 6f 6e 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a  on_get(N)} {} {.
1e120 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f    ^The sqlite_co
1e130 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
1e140 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  ) SQL function i
1e150 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
1e160 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65  nd the.  [sqlite
1e170 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
1e180 67 65 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e  get()] C/C++ fun
1e190 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20 72  ction..  ^This r
1e1a0 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74  outine returns t
1e1b0 68 65 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d  he N-th compile-
1e1c0 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64  time option used
1e1d0 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65   to build SQLite
1e1e0 0a 20 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e 20  .  or NULL if N 
1e1f0 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e  is out of range.
1e200 20 20 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b    See also the [
1e210 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20  compile_options 
1e220 70 72 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63  pragma]..}..func
1e230 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70  def {sqlite_comp
1e240 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58  ileoption_used(X
1e250 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
1e260 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74  qlite_compileopt
1e270 69 6f 6e 5f 75 73 65 64 28 29 20 53 51 4c 20 66  ion_used() SQL f
1e280 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
1e290 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a  pper around the.
1e2a0 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69    [sqlite3_compi
1e2b0 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d  leoption_used()]
1e2c0 20 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e   C/C++ function.
1e2d0 0a 20 20 5e 57 68 65 6e 20 74 68 65 20 61 72 67  .  ^When the arg
1e2e0 75 6d 65 6e 74 20 58 20 74 6f 20 73 71 6c 69 74  ument X to sqlit
1e2f0 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  e_compileoption_
1e300 75 73 65 64 28 58 29 20 69 73 20 61 20 73 74 72  used(X) is a str
1e310 69 6e 67 20 77 68 69 63 68 0a 20 20 69 73 20 74  ing which.  is t
1e320 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6d  he name of a com
1e330 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
1e340 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  , this routine r
1e350 65 74 75 72 6e 73 20 74 72 75 65 20 28 31 29 20  eturns true (1) 
1e360 6f 72 0a 20 20 66 61 6c 73 65 20 28 30 29 20 64  or.  false (0) d
1e370 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
1e380 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
1e390 6f 70 74 69 6f 6e 20 77 61 73 20 75 73 65 64 20  option was used 
1e3a0 64 75 72 69 6e 67 20 74 68 65 0a 20 20 62 75 69  during the.  bui
1e3b0 6c 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ld..}..funcdef {
1e3c0 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29  sqlite_offset(X)
1e3d0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71  } {} {.  ^The sq
1e3e0 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29 20 66  lite_offset(X) f
1e3f0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1e400 74 68 65 20 62 79 74 65 20 6f 66 66 73 65 74 20  the byte offset 
1e410 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
1e420 20 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20 62    file for the b
1e430 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
1e440 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 68 69 63  record from whic
1e450 68 20 76 61 6c 75 65 20 77 6f 75 6c 64 20 62 65  h value would be
1e460 20 72 65 61 64 2e 0a 20 20 49 66 20 58 20 69 73   read..  If X is
1e470 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 69 6e   not a column in
1e480 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
1e490 6c 65 2c 20 74 68 65 6e 20 73 71 6c 69 74 65 5f  le, then sqlite_
1e4a0 6f 66 66 73 65 74 28 58 29 20 72 65 74 75 72 6e  offset(X) return
1e4b0 73 0a 20 20 4e 55 4c 4c 2e 20 20 54 68 65 20 76  s.  NULL.  The v
1e4c0 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
1e4d0 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58   sqlite_offset(X
1e4e0 29 20 6d 69 67 68 74 20 72 65 66 65 72 65 6e 63  ) might referenc
1e4f0 65 20 65 69 74 68 65 72 20 74 68 65 0a 20 20 6f  e either the.  o
1e500 72 69 67 69 6e 61 6c 20 74 61 62 6c 65 20 6f 72  riginal table or
1e510 20 61 6e 20 69 6e 64 65 78 2c 20 64 65 70 65 6e   an index, depen
1e520 64 69 6e 67 20 6f 6e 20 74 68 65 20 71 75 65 72  ding on the quer
1e530 79 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  y.  If the value
1e540 20 58 20 77 6f 75 6c 64 0a 20 20 6e 6f 72 6d 61   X would.  norma
1e550 6c 6c 79 20 62 65 20 65 78 74 72 61 63 74 65 64  lly be extracted
1e560 20 66 72 6f 6d 20 61 6e 20 69 6e 64 65 78 2c 20   from an index, 
1e570 74 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73 65  the sqlite_offse
1e580 74 28 58 29 20 72 65 74 75 72 6e 73 20 74 68 65  t(X) returns the
1e590 0a 20 20 6f 66 66 73 65 74 20 74 6f 20 74 68 65  .  offset to the
1e5a0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 69   corresponding i
1e5b0 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 20 49 66  ndex record.  If
1e5c0 20 74 68 65 20 76 61 6c 75 65 20 58 20 77 6f 75   the value X wou
1e5d0 6c 64 20 62 65 0a 20 20 65 78 74 72 61 63 74 65  ld be.  extracte
1e5e0 64 20 66 72 6f 6d 20 74 68 65 20 6f 72 69 67 69  d from the origi
1e5f0 6e 61 6c 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  nal table, then 
1e600 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29  sqlite_offset(X)
1e610 20 72 65 74 75 72 6e 73 20 74 68 65 20 6f 66 66   returns the off
1e620 73 65 74 0a 20 20 74 6f 20 74 68 65 20 74 61 62  set.  to the tab
1e630 6c 65 20 72 65 63 6f 72 64 2e 0a 0a 20 20 3c 70  le record...  <p
1e640 3e 54 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73  >The sqlite_offs
1e650 65 74 28 58 29 20 53 51 4c 20 66 75 6e 63 74 69  et(X) SQL functi
1e660 6f 6e 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  on is only avail
1e670 61 62 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69  able if SQLite i
1e680 73 20 62 75 69 6c 74 0a 20 20 75 73 69 6e 67 20  s built.  using 
1e690 74 68 65 20 5b 2d 44 53 51 4c 49 54 45 5f 45 4e  the [-DSQLITE_EN
1e6a0 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f  ABLE_OFFSET_SQL_
1e6b0 46 55 4e 43 5d 20 63 6f 6d 70 69 6c 65 2d 74 69  FUNC] compile-ti
1e6c0 6d 65 20 6f 70 74 69 6f 6e 2e 0a 7d 0a 0a 66 75  me option..}..fu
1e6d0 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f  ncdef {sqlite_so
1e6e0 75 72 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a  urce_id()} {} {.
1e6f0 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f    ^The sqlite_so
1e700 75 72 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69  urce_id() functi
1e710 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1e720 69 6e 67 20 74 68 61 74 20 69 64 65 6e 74 69 66  ing that identif
1e730 69 65 73 20 74 68 65 0a 20 20 73 70 65 63 69 66  ies the.  specif
1e740 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ic version of th
1e750 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68  e source code th
1e760 61 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 62  at was used to b
1e770 75 69 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a  uild the SQLite.
1e780 20 20 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65    library.  ^The
1e790 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64   string returned
1e7a0 20 62 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63   by sqlite_sourc
1e7b0 65 5f 69 64 28 29 20 69 73 0a 20 20 74 68 65 20  e_id() is.  the 
1e7c0 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 74 68  date and time th
1e7d0 61 74 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f  at the source co
1e7e0 64 65 20 77 61 73 20 63 68 65 63 6b 65 64 20 69  de was checked i
1e7f0 6e 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20 20  n followed by.  
1e800 74 68 65 20 53 48 41 31 20 68 61 73 68 20 66 6f  the SHA1 hash fo
1e810 72 20 74 68 61 74 20 63 68 65 63 6b 2d 69 6e 2e  r that check-in.
1e820 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e    ^This function
1e830 20 69 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61   is.  an SQL wra
1e840 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20  pper around the 
1e850 5b 73 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69  [sqlite3_sourcei
1e860 64 28 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65  d()] C interface
1e870 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
1e880 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20  lite_version()} 
1e890 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
1e8a0 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e  te_version() fun
1e8b0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1e8c0 65 20 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67  e version string
1e8d0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a   for the SQLite.
1e8e0 20 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 69    library that i
1e8f0 73 20 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69  s running.  ^Thi
1e900 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e  s function is an
1e910 20 53 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61   SQL.  wrapper a
1e920 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
1e930 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d  e3_libversion()]
1e940 20 43 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a   C-interface..}.
1e950 0a 66 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72  .funcdef {substr
1e960 28 58 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58  (X,Y,Z) substr(X
1e970 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1e980 20 73 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66   substr(X,Y,Z) f
1e990 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1e9a0 61 20 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69  a substring of i
1e9b0 6e 70 75 74 20 73 74 72 69 6e 67 20 58 20 74 68  nput string X th
1e9c0 61 74 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68  at begins.  with
1e9d0 20 74 68 65 20 59 2d 74 68 20 63 68 61 72 61 63   the Y-th charac
1e9e0 74 65 72 20 61 6e 64 20 77 68 69 63 68 20 69 73  ter and which is
1e9f0 20 5a 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f   Z characters lo
1ea00 6e 67 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f  ng..  ^If Z is o
1ea10 6d 69 74 74 65 64 20 74 68 65 6e 20 73 75 62 73  mitted then subs
1ea20 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20  tr(X,Y) returns 
1ea30 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 74  all characters t
1ea40 68 72 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20  hrough the end. 
1ea50 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
1ea60 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
1ea70 74 68 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65  the Y-th..  ^The
1ea80 20 6c 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61   left-most chara
1ea90 63 74 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d  cter of X is num
1eaa0 62 65 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73  ber 1.  ^If Y is
1eab0 20 6e 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e   negative.  then
1eac0 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72 61   the first chara
1ead0 63 74 65 72 20 6f 66 20 74 68 65 20 73 75 62 73  cter of the subs
1eae0 74 72 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62  tring is found b
1eaf0 79 20 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20  y counting from 
1eb00 74 68 65 0a 20 20 72 69 67 68 74 20 72 61 74 68  the.  right rath
1eb10 65 72 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  er than the left
1eb20 2e 20 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61  .  ^If Z is nega
1eb30 74 69 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20  tive then.  the 
1eb40 61 62 73 28 5a 29 20 63 68 61 72 61 63 74 65 72  abs(Z) character
1eb50 73 20 70 72 65 63 65 64 69 6e 67 20 74 68 65 20  s preceding the 
1eb60 59 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 61  Y-th character a
1eb70 72 65 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e  re returned..  ^
1eb80 49 66 20 58 20 69 73 20 61 20 73 74 72 69 6e 67  If X is a string
1eb90 20 74 68 65 6e 20 63 68 61 72 61 63 74 65 72 73   then characters
1eba0 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
1ebb0 6f 20 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a  o actual UTF-8 .
1ebc0 20 20 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e    characters.  ^
1ebd0 49 66 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74  If X is a BLOB t
1ebe0 68 65 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20  hen the indices 
1ebf0 72 65 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a  refer to bytes..
1ec00 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61  }..funcdef {tota
1ec10 6c 5f 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20  l_changes()} {} 
1ec20 7b 0a 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63  {.  ^The total_c
1ec30 68 61 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f  hanges() functio
1ec40 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  n returns the nu
1ec50 6d 62 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e  mber of row chan
1ec60 67 65 73 0a 20 20 63 61 75 73 65 64 20 62 79 20  ges.  caused by 
1ec70 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f  INSERT, UPDATE o
1ec80 72 20 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65  r DELETE.  state
1ec90 6d 65 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20  ments since the 
1eca0 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
1ecb0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20   connection was 
1ecc0 6f 70 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20  opened..  ^This 
1ecd0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72  function is a wr
1ece0 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65  apper around the
1ecf0 20 5b 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f   [sqlite3_total_
1ed00 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
1ed10 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a  ++ interface..}.
1ed20 0a 66 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58  .funcdef {trim(X
1ed30 29 20 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20  ) trim(X,Y)} {} 
1ed40 7b 0a 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c  {.  ^The trim(X,
1ed50 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  Y) function retu
1ed60 72 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72  rns a string for
1ed70 6d 65 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20  med by removing 
1ed80 61 6e 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68  any and all.  ch
1ed90 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61 70  aracters that ap
1eda0 70 65 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62  pear in Y from b
1edb0 6f 74 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20  oth ends of X.. 
1edc0 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
1edd0 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
1ede0 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20  trim(X) removes 
1edf0 73 70 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68  spaces from both
1ee00 20 65 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66   ends of X..}..f
1ee10 75 6e 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58  uncdef {typeof(X
1ee20 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74  )} {} {.  ^The t
1ee30 79 70 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f  ypeof(X) functio
1ee40 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69  n returns a stri
1ee50 6e 67 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  ng that indicate
1ee60 73 20 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d  s the [datatype]
1ee70 20 6f 66 0a 20 20 74 68 65 20 65 78 70 72 65 73   of.  the expres
1ee80 73 69 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20  sion X: "null", 
1ee90 22 69 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c  "integer", "real
1eea0 22 2c 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62  ", "text", or "b
1eeb0 6c 6f 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  lob"..}..funcdef
1eec0 20 7b 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b   {unlikely(X)} {
1eed0 7d 20 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b  } {.  ^The unlik
1eee0 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1eef0 72 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75  returns the argu
1ef00 6d 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64  ment X unchanged
1ef10 2e 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c  ..  ^The unlikel
1ef20 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73  y(X) function is
1ef30 20 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68   a no-op that th
1ef40 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1ef50 0a 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61  .  optimizes awa
1ef60 79 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e  y so that it con
1ef70 73 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63  sumes no CPU cyc
1ef80 6c 65 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d  les at.  run-tim
1ef90 65 20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69  e (that is, duri
1efa0 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c  ng calls to [sql
1efb0 69 74 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20  ite3_step()]).. 
1efc0 20 5e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66   ^The purpose of
1efd0 20 74 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29   the unlikely(X)
1efe0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20   function is to 
1eff0 70 72 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20  provide a hint. 
1f000 20 74 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c   to the query pl
1f010 61 6e 6e 65 72 20 74 68 61 74 20 74 68 65 20 61  anner that the a
1f020 72 67 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62  rgument X is a b
1f030 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74  oolean value.  t
1f040 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 6e  hat is usually n
1f050 6f 74 20 74 72 75 65 2e 20 5e 28 54 68 65 20 75  ot true. ^(The u
1f060 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74  nlikely(X) funct
1f070 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
1f080 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f  t.  to [likeliho
1f090 6f 64 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e 29  od](X, 0.0625).)
1f0a0 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e  ^.}..funcdef {un
1f0b0 69 63 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20  icode(X)} {} {. 
1f0c0 20 5e 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29   ^The unicode(X)
1f0d0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1f0e0 73 20 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e  s the numeric un
1f0f0 69 63 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74  icode code point
1f100 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1f110 6f 0a 20 20 74 68 65 20 66 69 72 73 74 20 63 68  o.  the first ch
1f120 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 20 73  aracter of the s
1f130 74 72 69 6e 67 20 58 2e 20 20 49 66 20 74 68 65  tring X.  If the
1f140 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69   argument to uni
1f150 63 6f 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61  code(X) is not a
1f160 20 73 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74   string.  then t
1f170 68 65 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64  he result is und
1f180 65 66 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64  efined..}..funcd
1f190 65 66 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d  ef {upper(X)} {}
1f1a0 20 7b 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28   {.  ^The upper(
1f1b0 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
1f1c0 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e  rns a copy of in
1f1d0 70 75 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20  put string X in 
1f1e0 77 68 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77  which all .  low
1f1f0 65 72 2d 63 61 73 65 20 41 53 43 49 49 20 63 68  er-case ASCII ch
1f200 61 72 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e  aracters are con
1f210 76 65 72 74 65 64 20 74 6f 20 74 68 65 69 72 20  verted to their 
1f220 75 70 70 65 72 2d 63 61 73 65 20 65 71 75 69 76  upper-case equiv
1f230 61 6c 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65  alent..}..funcde
1f240 66 20 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20  f {zeroblob(N)} 
1f250 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f  {} {.  ^The zero
1f260 62 6c 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e  blob(N) function
1f270 20 72 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20   returns a BLOB 
1f280 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20  consisting of N 
1f290 62 79 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20  bytes of 0x00.. 
1f2a0 20 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20   SQLite manages 
1f2b0 74 68 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20  these zeroblobs 
1f2c0 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79  very efficiently
1f2d0 2e 20 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e  .  Zeroblobs can
1f2e0 20 62 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65   be used to.  re
1f2f0 73 65 72 76 65 20 73 70 61 63 65 20 66 6f 72 20  serve space for 
1f300 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c  a BLOB that is l
1f310 61 74 65 72 20 77 72 69 74 74 65 6e 20 75 73 69  ater written usi
1f320 6e 67 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62  ng .  [sqlite3_b
1f330 6c 6f 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63  lob_open() | inc
1f340 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f  remental BLOB I/
1f350 4f 5d 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20  O]..  ^This SQL 
1f360 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c  function is impl
1f370 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68  emented using th
1f380 65 20 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  e [sqlite3_resul
1f390 74 5f 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20  t_zeroblob()].  
1f3a0 72 6f 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65  routine from the
1f3b0 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
1f3c0 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  ..}.</tcl>..<p>T
1f3d0 68 65 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e  he core function
1f3e0 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72  s shown below ar
1f3f0 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64  e available by d
1f400 65 66 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75  efault. .[datefu
1f410 6e 63 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20  nc | Date &amp; 
1f420 54 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2c  Time functions],
1f430 0a 5b 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72  .[aggfunc | aggr
1f440 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d  egate functions]
1f450 2c 0a 5b 62 75 69 6c 74 69 6e 20 77 69 6e 64 6f  ,.[builtin windo
1f460 77 20 66 75 6e 63 74 69 6f 6e 73 7c 77 69 6e 64  w functions|wind
1f470 6f 77 20 66 75 6e 63 74 69 6f 6e 73 5d 2c 20 61  ow functions], a
1f480 6e 64 0a 5b 6a 73 6f 6e 31 20 7c 20 4a 53 4f 4e  nd.[json1 | JSON
1f490 20 66 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20   functions] are 
1f4a0 64 6f 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72  documented separ
1f4b0 61 74 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69  ately.  An.appli
1f4c0 63 61 74 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e  cation may defin
1f4d0 65 20 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e  e additional.fun
1f4e0 63 74 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69  ctions written i
1f4f0 6e 20 43 20 61 6e 64 20 61 64 64 65 64 20 74 6f  n C and added to
1f500 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   the database en
1f510 67 69 6e 65 20 75 73 69 6e 67 0a 74 68 65 20 5b  gine using.the [
1f520 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
1f530 75 6e 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c  unction()] API.<
1f540 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c  /p>..<tcl>.set l
1f550 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20 62 61 73  x {}.foreach bas
1f560 65 73 79 6e 74 61 78 20 5b 61 72 72 61 79 20 6e  esyntax [array n
1f570 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65 74  ames corefuncset
1f580 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73  ] {.  foreach {s
1f590 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64  yntax keywords d
1f5a0 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63 73 65  esc} $corefuncse
1f5b0 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20 62  t($basesyntax) b
1f5c0 72 65 61 6b 0a 20 20 72 65 67 65 78 70 20 7b 5e  reak.  regexp {^
1f5d0 5b 61 2d 7a 5f 5d 2b 7d 20 24 62 61 73 65 73 79  [a-z_]+} $basesy
1f5e0 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a 20 20  ntax fragment.  
1f5f0 66 6f 72 65 61 63 68 20 63 6f 72 65 73 79 6e 74  foreach coresynt
1f600 61 78 20 24 73 79 6e 74 61 78 20 7b 0a 20 20 20  ax $syntax {.   
1f610 20 6c 61 70 70 65 6e 64 20 6c 78 20 5b 6c 69 73   lappend lx [lis
1f620 74 20 24 66 72 61 67 6d 65 6e 74 20 24 63 6f 72  t $fragment $cor
1f630 65 73 79 6e 74 61 78 20 30 5d 0a 20 20 7d 0a 7d  esyntax 0].  }.}
1f640 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69 6e 6b  .hd_list_of_link
1f650 73 20 7b 7d 20 32 32 35 20 5b 6c 73 6f 72 74 20  s {} 225 [lsort 
1f660 2d 69 6e 64 65 78 20 31 20 24 6c 78 5d 0a 0a 68  -index 1 $lx]..h
1f670 64 5f 70 75 74 73 6e 6c 20 22 3c 68 72 20 63 6c  d_putsnl "<hr cl
1f680 61 73 73 3d 27 78 68 72 27 3e 22 0a 68 64 5f 70  ass='xhr'>".hd_p
1f690 75 74 73 6e 6c 20 22 3c 64 6c 3e 22 0a 66 6f 72  utsnl "<dl>".for
1f6a0 65 61 63 68 20 62 61 73 65 73 79 6e 74 61 78 20  each basesyntax 
1f6b0 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61  [lsort [array na
1f6c0 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65 74 5d  mes corefuncset]
1f6d0 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73  ] {.  foreach {s
1f6e0 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64  yntax keywords d
1f6f0 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63 73 65  esc} $corefuncse
1f700 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20 62  t($basesyntax) b
1f710 72 65 61 6b 0a 20 20 72 65 67 73 75 62 20 2d 61  reak.  regsub -a
1f720 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67  ll {\s+} [string
1f730 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b   trim $syntax] {
1f740 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78 0a 20  <br />} syntax. 
1f750 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28   regsub -all {\(
1f760 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e  ([^*)]+)\)} $syn
1f770 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29  tax {(<i>\1</i>)
1f780 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75  } syntax.  regsu
1f790 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74  b -all {,} $synt
1f7a0 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79  ax {</i>,<i>} sy
1f7b0 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61  ntax.  regsub -a
1f7c0 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69  ll {<i>\.\.\.</i
1f7d0 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d  >} $syntax {...}
1f7e0 20 73 79 6e 74 61 78 0a 20 20 72 65 67 65 78 70   syntax.  regexp
1f7f0 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20 24 62 61 73 65   {^[a-z]+} $base
1f800 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a  syntax fragment.
1f810 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
1f820 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a  keywords]==0} {.
1f830 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a      regexp {[a-z
1f840 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d  _]+} $syntax nam
1f850 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e  e.    hd_fragmen
1f860 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22  t $name *$name "
1f870 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75  ${name}() SQL fu
1f880 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65  nction".  } else
1f890 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e   {.    set fragn
1f8a0 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79  ame [lindex $key
1f8b0 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67  words 0].    reg
1f8c0 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d  sub -all {[^a-z]
1f8d0 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66  } $fragname {} f
1f8e0 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66  ragname.    hd_f
1f8f0 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d  ragment $fragnam
1f900 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65  e.    eval hd_ke
1f910 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d  ywords [string m
1f920 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79  ap {\n { }} $key
1f930 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f  words].  }.  hd_
1f940 70 75 74 73 20 22 3c 64 74 3e 3c 70 3e 3c 62 3e  puts "<dt><p><b>
1f950 24 73 79 6e 74 61 78 3c 2f 62 3e 3c 2f 64 74 3e  $syntax</b></dt>
1f960 22 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 22  ".  hd_resolve "
1f970 3c 64 64 3e 3c 70 3e 24 64 65 73 63 3c 2f 64 64  <dd><p>$desc</dd
1f980 3e 5c 6e 22 0a 7d 0a 68 64 5f 70 75 74 73 6e 6c  >\n".}.hd_putsnl
1f990 20 22 3c 2f 64 6c 3e 22 0a 0a 23 23 23 23 23 23   "</dl>"..######
1f9a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f9e0 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
1f9f0 20 7b 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20   {Date And Time 
1fa00 46 75 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66  Functions} datef
1fa10 75 6e 63 20 7b 2a 64 61 74 65 66 75 6e 63 20 7b  unc {*datefunc {
1fa20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75  date and time fu
1fa30 6e 63 74 69 6f 6e 73 7d 7d 0a 68 64 5f 6b 65 79  nctions}}.hd_key
1fa40 77 6f 72 64 73 20 7b 64 61 74 65 28 29 20 53 51  words {date() SQ
1fa50 4c 20 66 75 6e 63 74 69 6f 6e 7d 20 7b 74 69 6d  L function} {tim
1fa60 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
1fa70 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64  }.hd_keywords {d
1fa80 61 74 65 74 69 6d 65 28 29 20 53 51 4c 20 66 75  atetime() SQL fu
1fa90 6e 63 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e 64  nction} {juliand
1faa0 61 79 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  ay() SQL functio
1fab0 6e 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  n}.hd_keywords {
1fac0 73 74 72 66 74 69 6d 65 28 29 20 53 51 4c 20 66  strftime() SQL f
1fad0 75 6e 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e 0a  unction}.</tcl>.
1fae0 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 73 75 70 70  .<p>.SQLite supp
1faf0 6f 72 74 73 20 66 69 76 65 20 64 61 74 65 20 61  orts five date a
1fb00 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
1fb10 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f  s as follows:.</
1fb20 70 3e 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69  p>..<p>.<ol>.<li
1fb30 3e 20 5e 28 3c 62 3e 64 61 74 65 28 3c 2f 62 3e  > ^(<b>date(</b>
1fb40 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
1fb50 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1fb60 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1fb70 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
1fb80 5e 28 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69  ^(<b>time(</b><i
1fb90 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
1fba0 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
1fbb0 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
1fbc0 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28  )^ </li>.<li> ^(
1fbd0 3c 62 3e 64 61 74 65 74 69 6d 65 28 3c 2f 62 3e  <b>datetime(</b>
1fbe0 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d  <i>timestring, m
1fbf0 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65  odifier, modifie
1fc00 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f  r, ...</i><b>)</
1fc10 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20  b>)^ </li>.<li> 
1fc20 5e 28 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28 3c  ^(<b>julianday(<
1fc30 2f 62 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67  /b><i>timestring
1fc40 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69  , modifier, modi
1fc50 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e  fier, ...</i><b>
1fc60 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c  )</b>)^ </li>.<l
1fc70 69 3e 20 5e 28 3c 62 3e 73 74 72 66 74 69 6d 65  i> ^(<b>strftime
1fc80 28 3c 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c 20  (</b><i>format, 
1fc90 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69  timestring, modi
1fca0 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20  fier, modifier, 
1fcb0 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29  ...</i><b>)</b>)
1fcc0 5e 20 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c  ^ </li>.</ol>..<
1fcd0 70 3e 0a 5e 41 6c 6c 20 66 69 76 65 20 64 61 74  p>.^All five dat
1fce0 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1fcf0 69 6f 6e 73 20 74 61 6b 65 20 61 20 74 69 6d 65  ions take a time
1fd00 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20 61 72   string as an ar
1fd10 67 75 6d 65 6e 74 2e 20 0a 5e 54 68 65 20 74 69  gument. .^The ti
1fd20 6d 65 20 73 74 72 69 6e 67 20 69 73 20 66 6f 6c  me string is fol
1fd30 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
1fd40 20 6d 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 2e   more modifiers.
1fd50 20 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28   .^The strftime(
1fd60 29 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20  ) function also 
1fd70 74 61 6b 65 73 20 61 20 66 6f 72 6d 61 74 20 73  takes a format s
1fd80 74 72 69 6e 67 20 61 73 20 69 74 73 20 66 69 72  tring as its fir
1fd90 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70  st argument..</p
1fda0 3e 0a 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65 20  >..<p>.The date 
1fdb0 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1fdc0 6e 73 20 75 73 65 20 61 20 73 75 62 73 65 74 20  ns use a subset 
1fdd0 6f 66 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  of.[http://en.wi
1fde0 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1fdf0 2f 49 53 4f 5f 38 36 30 31 20 7c 20 49 53 30 2d  /ISO_8601 | IS0-
1fe00 38 36 30 31 5d 20 64 61 74 65 20 61 6e 64 20 74  8601] date and t
1fe10 69 6d 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54 68  ime.formats..^Th
1fe20 65 20 64 61 74 65 28 29 20 66 75 6e 63 74 69 6f  e date() functio
1fe30 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 61  n returns the da
1fe40 74 65 20 69 6e 20 74 68 69 73 20 66 6f 72 6d 61  te in this forma
1fe50 74 3a 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20 0a  t: YYYY-MM-DD. .
1fe60 5e 54 68 65 20 74 69 6d 65 28 29 20 66 75 6e 63  ^The time() func
1fe70 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
1fe80 20 74 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a 53   time as HH:MM:S
1fe90 53 2e 20 0a 5e 54 68 65 20 64 61 74 65 74 69 6d  S. .^The datetim
1fea0 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  e() function ret
1feb0 75 72 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44  urns "YYYY-MM-DD
1fec0 20 48 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28 54   HH:MM:SS". .^(T
1fed0 68 65 20 6a 75 6c 69 61 6e 64 61 79 28 29 20 66  he julianday() f
1fee0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1fef0 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  the .[http://en.
1ff00 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1ff10 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20  ki/Julian_day | 
1ff20 4a 75 6c 69 61 6e 20 64 61 79 5d 20 2d 20 74 68  Julian day] - th
1ff30 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73  e.number of days
1ff40 20 73 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20 47   since noon in G
1ff50 72 65 65 6e 77 69 63 68 20 6f 6e 20 4e 6f 76 65  reenwich on Nove
1ff60 6d 62 65 72 20 32 34 2c 20 34 37 31 34 20 42 2e  mber 24, 4714 B.
1ff70 43 2e 20 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e 2e  C. .([http://en.
1ff80 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1ff90 6b 69 2f 50 72 6f 6c 65 70 74 69 63 5f 47 72 65  ki/Proleptic_Gre
1ffa0 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20  gorian_calendar 
1ffb0 7c 20 50 72 6f 6c 65 70 74 69 63 20 47 72 65 67  | Proleptic Greg
1ffc0 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 29  orian calendar])
1ffd0 2e 29 5e 0a 5e 54 68 65 20 73 74 72 66 74 69 6d  .)^.^The strftim
1ffe0 65 28 29 20 72 6f 75 74 69 6e 65 20 72 65 74 75  e() routine retu
1fff0 72 6e 73 20 74 68 65 20 64 61 74 65 20 66 6f 72  rns the date for
20000 6d 61 74 74 65 64 20 61 63 63 6f 72 64 69 6e 67  matted according
20010 20 74 6f 20 0a 74 68 65 20 66 6f 72 6d 61 74 20   to .the format 
20020 73 74 72 69 6e 67 20 73 70 65 63 69 66 69 65 64  string specified
20030 20 61 73 20 74 68 65 20 66 69 72 73 74 20 61 72   as the first ar
20040 67 75 6d 65 6e 74 2e 0a 5e 54 68 65 20 66 6f 72  gument..^The for
20050 6d 61 74 20 73 74 72 69 6e 67 20 73 75 70 70 6f  mat string suppo
20060 72 74 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d  rts the most com
20070 6d 6f 6e 20 73 75 62 73 74 69 74 75 74 69 6f 6e  mon substitution
20080 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 0a  s found in the .
20090 5b 68 74 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75  [http://opengrou
200a0 70 2e 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75 62 73  p.org/onlinepubs
200b0 2f 30 30 37 39 30 38 37 39 39 2f 78 73 68 2f 73  /007908799/xsh/s
200c0 74 72 66 74 69 6d 65 2e 68 74 6d 6c 20 7c 20 73  trftime.html | s
200d0 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69  trftime() functi
200e0 6f 6e 5d 0a 66 72 6f 6d 20 74 68 65 20 73 74 61  on].from the sta
200f0 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 20  ndard C library 
20100 70 6c 75 73 20 74 77 6f 20 6e 65 77 20 73 75 62  plus two new sub
20110 73 74 69 74 75 74 69 6f 6e 73 2c 20 25 66 20 61  stitutions, %f a
20120 6e 64 20 25 4a 2e 0a 5e 28 54 68 65 20 66 6f 6c  nd %J..^(The fol
20130 6c 6f 77 69 6e 67 20 69 73 20 61 20 63 6f 6d 70  lowing is a comp
20140 6c 65 74 65 20 6c 69 73 74 20 6f 66 20 76 61 6c  lete list of val
20150 69 64 20 73 74 72 66 74 69 6d 65 28 29 20 73 75  id strftime() su
20160 62 73 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70  bstitutions:.</p
20170 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
20180 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30  <table border="0
20190 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30  " cellpadding="0
201a0 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30  " cellspacing="0
201b0 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77  ">.<tr><td><td w
201c0 69 64 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f  idth="10"><td></
201d0 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64  tr>..<tr><td> %d
201e0 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66   <td><td> day of
201f0 20 6d 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c   month: 00.<tr><
20200 74 64 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20  td> %f <td><td> 
20210 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e  fractional secon
20220 64 73 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c  ds: SS.SSS.<tr><
20230 74 64 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20  td> %H <td><td> 
20240 68 6f 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72  hour: 00-24 .<tr
20250 3e 3c 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64  ><td> %j <td><td
20260 3e 20 64 61 79 20 6f 66 20 79 65 61 72 3a 20 30  > day of year: 0
20270 30 31 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20  01-366.<tr><td> 
20280 25 4a 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69  %J <td><td> Juli
20290 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74  an day number.<t
202a0 72 3e 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74  r><td> %m <td><t
202b0 64 3e 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a  d> month: 01-12.
202c0 3c 74 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e  <tr><td> %M <td>
202d0 3c 74 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d  <td> minute: 00-
202e0 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c  59.<tr><td> %s <
202f0 74 64 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20  td><td> seconds 
20300 73 69 6e 63 65 20 31 39 37 30 2d 30 31 2d 30 31  since 1970-01-01
20310 0a 3c 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64  .<tr><td> %S <td
20320 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30  ><td> seconds: 0
20330 30 2d 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77  0-59.<tr><td> %w
20340 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66   <td><td> day of
20350 20 77 65 65 6b 20 30 2d 36 20 77 69 74 68 20 53   week 0-6 with S
20360 75 6e 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64  unday==0.<tr><td
20370 3e 20 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65  > %W <td><td> we
20380 65 6b 20 6f 66 20 79 65 61 72 3a 20 30 30 2d 35  ek of year: 00-5
20390 33 0a 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74  3.<tr><td> %Y <t
203a0 64 3e 3c 74 64 3e 20 79 65 61 72 3a 20 30 30 30  d><td> year: 000
203b0 30 2d 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20  0-9999.<tr><td> 
203c0 25 25 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f  %% <td><td> %.</
203d0 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75  table>.</blockqu
203e0 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e 6f  ote>)^..<p>.^(No
203f0 74 69 63 65 20 74 68 61 74 20 61 6c 6c 20 6f 74  tice that all ot
20400 68 65 72 20 64 61 74 65 20 61 6e 64 20 74 69 6d  her date and tim
20410 65 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20  e functions can 
20420 62 65 20 65 78 70 72 65 73 73 65 64 0a 69 6e 20  be expressed.in 
20430 74 65 72 6d 73 20 6f 66 20 73 74 72 66 74 69 6d  terms of strftim
20440 65 28 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  e():.</p>..<bloc
20450 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62  kquote>.<table b
20460 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61  order="0" cellpa
20470 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70  dding="0" cellsp
20480 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c  acing="0">.<tr><
20490 74 64 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c 2f  td><b>Function</
204a0 62 3e 3c 74 64 20 77 69 64 74 68 3d 22 33 30 22  b><td width="30"
204b0 3e 3c 74 64 3e 3c 62 3e 45 71 75 69 76 61 6c 65  ><td><b>Equivale
204c0 6e 74 20 73 74 72 66 74 69 6d 65 28 29 3c 2f 62  nt strftime()</b
204d0 3e 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74  >.<tr><td>   dat
204e0 65 28 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e  e(...)      <td>
204f0 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27  <td>  strftime('
20500 25 59 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29 0a  %Y-%m-%d', ...).
20510 3c 74 72 3e 3c 74 64 3e 20 20 20 74 69 6d 65 28  <tr><td>   time(
20520 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74  ...)      <td><t
20530 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 48  d>  strftime('%H
20540 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74  :%M:%S', ...).<t
20550 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 74 69 6d  r><td>   datetim
20560 65 28 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74 64 3e  e(...)  <td><td>
20570 20 20 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25    strftime('%Y-%
20580 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 27 2c 20  m-%d %H:%M:%S', 
20590 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20  ...).<tr><td>   
205a0 6a 75 6c 69 61 6e 64 61 79 28 2e 2e 2e 29 20 3c  julianday(...) <
205b0 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d  td><td>  strftim
205c0 65 28 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f 74  e('%J', ...).</t
205d0 61 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  able>.</blockquo
205e0 74 65 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20 6f  te>)^..<p>.The o
205f0 6e 6c 79 20 72 65 61 73 6f 6e 73 20 66 6f 72 20  nly reasons for 
20600 70 72 6f 76 69 64 69 6e 67 20 66 75 6e 63 74 69  providing functi
20610 6f 6e 73 20 6f 74 68 65 72 20 74 68 61 6e 20 73  ons other than s
20620 74 72 66 74 69 6d 65 28 29 20 69 73 0a 66 6f 72  trftime() is.for
20630 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e 64   convenience and
20640 20 66 6f 72 20 65 66 66 69 63 69 65 6e 63 79 2e   for efficiency.
20650 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65 20  .</p>..<h3>Time 
20660 53 74 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70  Strings</h3>..<p
20670 3e 5e 28 41 20 74 69 6d 65 20 73 74 72 69 6e 67  >^(A time string
20680 20 63 61 6e 20 62 65 20 69 6e 20 61 6e 79 20 6f   can be in any o
20690 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
206a0 66 6f 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f  formats:</p>..<o
206b0 6c 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  l>.<li> <i>YYYY-
206c0 4d 4d 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c  MM-DD</i>.<li> <
206d0 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a  i>YYYY-MM-DD HH:
206e0 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  MM</i>.<li> <i>Y
206f0 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
20700 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59  SS</i>.<li> <i>Y
20710 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
20720 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  SS.SSS</i>.<li> 
20730 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69  <i>YYYY-MM-DD</i
20740 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d  ><b>T</b><i>HH:M
20750 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59  M</i>.<li> <i>YY
20760 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54  YY-MM-DD</i><b>T
20770 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c  </b><i>HH:MM:SS<
20780 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
20790 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
207a0 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53  b><i>HH:MM:SS.SS
207b0 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  S</i>.<li> <i>HH
207c0 3a 4d 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  :MM</i>.<li> <i>
207d0 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69  HH:MM:SS</i>.<li
207e0 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53  > <i>HH:MM:SS.SS
207f0 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f  S</i>.<li> <b>no
20800 77 3c 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44 44  w</b>.<li> <i>DD
20810 44 44 44 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f 6f  DDDDDDDD</i>.</o
20820 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66 6f  l>)^..<p>.^In fo
20830 72 6d 61 74 73 20 35 20 74 68 72 6f 75 67 68 20  rmats 5 through 
20840 37 2c 20 74 68 65 20 22 54 22 20 69 73 20 61 20  7, the "T" is a 
20850 6c 69 74 65 72 61 6c 20 63 68 61 72 61 63 74 65  literal characte
20860 72 20 73 65 70 61 72 61 74 69 6e 67 20 0a 74 68  r separating .th
20870 65 20 64 61 74 65 20 61 6e 64 20 74 68 65 20 74  e date and the t
20880 69 6d 65 2c 20 61 73 20 72 65 71 75 69 72 65 64  ime, as required
20890 20 62 79 20 0a 5b 68 74 74 70 3a 2f 2f 77 77 77   by .[http://www
208a0 2e 77 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54 45  .w3c.org/TR/NOTE
208b0 2d 64 61 74 65 74 69 6d 65 20 7c 20 49 53 4f 2d  -datetime | ISO-
208c0 38 36 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74 73  8601]. .^Formats
208d0 20 38 20 74 68 72 6f 75 67 68 20 31 30 20 74 68   8 through 10 th
208e0 61 74 20 73 70 65 63 69 66 79 20 6f 6e 6c 79 20  at specify only 
208f0 61 20 74 69 6d 65 20 61 73 73 75 6d 65 20 61 20  a time assume a 
20900 64 61 74 65 20 6f 66 20 0a 32 30 30 30 2d 30 31  date of .2000-01
20910 2d 30 31 2e 20 46 6f 72 6d 61 74 20 31 31 2c 20  -01. Format 11, 
20920 74 68 65 20 73 74 72 69 6e 67 20 27 6e 6f 77 27  the string 'now'
20930 2c 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69  , is converted i
20940 6e 74 6f 20 74 68 65 20 0a 63 75 72 72 65 6e 74  nto the .current
20950 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 61   date and time a
20960 73 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  s obtained from 
20970 74 68 65 20 78 43 75 72 72 65 6e 74 54 69 6d 65  the xCurrentTime
20980 20 6d 65 74 68 6f 64 0a 6f 66 20 74 68 65 20 5b   method.of the [
20990 73 71 6c 69 74 65 33 5f 76 66 73 5d 20 6f 62 6a  sqlite3_vfs] obj
209a0 65 63 74 20 69 6e 20 75 73 65 2e 0a 5e 54 68 65  ect in use..^The
209b0 20 27 6e 6f 77 27 20 61 72 67 75 6d 65 6e 74 20   'now' argument 
209c0 74 6f 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  to date and time
209d0 20 66 75 6e 63 74 69 6f 6e 73 20 61 6c 77 61 79   functions alway
209e0 73 20 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c  s returns exactl
209f0 79 20 74 68 65 0a 73 61 6d 65 20 76 61 6c 75 65  y the.same value
20a00 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 69 6e   for multiple in
20a10 76 6f 63 61 74 69 6f 6e 73 20 77 69 74 68 69 6e  vocations within
20a20 20 74 68 65 20 73 61 6d 65 20 5b 73 71 6c 69 74   the same [sqlit
20a30 65 33 5f 73 74 65 70 28 29 5d 20 63 61 6c 6c 2e  e3_step()] call.
20a40 0a 5e 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  .^[http://en.wik
20a50 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
20a60 43 6f 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69 76  Coordinated_Univ
20a70 65 72 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69  ersal_Time | Uni
20a80 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74  versal Coordinat
20a90 65 64 20 54 69 6d 65 20 28 55 54 43 29 5d 20 69  ed Time (UTC)] i
20aa0 73 20 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74  s used. .^Format
20ab0 20 31 32 20 69 73 20 74 68 65 20 0a 5b 68 74 74   12 is the .[htt
20ac0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
20ad0 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e  .org/wiki/Julian
20ae0 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61  _day | Julian da
20af0 79 20 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65 73  y number].expres
20b00 73 65 64 20 61 73 20 61 20 66 6c 6f 61 74 69 6e  sed as a floatin
20b10 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c  g point value..<
20b20 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d 61 74 73  /p>..<p>.Formats
20b30 20 32 20 74 68 72 6f 75 67 68 20 31 30 20 6d 61   2 through 10 ma
20b40 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  y be optionally 
20b50 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 74 69  followed by a ti
20b60 6d 65 7a 6f 6e 65 20 69 6e 64 69 63 61 74 6f 72  mezone indicator
20b70 20 6f 66 20 74 68 65 20 66 6f 72 6d 0a 22 3c 69   of the form."<i
20b80 3e 26 23 39 31 3b 2b 2d 26 23 39 33 3b 48 48 3a  >&#91;+-&#93;HH:
20b90 4d 4d 3c 2f 69 3e 22 20 6f 72 20 6a 75 73 74 20  MM</i>" or just 
20ba0 22 3c 69 3e 5a 3c 2f 69 3e 22 2e 20 20 54 68 65  "<i>Z</i>".  The
20bb0 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
20bc0 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 55 54 43  unctions use UTC
20bd0 20 6f 72 20 22 7a 75 6c 75 22 0a 74 69 6d 65 20   or "zulu".time 
20be0 69 6e 74 65 72 6e 61 6c 6c 79 2c 20 61 6e 64 20  internally, and 
20bf0 73 6f 20 74 68 65 20 22 5a 22 20 73 75 66 66 69  so the "Z" suffi
20c00 78 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 41  x is a no-op.  A
20c10 6e 79 20 6e 6f 6e 2d 7a 65 72 6f 20 22 48 48 3a  ny non-zero "HH:
20c20 4d 4d 22 20 73 75 66 66 69 78 20 69 73 0a 73 75  MM" suffix is.su
20c30 62 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68  btracted from th
20c40 65 20 69 6e 64 69 63 61 74 65 64 20 64 61 74 65  e indicated date
20c50 20 61 6e 64 20 74 69 6d 65 20 69 6e 20 6f 72 64   and time in ord
20c60 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 20 7a 75  er to compute zu
20c70 6c 75 20 74 69 6d 65 2e 0a 46 6f 72 20 65 78 61  lu time..For exa
20c80 6d 70 6c 65 2c 20 61 6c 6c 20 6f 66 20 74 68 65  mple, all of the
20c90 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 69 6d 65 20   following time 
20ca0 73 74 72 69 6e 67 73 20 61 72 65 20 65 71 75 69  strings are equi
20cb0 76 61 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a 3c 62  valent:.</p>..<b
20cc0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 32 30 31 33 2d  lockquote>.2013-
20cd0 31 30 2d 30 37 20 30 38 3a 32 33 3a 31 39 2e 31  10-07 08:23:19.1
20ce0 32 30 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30  20<br>.2013-10-0
20cf0 37 54 30 38 3a 32 33 3a 31 39 2e 31 32 30 5a 3c  7T08:23:19.120Z<
20d00 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20 30  br>.2013-10-07 0
20d10 34 3a 32 33 3a 31 39 2e 31 32 30 2d 30 34 3a 30  4:23:19.120-04:0
20d20 30 3c 62 72 3e 0a 32 34 35 36 35 37 32 2e 38 34  0<br>.2456572.84
20d30 39 35 32 36 38 35 0a 3c 2f 62 6c 6f 63 6b 71 75  952685.</blockqu
20d40 6f 74 65 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e 20 66  ote>..<p>.^(In f
20d50 6f 72 6d 61 74 73 20 34 2c 20 37 2c 20 61 6e 64  ormats 4, 7, and
20d60 20 31 30 2c 20 74 68 65 20 66 72 61 63 74 69 6f   10, the fractio
20d70 6e 61 6c 20 73 65 63 6f 6e 64 73 20 76 61 6c 75  nal seconds valu
20d80 65 20 53 53 2e 53 53 53 20 63 61 6e 20 68 61 76  e SS.SSS can hav
20d90 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69  e.one or more di
20da0 67 69 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  gits following t
20db0 68 65 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74  he decimal point
20dc0 2e 20 20 45 78 61 63 74 6c 79 20 74 68 72 65 65  .  Exactly three
20dd0 20 64 69 67 69 74 73 20 61 72 65 0a 73 68 6f 77   digits are.show
20de0 6e 20 69 6e 20 74 68 65 20 65 78 61 6d 70 6c 65  n in the example
20df0 73 20 62 65 63 61 75 73 65 20 6f 6e 6c 79 20 74  s because only t
20e00 68 65 20 66 69 72 73 74 20 74 68 72 65 65 20 64  he first three d
20e10 69 67 69 74 73 20 61 72 65 20 73 69 67 6e 69 66  igits are signif
20e20 69 63 61 6e 74 0a 74 6f 20 74 68 65 20 72 65 73  icant.to the res
20e30 75 6c 74 2c 20 62 75 74 20 74 68 65 20 69 6e 70  ult, but the inp
20e40 75 74 20 73 74 72 69 6e 67 20 63 61 6e 20 68 61  ut string can ha
20e50 76 65 20 66 65 77 65 72 20 6f 72 20 6d 6f 72 65  ve fewer or more
20e60 20 74 68 61 6e 20 74 68 72 65 65 20 64 69 67 69   than three digi
20e70 74 73 0a 61 6e 64 20 74 68 65 20 64 61 74 65 2f  ts.and the date/
20e80 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 77  time functions w
20e90 69 6c 6c 20 73 74 69 6c 6c 20 6f 70 65 72 61 74  ill still operat
20ea0 65 20 63 6f 72 72 65 63 74 6c 79 2e 29 5e 0a 53  e correctly.)^.S
20eb0 69 6d 69 6c 61 72 6c 79 2c 20 66 6f 72 6d 61 74  imilarly, format
20ec0 20 31 32 20 69 73 20 73 68 6f 77 6e 20 77 69 74   12 is shown wit
20ed0 68 20 31 30 20 73 69 67 6e 69 66 69 63 61 6e 74  h 10 significant
20ee0 20 64 69 67 69 74 73 2c 20 62 75 74 20 74 68 65   digits, but the
20ef0 20 64 61 74 65 2f 74 69 6d 65 0a 66 75 6e 63 74   date/time.funct
20f00 69 6f 6e 73 20 77 69 6c 6c 20 72 65 61 6c 6c 79  ions will really
20f10 20 61 63 63 65 70 74 20 61 73 20 6d 61 6e 79 20   accept as many 
20f20 6f 72 20 61 73 20 66 65 77 20 64 69 67 69 74 73  or as few digits
20f30 20 61 73 20 61 72 65 20 6e 65 63 65 73 73 61 72   as are necessar
20f40 79 20 74 6f 0a 72 65 70 72 65 73 65 6e 74 20 74  y to.represent t
20f50 68 65 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75  he Julian day nu
20f60 6d 62 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e  mber..</p>..<h3>
20f70 4d 6f 64 69 66 69 65 72 73 3c 2f 68 33 3e 0a 0a  Modifiers</h3>..
20f80 3c 70 3e 5e 54 68 65 20 74 69 6d 65 20 73 74 72  <p>^The time str
20f90 69 6e 67 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f  ing can be follo
20fa0 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d  wed by zero or m
20fb0 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 20 74 68  ore modifiers th
20fc0 61 74 20 0a 61 6c 74 65 72 20 64 61 74 65 20 61  at .alter date a
20fd0 6e 64 2f 6f 72 20 74 69 6d 65 2e 20 5e 45 61 63  nd/or time. ^Eac
20fe0 68 20 6d 6f 64 69 66 69 65 72 0a 69 73 20 61 20  h modifier.is a 
20ff0 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 74  transformation t
21000 68 61 74 20 69 73 20 61 70 70 6c 69 65 64 20 74  hat is applied t
21010 6f 20 74 68 65 20 74 69 6d 65 20 76 61 6c 75 65  o the time value
21020 20 74 6f 20 69 74 73 20 6c 65 66 74 2e 0a 5e 4d   to its left..^M
21030 6f 64 69 66 69 65 72 73 20 61 72 65 20 61 70 70  odifiers are app
21040 6c 69 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74  lied from left t
21050 6f 20 72 69 67 68 74 3b 20 6f 72 64 65 72 20 69  o right; order i
21060 73 20 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28 54  s important..^(T
21070 68 65 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f 64  he available mod
21080 69 66 69 65 72 73 20 61 72 65 20 61 73 20 66 6f  ifiers are as fo
21090 6c 6c 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  llows.</p>..<ol>
210a0 0a 3c 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c  .<li> NNN days.<
210b0 6c 69 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c  li> NNN hours.<l
210c0 69 3e 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c  i> NNN minutes.<
210d0 6c 69 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63  li> NNN.NNNN sec
210e0 6f 6e 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f  onds.<li> NNN mo
210f0 6e 74 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65  nths.<li> NNN ye
21100 61 72 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  ars.<li> start o
21110 66 20 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74 61  f month.<li> sta
21120 72 74 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e 20  rt of year.<li> 
21130 73 74 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c 69  start of day.<li
21140 3e 20 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e  > weekday N.<li>
21150 20 75 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e 20   unixepoch.<li> 
21160 6c 6f 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75  localtime.<li> u
21170 74 63 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e  tc .</ol>)^..<p>
21180 5e 54 68 65 20 66 69 72 73 74 20 73 69 78 20 6d  ^The first six m
21190 6f 64 69 66 69 65 72 73 20 28 31 20 74 68 72 6f  odifiers (1 thro
211a0 75 67 68 20 36 29 20 0a 73 69 6d 70 6c 79 20 61  ugh 6) .simply a
211b0 64 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64  dd the specified
211c0 20 61 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20   amount of time 
211d0 74 6f 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  to the date and 
211e0 74 69 6d 65 20 0a 73 70 65 63 69 66 69 65 64 20  time .specified 
211f0 62 79 20 74 68 65 20 70 72 65 63 65 64 69 6e 67  by the preceding
21200 20 74 69 6d 65 73 74 72 69 6e 67 20 61 6e 64 20   timestring and 
21210 6d 6f 64 69 66 69 65 72 73 2e 0a 5e 54 68 65 20  modifiers..^The 
21220 27 73 27 20 63 68 61 72 61 63 74 65 72 20 61 74  's' character at
21230 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
21240 6d 6f 64 69 66 69 65 72 20 6e 61 6d 65 73 20 69  modifier names i
21250 73 20 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 4e 6f 74  s optional..^Not
21260 65 20 74 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b  e that "&plusmn;
21270 4e 4e 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b  NNN months" work
21280 73 20 62 79 20 72 65 6e 64 65 72 69 6e 67 20 74  s by rendering t
21290 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65  he original date
212a0 20 69 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d   into.the YYYY-M
212b0 4d 2d 44 44 20 66 6f 72 6d 61 74 2c 20 61 64 64  M-DD format, add
212c0 69 6e 67 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b  ing the &plusmn;
212d0 4e 4e 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f  NNN to the MM mo
212e0 6e 74 68 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a  nth value, then.
212f0 6e 6f 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20  normalizing the 
21300 72 65 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c 20  result.  ^Thus, 
21310 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  for example, the
21320 20 64 61 74 61 20 32 30 30 31 2d 30 33 2d 33 31   data 2001-03-31
21330 20 6d 6f 64 69 66 69 65 64 0a 62 79 20 27 2b 31   modified.by '+1
21340 20 6d 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c 6c   month' initiall
21350 79 20 79 69 65 6c 64 73 20 32 30 30 31 2d 30 34  y yields 2001-04
21360 2d 33 31 2c 20 62 75 74 20 41 70 72 69 6c 20 6f  -31, but April o
21370 6e 6c 79 20 68 61 73 20 33 30 20 64 61 79 73 0a  nly has 30 days.
21380 73 6f 20 74 68 65 20 64 61 74 65 20 69 73 20 6e  so the date is n
21390 6f 72 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30 30  ormalized to 200
213a0 31 2d 30 35 2d 30 31 2e 20 20 5e 41 20 73 69 6d  1-05-01.  ^A sim
213b0 69 6c 61 72 20 65 66 66 65 63 74 20 6f 63 63 75  ilar effect occu
213c0 72 73 20 77 68 65 6e 0a 74 68 65 20 6f 72 69 67  rs when.the orig
213d0 69 6e 61 6c 20 64 61 74 65 20 69 73 20 46 65 62  inal date is Feb
213e0 72 75 61 72 79 20 32 39 20 6f 66 20 61 20 6c 65  ruary 29 of a le
213f0 61 70 79 65 61 72 20 61 6e 64 20 74 68 65 20 6d  apyear and the m
21400 6f 64 69 66 69 65 72 20 69 73 0a 26 70 6c 75 73  odifier is.&plus
21410 6d 6e 3b 4e 20 79 65 61 72 73 20 77 68 65 72 65  mn;N years where
21420 20 4e 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74   N is not a mult
21430 69 70 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f 70  iple of four.</p
21440 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61 72  >..<p>^The "star
21450 74 20 6f 66 22 20 6d 6f 64 69 66 69 65 72 73 20  t of" modifiers 
21460 28 37 20 74 68 72 6f 75 67 68 20 39 29 20 73 68  (7 through 9) sh
21470 69 66 74 20 74 68 65 20 64 61 74 65 20 62 61 63  ift the date bac
21480 6b 77 61 72 64 73 20 0a 74 6f 20 74 68 65 20 62  kwards .to the b
21490 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
214a0 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79  current month, y
214b0 65 61 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a  ear or day.</p>.
214c0 0a 3c 70 3e 5e 28 54 68 65 20 22 77 65 65 6b 64  .<p>^(The "weekd
214d0 61 79 22 20 6d 6f 64 69 66 69 65 72 20 61 64 76  ay" modifier adv
214e0 61 6e 63 65 73 20 74 68 65 20 64 61 74 65 20 66  ances the date f
214f0 6f 72 77 61 72 64 2c 20 69 66 20 6e 65 63 65 73  orward, if neces
21500 73 61 72 79 2c 0a 74 6f 20 74 68 65 20 6e 65 78  sary,.to the nex
21510 74 20 64 61 74 65 20 77 68 65 72 65 20 74 68 65  t date where the
21520 20 77 65 65 6b 64 61 79 20 6e 75 6d 62 65 72 20   weekday number 
21530 69 73 20 4e 2e 20 53 75 6e 64 61 79 20 69 73 20  is N. Sunday is 
21540 30 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c 0a  0, Monday is 1,.
21550 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 29 5e 0a  and so forth.)^.
21560 5e 49 66 20 74 68 65 20 64 61 74 65 20 69 73 20  ^If the date is 
21570 61 6c 72 65 61 64 79 20 6f 6e 20 74 68 65 20 64  already on the d
21580 65 73 69 72 65 64 20 77 65 65 6b 64 61 79 2c 20  esired weekday, 
21590 74 68 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f  the "weekday" mo
215a0 64 69 66 69 65 72 0a 6c 65 61 76 65 73 20 74 68  difier.leaves th
215b0 65 20 64 61 74 65 20 75 6e 63 68 61 6e 67 65 64  e date unchanged
215c0 2e 20 20 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  .  </p>..<p>^The
215d0 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
215e0 69 66 69 65 72 20 28 31 31 29 20 6f 6e 6c 79 20  ifier (11) only 
215f0 77 6f 72 6b 73 20 69 66 20 69 74 20 69 6d 6d 65  works if it imme
21600 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20  diately follows 
21610 0a 61 20 74 69 6d 65 73 74 72 69 6e 67 20 69 6e  .a timestring in
21620 20 74 68 65 20 44 44 44 44 44 44 44 44 44 44 20   the DDDDDDDDDD 
21630 66 6f 72 6d 61 74 2e 20 0a 5e 54 68 69 73 20 6d  format. .^This m
21640 6f 64 69 66 69 65 72 20 63 61 75 73 65 73 20 74  odifier causes t
21650 68 65 20 44 44 44 44 44 44 44 44 44 44 20 74 6f  he DDDDDDDDDD to
21660 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
21670 6e 6f 74 20 0a 61 73 20 61 20 4a 75 6c 69 61 6e  not .as a Julian
21680 20 64 61 79 20 6e 75 6d 62 65 72 20 61 73 20 69   day number as i
21690 74 20 6e 6f 72 6d 61 6c 6c 79 20 77 6f 75 6c 64  t normally would
216a0 20 62 65 2c 20 62 75 74 20 61 73 0a 5b 68 74 74   be, but as.[htt
216b0 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
216c0 2e 6f 72 67 2f 77 69 6b 69 2f 55 6e 69 78 5f 74  .org/wiki/Unix_t
216d0 69 6d 65 20 7c 20 55 6e 69 78 20 54 69 6d 65 5d  ime | Unix Time]
216e0 20 2d 20 74 68 65 20 0a 6e 75 6d 62 65 72 20 6f   - the .number o
216f0 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20  f seconds since 
21700 31 39 37 30 2e 20 20 49 66 20 74 68 65 20 22 75  1970.  If the "u
21710 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69 66 69  nixepoch" modifi
21720 65 72 20 64 6f 65 73 20 6e 6f 74 0a 66 6f 6c 6c  er does not.foll
21730 6f 77 20 61 20 74 69 6d 65 73 74 72 69 6e 67 20  ow a timestring 
21740 6f 66 20 74 68 65 20 66 6f 72 6d 20 44 44 44 44  of the form DDDD
21750 44 44 44 44 44 44 20 77 68 69 63 68 20 65 78 70  DDDDDD which exp
21760 72 65 73 73 65 73 20 74 68 65 20 6e 75 6d 62 65  resses the numbe
21770 72 0a 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e  r.of seconds sin
21780 63 65 20 31 39 37 30 20 6f 72 20 69 66 20 6f 74  ce 1970 or if ot
21790 68 65 72 20 6d 6f 64 69 66 69 65 72 73 0a 73 65  her modifiers.se
217a0 70 61 72 61 74 65 20 74 68 65 20 22 75 6e 69 78  parate the "unix
217b0 65 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20  epoch" modifier 
217c0 66 72 6f 6d 20 70 72 69 6f 72 20 44 44 44 44 44  from prior DDDDD
217d0 44 44 44 44 44 20 74 68 65 6e 20 74 68 65 0a 62  DDDDD then the.b
217e0 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
217f0 69 6e 65 64 2e 0a 46 6f 72 20 53 51 4c 69 74 65  ined..For SQLite
21800 20 76 65 72 73 69 6f 6e 73 20 62 65 66 6f 72 65   versions before
21810 20 33 2e 31 36 2e 30 20 28 5b 64 61 74 65 6f 66   3.16.0 ([dateof
21820 3a 33 2e 31 36 2e 30 5d 29 2c 20 0a 74 68 65 20  :3.16.0]), .the 
21830 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64 69  "unixepoch" modi
21840 66 69 65 72 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  fier only works 
21850 66 6f 72 0a 64 61 74 65 73 20 62 65 74 77 65 65  for.dates betwee
21860 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a  n 0000-01-01 00:
21870 30 30 3a 30 30 20 61 6e 64 20 35 33 35 32 2d 31  00:00 and 5352-1
21880 31 2d 30 31 20 31 30 3a 35 32 3a 34 37 20 28 75  1-01 10:52:47 (u
21890 6e 69 78 20 74 69 6d 65 73 0a 6f 66 20 2d 36 32  nix times.of -62
218a0 31 36 37 32 31 39 32 30 30 20 74 68 72 6f 75 67  167219200 throug
218b0 68 20 31 30 36 37 35 31 39 39 31 31 36 37 29 2e  h 106751991167).
218c0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
218d0 61 67 6d 65 6e 74 20 6c 6f 63 61 6c 74 69 6d 65  agment localtime
218e0 20 7b 6c 6f 63 61 6c 74 69 6d 65 20 6d 6f 64 69   {localtime modi
218f0 66 69 65 72 7d 20 7b 27 75 74 63 27 20 6d 6f 64  fier} {'utc' mod
21900 69 66 69 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  ifier}</tcl>.<p>
21910 5e 54 68 65 20 22 6c 6f 63 61 6c 74 69 6d 65 22  ^The "localtime"
21920 20 6d 6f 64 69 66 69 65 72 20 28 31 32 29 20 61   modifier (12) a
21930 73 73 75 6d 65 73 20 74 68 65 20 74 69 6d 65 20  ssumes the time 
21940 73 74 72 69 6e 67 20 74 6f 20 69 74 73 20 6c 65  string to its le
21950 66 74 20 69 73 20 69 6e 0a 55 6e 69 76 65 72 73  ft is in.Univers
21960 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64 20 54  al Coordinated T
21970 69 6d 65 20 28 55 54 43 29 20 61 6e 64 20 61 64  ime (UTC) and ad
21980 6a 75 73 74 73 20 74 68 65 20 74 69 6d 65 0a 73  justs the time.s
21990 74 72 69 6e 67 20 73 6f 20 74 68 61 74 20 69 74  tring so that it
219a0 20 64 69 73 70 6c 61 79 73 20 6c 6f 63 61 6c 74   displays localt
219b0 69 6d 65 2e 20 20 49 66 20 22 6c 6f 63 61 6c 74  ime.  If "localt
219c0 69 6d 65 22 0a 66 6f 6c 6c 6f 77 73 20 61 20 74  ime".follows a t
219d0 69 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ime that is not 
219e0 55 54 43 2c 20 74 68 65 6e 20 74 68 65 20 62 65  UTC, then the be
219f0 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
21a00 6e 65 64 2e 0a 5e 28 54 68 65 20 22 75 74 63 22  ned..^(The "utc"
21a10 20 6d 6f 64 69 66 69 65 72 20 69 73 20 74 68 65   modifier is the
21a20 20 6f 70 70 6f 73 69 74 65 20 6f 66 20 22 6c 6f   opposite of "lo
21a30 63 61 6c 74 69 6d 65 22 2e 20 20 0a 22 75 74 63  caltime".  ."utc
21a40 22 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 74  " assumes that t
21a50 68 65 20 73 74 72 69 6e 67 0a 74 6f 20 69 74 73  he string.to its
21a60 20 6c 65 66 74 20 69 73 20 69 6e 20 74 68 65 20   left is in the 
21a70 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 20 61  local timezone a
21a80 6e 64 20 61 64 6a 75 73 74 73 20 74 68 61 74 20  nd adjusts that 
21a90 73 74 72 69 6e 67 20 74 6f 20 62 65 20 69 6e 20  string to be in 
21aa0 55 54 43 2e 29 5e 0a 49 66 20 74 68 65 20 70 72  UTC.)^.If the pr
21ab0 69 6f 72 20 73 74 72 69 6e 67 20 69 73 20 6e 6f  ior string is no
21ac0 74 20 69 6e 20 6c 6f 63 61 6c 74 69 6d 65 2c 20  t in localtime, 
21ad0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
21ae0 6f 66 20 22 75 74 63 22 20 69 73 0a 75 6e 64 65  of "utc" is.unde
21af0 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  fined.</p>..<h3>
21b00 45 78 61 6d 70 6c 65 73 3c 2f 68 33 3e 0a 0a 5e  Examples</h3>..^
21b10 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20  (<p>Compute the 
21b20 63 75 72 72 65 6e 74 20 64 61 74 65 2e 3c 70 3e  current date.<p>
21b30 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45  ..<blockquote>SE
21b40 4c 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 29  LECT date('now')
21b50 3b 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ;</blockquote>)^
21b60 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
21b70 68 65 20 6c 61 73 74 20 64 61 79 20 6f 66 20 74  he last day of t
21b80 68 65 20 63 75 72 72 65 6e 74 20 6d 6f 6e 74 68  he current month
21b90 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
21ba0 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28 27  te>SELECT date('
21bb0 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20 6d  now','start of m
21bc0 6f 6e 74 68 27 2c 27 2b 31 20 6d 6f 6e 74 68 27  onth','+1 month'
21bd0 2c 27 2d 31 20 64 61 79 27 29 3b 0a 3c 2f 62 6c  ,'-1 day');.</bl
21be0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
21bf0 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61  p>Compute the da
21c00 74 65 20 61 6e 64 20 74 69 6d 65 20 67 69 76 65  te and time give
21c10 6e 20 61 20 75 6e 69 78 20 74 69 6d 65 73 74 61  n a unix timesta
21c20 6d 70 20 31 30 39 32 39 34 31 34 36 36 2e 3c 2f  mp 1092941466.</
21c30 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
21c40 0a 20 20 20 20 53 45 4c 45 43 54 20 64 61 74 65  .    SELECT date
21c50 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c  time(1092941466,
21c60 20 27 75 6e 69 78 65 70 6f 63 68 27 29 3b 0a 3c   'unixepoch');.<
21c70 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
21c80 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
21c90 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 67   date and time g
21ca0 69 76 65 6e 20 61 20 75 6e 69 78 20 74 69 6d 65  iven a unix time
21cb0 73 74 61 6d 70 20 31 30 39 32 39 34 31 34 36 36  stamp 1092941466
21cc0 2c 20 61 6e 64 20 0a 63 6f 6d 70 65 6e 73 61 74  , and .compensat
21cd0 65 20 66 6f 72 20 79 6f 75 72 20 6c 6f 63 61 6c  e for your local
21ce0 20 74 69 6d 65 7a 6f 6e 65 2e 3c 2f 70 3e 0a 0a   timezone.</p>..
21cf0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
21d00 45 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31  ELECT datetime(1
21d10 30 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78  092941466, 'unix
21d20 65 70 6f 63 68 27 2c 20 27 6c 6f 63 61 6c 74 69  epoch', 'localti
21d30 6d 65 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  me');.</blockquo
21d40 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
21d50 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20  ute the current 
21d60 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 2e 3c  unix timestamp.<
21d70 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
21d80 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74  >.  SELECT strft
21d90 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 3b  ime('%s','now');
21da0 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
21db0 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74  ..^(<p>Compute t
21dc0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 79  he number of day
21dd0 73 20 73 69 6e 63 65 20 74 68 65 20 73 69 67 6e  s since the sign
21de0 69 6e 67 20 6f 66 20 74 68 65 20 55 53 20 44 65  ing of the US De
21df0 63 6c 61 72 61 74 69 6f 6e 0a 6f 66 20 49 6e 64  claration.of Ind
21e00 65 70 65 6e 64 65 6e 63 65 2e 3c 2f 70 3e 0a 0a  ependence.</p>..
21e10 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
21e20 45 4c 45 43 54 20 6a 75 6c 69 61 6e 64 61 79 28  ELECT julianday(
21e30 27 6e 6f 77 27 29 20 2d 20 6a 75 6c 69 61 6e 64  'now') - juliand
21e40 61 79 28 27 31 37 37 36 2d 30 37 2d 30 34 27 29  ay('1776-07-04')
21e50 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
21e60 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
21e70 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
21e80 63 6f 6e 64 73 20 73 69 6e 63 65 20 61 20 70 61  conds since a pa
21e90 72 74 69 63 75 6c 61 72 20 6d 6f 6d 65 6e 74 20  rticular moment 
21ea0 69 6e 20 32 30 30 34 3a 3c 2f 70 3e 0a 0a 3c 62  in 2004:</p>..<b
21eb0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
21ec0 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73  ECT strftime('%s
21ed0 27 2c 27 6e 6f 77 27 29 20 2d 20 73 74 72 66 74  ','now') - strft
21ee0 69 6d 65 28 27 25 73 27 2c 27 32 30 30 34 2d 30  ime('%s','2004-0
21ef0 31 2d 30 31 20 30 32 3a 33 34 3a 35 36 27 29 3b  1-01 02:34:56');
21f00 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
21f10 0a 0a 5e 28 3c 70 3e 0a 43 6f 6d 70 75 74 65 20  ..^(<p>.Compute 
21f20 74 68 65 20 64 61 74 65 20 6f 66 20 74 68 65 20  the date of the 
21f30 66 69 72 73 74 20 54 75 65 73 64 61 79 20 69 6e  first Tuesday in
21f40 20 4f 63 74 6f 62 65 72 0a 66 6f 72 20 74 68 65   October.for the
21f50 20 63 75 72 72 65 6e 74 20 79 65 61 72 2e 0a 3c   current year..<
21f60 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
21f70 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65 28  >.  SELECT date(
21f80 27 6e 6f 77 27 2c 27 73 74 61 72 74 20 6f 66 20  'now','start of 
21f90 79 65 61 72 27 2c 27 2b 39 20 6d 6f 6e 74 68 73  year','+9 months
21fa0 27 2c 27 77 65 65 6b 64 61 79 20 32 27 29 3b 0a  ','weekday 2');.
21fb0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
21fc0 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68  .^(<p>Compute th
21fd0 65 20 74 69 6d 65 20 73 69 6e 63 65 20 74 68 65  e time since the
21fe0 20 75 6e 69 78 20 65 70 6f 63 68 20 69 6e 20 73   unix epoch in s
21ff0 65 63 6f 6e 64 73 20 0a 28 6c 69 6b 65 20 73 74  econds .(like st
22000 72 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77  rftime('%s','now
22010 27 29 20 65 78 63 65 70 74 20 69 6e 63 6c 75 64  ') except includ
22020 65 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61  es fractional pa
22030 72 74 29 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  rt):</p>..<block
22040 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20  quote>.  SELECT 
22050 28 6a 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27  (julianday('now'
22060 29 20 2d 20 32 34 34 30 35 38 37 2e 35 29 2a 38  ) - 2440587.5)*8
22070 36 34 30 30 2e 30 3b 0a 3c 2f 62 6c 6f 63 6b 71  6400.0;.</blockq
22080 75 6f 74 65 3e 29 5e 0a 0a 3c 68 33 3e 43 61 76  uote>)^..<h3>Cav
22090 65 61 74 73 20 41 6e 64 20 42 75 67 73 3c 2f 68  eats And Bugs</h
220a0 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 75  3>..<p>The compu
220b0 74 61 74 69 6f 6e 20 6f 66 20 6c 6f 63 61 6c 20  tation of local 
220c0 74 69 6d 65 20 64 65 70 65 6e 64 73 20 68 65 61  time depends hea
220d0 76 69 6c 79 20 6f 6e 20 74 68 65 20 77 68 69 6d  vily on the whim
220e0 20 0a 6f 66 20 70 6f 6c 69 74 69 63 69 61 6e 73   .of politicians
220f0 20 61 6e 64 20 69 73 20 74 68 75 73 20 64 69 66   and is thus dif
22100 66 69 63 75 6c 74 20 74 6f 20 67 65 74 20 63 6f  ficult to get co
22110 72 72 65 63 74 20 66 6f 72 20 0a 61 6c 6c 20 6c  rrect for .all l
22120 6f 63 61 6c 65 73 2e 20 5e 49 6e 20 74 68 69 73  ocales. ^In this
22130 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
22140 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
22150 6c 69 62 72 61 72 79 20 0a 66 75 6e 63 74 69 6f  library .functio
22160 6e 20 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29 20  n localtime_r() 
22170 69 73 20 75 73 65 64 20 74 6f 20 61 73 73 69 73  is used to assis
22180 74 20 69 6e 20 74 68 65 20 63 61 6c 63 75 6c 61  t in the calcula
22190 74 69 6f 6e 20 6f 66 20 0a 6c 6f 63 61 6c 20 74  tion of .local t
221a0 69 6d 65 2e 20 20 5e 28 54 68 65 20 0a 6c 6f 63  ime.  ^(The .loc
221b0 61 6c 74 69 6d 65 5f 72 28 29 20 43 20 66 75 6e  altime_r() C fun
221c0 63 74 69 6f 6e 20 6e 6f 72 6d 61 6c 6c 79 20 6f  ction normally o
221d0 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 79 65  nly works for ye
221e0 61 72 73 0a 62 65 74 77 65 65 6e 20 31 39 37 30  ars.between 1970
221f0 20 61 6e 64 20 32 30 33 37 2e 20 46 6f 72 20 64   and 2037. For d
22200 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 69  ates outside thi
22210 73 20 72 61 6e 67 65 2c 20 53 51 4c 69 74 65 20  s range, SQLite 
22220 0a 61 74 74 65 6d 70 74 73 20 74 6f 20 6d 61 70  .attempts to map
22230 20 74 68 65 20 79 65 61 72 20 69 6e 74 6f 20 61   the year into a
22240 6e 20 65 71 75 69 76 61 6c 65 6e 74 20 79 65 61  n equivalent yea
22250 72 20 77 69 74 68 69 6e 20 0a 74 68 69 73 20 72  r within .this r
22260 61 6e 67 65 2c 20 64 6f 20 74 68 65 20 63 61 6c  ange, do the cal
22270 63 75 6c 61 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  culation, then m
22280 61 70 20 74 68 65 20 79 65 61 72 20 62 61 63 6b  ap the year back
22290 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 5e 28 54  .)^</p>...<p>^(T
222a0 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 6f  hese functions o
222b0 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 64 61 74  nly work for dat
222c0 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
222d0 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 0a 61  01-01 00:00:00.a
222e0 6e 64 20 39 39 39 39 2d 31 32 2d 33 31 20 32 33  nd 9999-12-31 23
222f0 3a 35 39 3a 35 39 20 28 6a 75 6c 69 61 6e 20 64  :59:59 (julian d
22300 61 79 20 6e 75 6d 62 65 72 73 20 31 37 32 31 30  ay numbers 17210
22310 35 39 2e 35 20 74 68 72 6f 75 67 68 20 35 33 37  59.5 through 537
22320 33 34 38 34 2e 35 29 2e 29 5e 0a 46 6f 72 20 64  3484.5).)^.For d
22330 61 74 65 73 20 6f 75 74 73 69 64 65 20 74 68 61  ates outside tha
22340 74 20 72 61 6e 67 65 2c 20 74 68 65 20 72 65 73  t range, the res
22350 75 6c 74 73 20 6f 66 20 74 68 65 73 65 0a 66 75  ults of these.fu
22360 6e 63 74 69 6f 6e 73 20 61 72 65 20 75 6e 64 65  nctions are unde
22370 66 69 6e 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4e  fined.</p>..<p>N
22380 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77 73  on-Vista Windows
22390 20 70 6c 61 74 66 6f 72 6d 73 20 6f 6e 6c 79 20   platforms only 
223a0 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 65 74 20  support one set 
223b0 6f 66 20 44 53 54 20 72 75 6c 65 73 2e 20 0a 56  of DST rules. .V
223c0 69 73 74 61 20 6f 6e 6c 79 20 73 75 70 70 6f 72  ista only suppor
223d0 74 73 20 74 77 6f 2e 20 54 68 65 72 65 66 6f 72  ts two. Therefor
223e0 65 2c 20 6f 6e 20 74 68 65 73 65 20 70 6c 61 74  e, on these plat
223f0 66 6f 72 6d 73 2c 20 0a 68 69 73 74 6f 72 69 63  forms, .historic
22400 61 6c 20 44 53 54 20 63 61 6c 63 75 6c 61 74 69  al DST calculati
22410 6f 6e 73 20 77 69 6c 6c 20 62 65 20 69 6e 63 6f  ons will be inco
22420 72 72 65 63 74 2e 20 0a 46 6f 72 20 65 78 61 6d  rrect. .For exam
22430 70 6c 65 2c 20 69 6e 20 74 68 65 20 55 53 2c 20  ple, in the US, 
22440 69 6e 20 32 30 30 37 20 74 68 65 20 44 53 54 20  in 2007 the DST 
22450 72 75 6c 65 73 20 63 68 61 6e 67 65 64 2e 20 0a  rules changed. .
22460 4e 6f 6e 2d 56 69 73 74 61 20 57 69 6e 64 6f 77  Non-Vista Window
22470 73 20 70 6c 61 74 66 6f 72 6d 73 20 61 70 70 6c  s platforms appl
22480 79 20 74 68 65 20 6e 65 77 20 32 30 30 37 20 44  y the new 2007 D
22490 53 54 20 72 75 6c 65 73 20 0a 74 6f 20 61 6c 6c  ST rules .to all
224a0 20 70 72 65 76 69 6f 75 73 20 79 65 61 72 73 20   previous years 
224b0 61 73 20 77 65 6c 6c 2e 20 56 69 73 74 61 20 64  as well. Vista d
224c0 6f 65 73 20 73 6f 6d 65 77 68 61 74 20 62 65 74  oes somewhat bet
224d0 74 65 72 0a 67 65 74 74 69 6e 67 20 72 65 73 75  ter.getting resu
224e0 6c 74 73 20 63 6f 72 72 65 63 74 20 62 61 63 6b  lts correct back
224f0 20 74 6f 20 31 39 38 36 2c 20 77 68 65 6e 20 74   to 1986, when t
22500 68 65 20 72 75 6c 65 73 20 77 65 72 65 20 61 6c  he rules were al
22510 73 6f 20 63 68 61 6e 67 65 64 2e 3c 2f 70 3e 0a  so changed.</p>.
22520 0a 3c 70 3e 41 6c 6c 20 69 6e 74 65 72 6e 61 6c  .<p>All internal
22530 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 61 73   computations as
22540 73 75 6d 65 20 74 68 65 20 0a 5b 68 74 74 70 3a  sume the .[http:
22550 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
22560 72 67 2f 77 69 6b 69 2f 47 72 65 67 6f 72 69 61  rg/wiki/Gregoria
22570 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20 47 72 65  n_calendar | Gre
22580 67 6f 72 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d  gorian calendar]
22590 0a 73 79 73 74 65 6d 2e 20 20 49 74 20 69 73 20  .system.  It is 
225a0 61 6c 73 6f 20 61 73 73 75 6d 65 64 20 74 68 61  also assumed tha
225b0 74 20 65 76 65 72 79 0a 64 61 79 20 69 73 20 65  t every.day is e
225c0 78 61 63 74 6c 79 20 38 36 34 30 30 20 73 65 63  xactly 86400 sec
225d0 6f 6e 64 73 20 69 6e 20 64 75 72 61 74 69 6f 6e  onds in duration
225e0 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  .</p>..<tcl>.###
225f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22630 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
22640 69 6f 6e 20 7b 41 67 67 72 65 67 61 74 65 20 46  ion {Aggregate F
22650 75 6e 63 74 69 6f 6e 73 7d 20 61 67 67 66 75 6e  unctions} aggfun
22660 63 20 7b 2a 61 67 67 66 75 6e 63 7d 0a 75 6e 73  c {*aggfunc}.uns
22670 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63  et -nocomplain c
22680 6f 72 65 66 75 6e 63 73 65 74 0a 0a 66 75 6e 63  orefuncset..func
22690 64 65 66 20 7b 61 76 67 28 58 29 7d 20 7b 2a 61  def {avg(X)} {*a
226a0 76 67 20 7b 61 76 67 28 29 20 61 67 67 72 65 67  vg {avg() aggreg
226b0 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b  ate function}} {
226c0 0a 20 20 5e 54 68 65 20 61 76 67 28 29 20 66 75  .  ^The avg() fu
226d0 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73  nction.  returns
226e0 20 74 68 65 20 61 76 65 72 61 67 65 20 76 61 6c   the average val
226f0 75 65 20 6f 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  ue of all non-NU
22700 4c 4c 20 3c 69 3e 58 3c 2f 69 3e 20 77 69 74 68  LL <i>X</i> with
22710 69 6e 20 61 0a 20 20 67 72 6f 75 70 2e 20 20 5e  in a.  group.  ^
22720 53 74 72 69 6e 67 20 61 6e 64 20 42 4c 4f 42 20  String and BLOB 
22730 76 61 6c 75 65 73 20 74 68 61 74 20 64 6f 20 6e  values that do n
22740 6f 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 6e 75 6d  ot look like num
22750 62 65 72 73 20 61 72 65 0a 20 20 69 6e 74 65 72  bers are.  inter
22760 70 72 65 74 65 64 20 61 73 20 30 2e 0a 20 20 5e  preted as 0..  ^
22770 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76  The result of av
22780 67 28 29 20 69 73 20 61 6c 77 61 79 73 20 61 20  g() is always a 
22790 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
227a0 61 6c 75 65 20 61 73 20 6c 6f 6e 67 20 61 73 0a  alue as long as.
227b0 20 20 61 74 20 74 68 65 72 65 20 69 73 20 61 74    at there is at
227c0 20 6c 65 61 73 74 20 6f 6e 65 20 6e 6f 6e 2d 4e   least one non-N
227d0 55 4c 4c 20 69 6e 70 75 74 20 65 76 65 6e 20 69  ULL input even i
227e0 66 20 61 6c 6c 0a 20 20 69 6e 70 75 74 73 20 61  f all.  inputs a
227f0 72 65 20 69 6e 74 65 67 65 72 73 2e 20 20 5e 54  re integers.  ^T
22800 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 76 67  he result of avg
22810 28 29 20 69 73 20 4e 55 4c 4c 20 69 66 20 61 6e  () is NULL if an
22820 64 20 6f 6e 6c 79 20 69 66 0a 20 20 74 68 65 72  d only if.  ther
22830 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
22840 4c 20 69 6e 70 75 74 73 2e 20 20 0a 7d 0a 0a 66  L inputs.  .}..f
22850 75 6e 63 64 65 66 20 7b 63 6f 75 6e 74 28 58 29  uncdef {count(X)
22860 20 63 6f 75 6e 74 28 2a 29 7d 20 7b 2a 63 6f 75   count(*)} {*cou
22870 6e 74 20 7b 63 6f 75 6e 74 28 29 20 61 67 67 72  nt {count() aggr
22880 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d  egate function}}
22890 20 7b 0a 20 20 5e 54 68 65 20 63 6f 75 6e 74 28   {.  ^The count(
228a0 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  X) function retu
228b0 72 6e 73 0a 20 20 61 20 63 6f 75 6e 74 20 6f 66  rns.  a count of
228c0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74   the number of t
228d0 69 6d 65 73 0a 20 20 74 68 61 74 20 3c 69 3e 58  imes.  that <i>X
228e0 3c 2f 69 3e 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  </i> is not NULL
228f0 20 69 6e 20 61 20 67 72 6f 75 70 2e 20 20 5e 54   in a group.  ^T
22900 68 65 20 63 6f 75 6e 74 28 2a 29 20 66 75 6e 63  he count(*) func
22910 74 69 6f 6e 0a 20 20 28 77 69 74 68 20 6e 6f 20  tion.  (with no 
22920 61 72 67 75 6d 65 6e 74 73 29 20 72 65 74 75 72  arguments) retur
22930 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns the total num
22940 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
22950 68 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e  he group..}..fun
22960 63 64 65 66 20 7b 67 72 6f 75 70 5f 63 6f 6e 63  cdef {group_conc
22970 61 74 28 58 29 20 67 72 6f 75 70 5f 63 6f 6e 63  at(X) group_conc
22980 61 74 28 58 2c 59 29 7d 20 7b 0a 20 20 2a 67 72  at(X,Y)} {.  *gr
22990 6f 75 70 5f 63 6f 6e 63 61 74 20 7b 67 72 6f 75  oup_concat {grou
229a0 70 5f 63 6f 6e 63 61 74 28 29 20 61 67 67 72 65  p_concat() aggre
229b0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d  gate function}.}
229c0 20 7b 0a 20 20 5e 54 68 65 20 67 72 6f 75 70 5f   {.  ^The group_
229d0 63 6f 6e 63 61 74 28 29 20 66 75 6e 63 74 69 6f  concat() functio
229e0 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74  n returns.  a st
229f0 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74 68  ring which is th
22a00 65 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f 6e 20  e concatenation 
22a10 6f 66 0a 20 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c  of.  all non-NUL
22a20 4c 20 76 61 6c 75 65 73 20 6f 66 20 3c 69 3e 58  L values of <i>X
22a30 3c 2f 69 3e 2e 20 20 5e 49 66 20 70 61 72 61 6d  </i>.  ^If param
22a40 65 74 65 72 20 3c 69 3e 59 3c 2f 69 3e 20 69 73  eter <i>Y</i> is
22a50 20 70 72 65 73 65 6e 74 20 74 68 65 6e 0a 20 20   present then.  
22a60 69 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68  it is used as th
22a70 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 62 65  e separator.  be
22a80 74 77 65 65 6e 20 69 6e 73 74 61 6e 63 65 73 20  tween instances 
22a90 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 41  of <i>X</i>.  ^A
22aa0 20 63 6f 6d 6d 61 20 28 22 2c 22 29 20 69 73 20   comma (",") is 
22ab0 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
22ac0 72 61 74 6f 72 0a 20 20 69 66 20 3c 69 3e 59 3c  rator.  if <i>Y<
22ad0 2f 69 3e 20 69 73 20 6f 6d 69 74 74 65 64 2e 20  /i> is omitted. 
22ae0 20 54 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   The order of th
22af0 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 65  e concatenated e
22b00 6c 65 6d 65 6e 74 73 20 69 73 0a 20 20 61 72 62  lements is.  arb
22b10 69 74 72 61 72 79 2e 0a 7d 0a 0a 66 75 6e 63 64  itrary..}..funcd
22b20 65 66 20 7b 6d 61 78 28 58 29 7d 20 7b 2a 6d 61  ef {max(X)} {*ma
22b30 78 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 61  xAggFunc *agg_ma
22b40 78 20 7b 6d 61 78 28 29 20 61 67 67 72 65 67 61  x {max() aggrega
22b50 74 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a  te function}} {.
22b60 20 20 5e 54 68 65 20 6d 61 78 28 29 20 61 67 67    ^The max() agg
22b70 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a  regate function.
22b80 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 61    returns the ma
22b90 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 66 20 61  ximum value of a
22ba0 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ll values in the
22bb0 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d   group..  ^The m
22bc0 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20  aximum value is 
22bd0 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77  the value that w
22be0 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e 65 64  ould be returned
22bf0 20 6c 61 73 74 20 69 6e 20 61 6e 0a 20 20 4f 52   last in an.  OR
22c00 44 45 52 20 42 59 20 6f 6e 20 74 68 65 20 73 61  DER BY on the sa
22c10 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 41 67 67  me column.  ^Agg
22c20 72 65 67 61 74 65 20 6d 61 78 28 29 20 72 65 74  regate max() ret
22c30 75 72 6e 73 20 4e 55 4c 4c 20 0a 20 20 69 66 20  urns NULL .  if 
22c40 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72  and only if ther
22c50 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
22c60 4c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  L values in the 
22c70 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65  group..}..funcde
22c80 66 20 7b 6d 69 6e 28 58 29 7d 20 7b 2a 6d 69 6e  f {min(X)} {*min
22c90 41 67 67 46 75 6e 63 20 2a 61 67 67 5f 6d 69 6e  AggFunc *agg_min
22ca0 20 7b 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74   {min() aggregat
22cb0 65 20 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20  e function}} {. 
22cc0 20 5e 54 68 65 20 6d 69 6e 28 29 20 61 67 67 72   ^The min() aggr
22cd0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 20  egate function. 
22ce0 20 72 65 74 75 72 6e 73 20 74 68 65 20 6d 69 6e   returns the min
22cf0 69 6d 75 6d 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61  imum non-NULL va
22d00 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65  lue of all value
22d10 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a  s in the group..
22d20 20 20 5e 54 68 65 20 6d 69 6e 69 6d 75 6d 20 76    ^The minimum v
22d30 61 6c 75 65 20 69 73 20 74 68 65 20 66 69 72 73  alue is the firs
22d40 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65  t non-NULL value
22d50 20 74 68 61 74 20 77 6f 75 6c 64 20 61 70 70 65   that would appe
22d60 61 72 0a 20 20 69 6e 20 61 6e 20 4f 52 44 45 52  ar.  in an ORDER
22d70 20 42 59 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d   BY of the colum
22d80 6e 2e 0a 20 20 5e 41 67 67 72 65 67 61 74 65 20  n..  ^Aggregate 
22d90 6d 69 6e 28 29 20 72 65 74 75 72 6e 73 20 4e 55  min() returns NU
22da0 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  LL if and only i
22db0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e  f there are no n
22dc0 6f 6e 2d 4e 55 4c 4c 0a 20 20 76 61 6c 75 65 73  on-NULL.  values
22dd0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d   in the group..}
22de0 0a 0a 66 75 6e 63 64 65 66 20 7b 73 75 6d 28 58  ..funcdef {sum(X
22df0 29 20 74 6f 74 61 6c 28 58 29 7d 20 7b 0a 20 20  ) total(X)} {.  
22e00 2a 73 75 6d 46 75 6e 63 20 2a 73 75 6d 20 2a 74  *sumFunc *sum *t
22e10 6f 74 61 6c 0a 20 20 7b 73 75 6d 28 29 20 61 67  otal.  {sum() ag
22e20 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
22e30 7d 0a 20 20 7b 74 6f 74 61 6c 28 29 20 61 67 67  }.  {total() agg
22e40 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 7d  regate function}
22e50 0a 7d 20 7b 0a 20 20 5e 54 68 65 20 73 75 6d 28  .} {.  ^The sum(
22e60 29 20 61 6e 64 20 74 6f 74 61 6c 28 29 20 61 67  ) and total() ag
22e70 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
22e80 73 0a 20 20 72 65 74 75 72 6e 20 73 75 6d 20 6f  s.  return sum o
22e90 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76  f all non-NULL v
22ea0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f  alues in the gro
22eb0 75 70 2e 0a 20 20 5e 49 66 20 74 68 65 72 65 20  up..  ^If there 
22ec0 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20  are no non-NULL 
22ed0 69 6e 70 75 74 20 72 6f 77 73 20 74 68 65 6e 20  input rows then 
22ee0 73 75 6d 28 29 20 72 65 74 75 72 6e 73 0a 20 20  sum() returns.  
22ef0 4e 55 4c 4c 20 62 75 74 20 74 6f 74 61 6c 28 29  NULL but total()
22f00 20 72 65 74 75 72 6e 73 20 30 2e 30 2e 0a 20 20   returns 0.0..  
22f10 4e 55 4c 4c 20 69 73 20 6e 6f 74 20 6e 6f 72 6d  NULL is not norm
22f20 61 6c 6c 79 20 61 20 68 65 6c 70 66 75 6c 20 72  ally a helpful r
22f30 65 73 75 6c 74 20 66 6f 72 20 74 68 65 20 73 75  esult for the su
22f40 6d 20 6f 66 20 6e 6f 20 72 6f 77 73 0a 20 20 62  m of no rows.  b
22f50 75 74 20 74 68 65 20 53 51 4c 20 73 74 61 6e 64  ut the SQL stand
22f60 61 72 64 20 72 65 71 75 69 72 65 73 20 69 74 20  ard requires it 
22f70 61 6e 64 20 6d 6f 73 74 20 6f 74 68 65 72 0a 20  and most other. 
22f80 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
22f90 67 69 6e 65 73 20 69 6d 70 6c 65 6d 65 6e 74 20  gines implement 
22fa0 73 75 6d 28 29 20 74 68 61 74 20 77 61 79 20 73  sum() that way s
22fb0 6f 20 53 51 4c 69 74 65 20 64 6f 65 73 20 69 74  o SQLite does it
22fc0 20 69 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 77   in the.  same w
22fd0 61 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62  ay in order to b
22fe0 65 20 63 6f 6d 70 61 74 69 62 6c 65 2e 20 20 20  e compatible.   
22ff0 54 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64  The non-standard
23000 20 74 6f 74 61 6c 28 29 20 66 75 6e 63 74 69 6f   total() functio
23010 6e 0a 20 20 69 73 20 70 72 6f 76 69 64 65 64 20  n.  is provided 
23020 61 73 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  as a convenient 
23030 77 61 79 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  way to work arou
23040 6e 64 20 74 68 69 73 20 64 65 73 69 67 6e 20 70  nd this design p
23050 72 6f 62 6c 65 6d 0a 20 20 69 6e 20 74 68 65 20  roblem.  in the 
23060 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 3c 2f 70  SQL language.</p
23070 3e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 72 65 73  >..  <p>^The res
23080 75 6c 74 20 6f 66 20 74 6f 74 61 6c 28 29 20 69  ult of total() i
23090 73 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74  s always a float
230a0 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
230b0 0a 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
230c0 66 20 73 75 6d 28 29 20 69 73 20 61 6e 20 69 6e  f sum() is an in
230d0 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 61  teger value if a
230e0 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  ll non-NULL inpu
230f0 74 73 20 61 72 65 20 69 6e 74 65 67 65 72 73 2e  ts are integers.
23100 0a 20 20 5e 49 66 20 61 6e 79 20 69 6e 70 75 74  .  ^If any input
23110 20 74 6f 20 73 75 6d 28 29 20 69 73 20 6e 65 69   to sum() is nei
23120 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
23130 6f 72 20 61 20 4e 55 4c 4c 0a 20 20 74 68 65 6e  or a NULL.  then
23140 20 73 75 6d 28 29 20 72 65 74 75 72 6e 73 20 61   sum() returns a
23150 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
23160 76 61 6c 75 65 0a 20 20 77 68 69 63 68 20 6d 69  value.  which mi
23170 67 68 74 20 62 65 20 61 6e 20 61 70 70 72 6f 78  ght be an approx
23180 69 6d 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 74  imation to the t
23190 72 75 65 20 73 75 6d 2e 3c 2f 70 3e 0a 0a 20 20  rue sum.</p>..  
231a0 3c 70 3e 5e 53 75 6d 28 29 20 77 69 6c 6c 20 74  <p>^Sum() will t
231b0 68 72 6f 77 20 61 6e 20 22 69 6e 74 65 67 65 72  hrow an "integer
231c0 20 6f 76 65 72 66 6c 6f 77 22 20 65 78 63 65 70   overflow" excep
231d0 74 69 6f 6e 20 69 66 20 61 6c 6c 20 69 6e 70 75  tion if all inpu
231e0 74 73 0a 20 20 61 72 65 20 69 6e 74 65 67 65 72  ts.  are integer
231f0 73 20 6f 72 20 4e 55 4c 4c 0a 20 20 61 6e 64 20  s or NULL.  and 
23200 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66  an integer overf
23210 6c 6f 77 20 6f 63 63 75 72 73 20 61 74 20 61 6e  low occurs at an
23220 79 20 70 6f 69 6e 74 20 64 75 72 69 6e 67 20 74  y point during t
23230 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2e 0a  he computation..
23240 20 20 5e 54 6f 74 61 6c 28 29 20 6e 65 76 65 72    ^Total() never
23250 20 74 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67   throws an integ
23260 65 72 20 6f 76 65 72 66 6c 6f 77 2e 0a 7d 0a 3c  er overflow..}.<
23270 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 0a 54 68 65 20  /tcl>...<p>.The 
23280 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
23290 6f 6e 73 20 73 68 6f 77 6e 20 62 65 6c 6f 77 20  ons shown below 
232a0 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 62 79  are available by
232b0 20 64 65 66 61 75 6c 74 2e 20 20 41 64 64 69 74   default.  Addit
232c0 69 6f 6e 61 6c 0a 61 67 67 72 65 67 61 74 65 20  ional.aggregate 
232d0 66 75 6e 63 74 69 6f 6e 73 20 77 72 69 74 74 65  functions writte
232e0 6e 20 69 6e 20 43 20 6d 61 79 20 62 65 20 61 64  n in C may be ad
232f0 64 65 64 20 75 73 69 6e 67 20 74 68 65 20 0a 5b  ded using the .[
23300 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
23310 75 6e 63 74 69 6f 6e 28 29 5d 3c 2f 61 3e 0a 41  unction()]</a>.A
23320 50 49 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 49 6e  PI.</p>..<p>.^In
23330 20 61 6e 79 20 61 67 67 72 65 67 61 74 65 20 66   any aggregate f
23340 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b  unction that tak
23350 65 73 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75  es a single argu
23360 6d 65 6e 74 2c 20 74 68 61 74 20 61 72 67 75 6d  ment, that argum
23370 65 6e 74 0a 63 61 6e 20 62 65 20 70 72 65 63 65  ent.can be prece
23380 64 65 64 20 62 79 20 74 68 65 20 6b 65 79 77 6f  ded by the keywo
23390 72 64 20 44 49 53 54 49 4e 43 54 2e 20 20 5e 49  rd DISTINCT.  ^I
233a0 6e 20 73 75 63 68 20 63 61 73 65 73 2c 20 64 75  n such cases, du
233b0 70 6c 69 63 61 74 65 0a 65 6c 65 6d 65 6e 74 73  plicate.elements
233c0 20 61 72 65 20 66 69 6c 74 65 72 65 64 20 62 65   are filtered be
233d0 66 6f 72 65 20 62 65 69 6e 67 20 70 61 73 73 65  fore being passe
233e0 64 20 69 6e 74 6f 20 74 68 65 20 61 67 67 72 65  d into the aggre
233f0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 5e  gate function..^
23400 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
23410 20 66 75 6e 63 74 69 6f 6e 20 22 63 6f 75 6e 74   function "count
23420 28 64 69 73 74 69 6e 63 74 20 58 29 22 20 77 69  (distinct X)" wi
23430 6c 6c 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  ll return the nu
23440 6d 62 65 72 0a 6f 66 20 64 69 73 74 69 6e 63 74  mber.of distinct
23450 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
23460 6e 20 58 20 69 6e 73 74 65 61 64 20 6f 66 20 74  n X instead of t
23470 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
23480 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 0a 76 61 6c 75  of non-null.valu
23490 65 73 20 69 6e 20 63 6f 6c 75 6d 6e 20 58 2e 0a  es in column X..
234a0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20  </p>..<tcl>.set 
234b0 6c 78 20 7b 7d 0a 66 6f 72 65 61 63 68 20 62 61  lx {}.foreach ba
234c0 73 65 73 79 6e 74 61 78 20 5b 61 72 72 61 79 20  sesyntax [array 
234d0 6e 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65  names corefuncse
234e0 74 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b  t] {.  foreach {
234f0 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20  syntax keywords 
23500 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63 73  desc} $corefuncs
23510 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20  et($basesyntax) 
23520 62 72 65 61 6b 0a 20 20 72 65 67 65 78 70 20 7b  break.  regexp {
23530 5e 5b 61 2d 7a 5f 5d 2b 7d 20 24 62 61 73 65 73  ^[a-z_]+} $bases
23540 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a 20  yntax fragment. 
23550 20 66 6f 72 65 61 63 68 20 63 6f 72 65 73 79 6e   foreach coresyn
23560 74 61 78 20 24 73 79 6e 74 61 78 20 7b 0a 20 20  tax $syntax {.  
23570 20 20 6c 61 70 70 65 6e 64 20 6c 78 20 5b 6c 69    lappend lx [li
23580 73 74 20 24 66 72 61 67 6d 65 6e 74 20 24 63 6f  st $fragment $co
23590 72 65 73 79 6e 74 61 78 20 30 5d 0a 20 20 7d 0a  resyntax 0].  }.
235a0 7d 0a 68 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69 6e  }.hd_list_of_lin
235b0 6b 73 20 7b 7d 20 32 32 35 20 5b 6c 73 6f 72 74  ks {} 225 [lsort
235c0 20 2d 69 6e 64 65 78 20 31 20 24 6c 78 5d 0a 0a   -index 1 $lx]..
235d0 68 64 5f 70 75 74 73 6e 6c 20 22 3c 68 72 20 63  hd_putsnl "<hr c
235e0 6c 61 73 73 3d 27 78 68 72 27 3e 22 0a 68 64 5f  lass='xhr'>".hd_
235f0 70 75 74 73 6e 6c 20 22 3c 64 6c 3e 22 0a 66 6f  putsnl "<dl>".fo
23600 72 65 61 63 68 20 62 61 73 65 73 79 6e 74 61 78  reach basesyntax
23610 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e   [lsort [array n
23620 61 6d 65 73 20 63 6f 72 65 66 75 6e 63 73 65 74  ames corefuncset
23630 5d 5d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b  ]] {.  foreach {
23640 73 79 6e 74 61 78 20 6b 65 79 77 6f 72 64 73 20  syntax keywords 
23650 64 65 73 63 7d 20 24 63 6f 72 65 66 75 6e 63 73  desc} $corefuncs
23660 65 74 28 24 62 61 73 65 73 79 6e 74 61 78 29 20  et($basesyntax) 
23670 62 72 65 61 6b 0a 20 20 72 65 67 73 75 62 20 2d  break.  regsub -
23680 61 6c 6c 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e  all {\s+} [strin
23690 67 20 74 72 69 6d 20 24 73 79 6e 74 61 78 5d 20  g trim $syntax] 
236a0 7b 3c 62 72 20 2f 3e 7d 20 73 79 6e 74 61 78 0a  {<br />} syntax.
236b0 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c    regsub -all {\
236c0 28 28 5b 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79  (([^*)]+)\)} $sy
236d0 6e 74 61 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e  ntax {(<i>\1</i>
236e0 29 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73  )} syntax.  regs
236f0 75 62 20 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e  ub -all {,} $syn
23700 74 61 78 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73  tax {</i>,<i>} s
23710 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d  yntax.  regsub -
23720 61 6c 6c 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f  all {<i>\.\.\.</
23730 69 3e 7d 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e  i>} $syntax {...
23740 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 65 78  } syntax.  regex
23750 70 20 7b 5e 5b 61 2d 7a 5d 2b 7d 20 24 62 61 73  p {^[a-z]+} $bas
23760 65 73 79 6e 74 61 78 20 66 72 61 67 6d 65 6e 74  esyntax fragment
23770 0a 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20  .  if {[llength 
23780 24 6b 65 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b  $keywords]==0} {
23790 0a 20 20 20 20 72 65 67 65 78 70 20 7b 5b 61 2d  .    regexp {[a-
237a0 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61  z_]+} $syntax na
237b0 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65  me.    hd_fragme
237c0 6e 74 20 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20  nt $name *$name 
237d0 22 24 7b 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66  "${name}() SQL f
237e0 75 6e 63 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73  unction".  } els
237f0 65 20 7b 0a 20 20 20 20 73 65 74 20 66 72 61 67  e {.    set frag
23800 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65  name [lindex $ke
23810 79 77 6f 72 64 73 20 30 5d 0a 20 20 20 20 72 65  ywords 0].    re
23820 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a  gsub -all {[^a-z
23830 5d 7d 20 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20  ]} $fragname {} 
23840 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f  fragname.    hd_
23850 66 72 61 67 6d 65 6e 74 20 24 66 72 61 67 6e 61  fragment $fragna
23860 6d 65 0a 20 20 20 20 65 76 61 6c 20 68 64 5f 6b  me.    eval hd_k
23870 65 79 77 6f 72 64 73 20 5b 73 74 72 69 6e 67 20  eywords [string 
23880 6d 61 70 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65  map {\n { }} $ke
23890 79 77 6f 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64  ywords].  }.  hd
238a0 5f 70 75 74 73 20 22 3c 64 74 3e 3c 70 3e 3c 62  _puts "<dt><p><b
238b0 3e 24 73 79 6e 74 61 78 3c 2f 62 3e 3c 2f 64 74  >$syntax</b></dt
238c0 3e 22 0a 20 20 68 64 5f 72 65 73 6f 6c 76 65 20  >".  hd_resolve 
238d0 22 3c 64 64 3e 3c 70 3e 24 64 65 73 63 3c 2f 64  "<dd><p>$desc</d
238e0 64 3e 5c 6e 22 0a 7d 0a 68 64 5f 70 75 74 73 6e  d>\n".}.hd_putsn
238f0 6c 20 22 3c 2f 64 6c 3e 22 0a 0a 23 23 23 23 23  l "</dl>"..#####
23900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23940 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
23950 6e 20 49 4e 53 45 52 54 20 69 6e 73 65 72 74 20  n INSERT insert 
23960 7b 49 4e 53 45 52 54 20 2a 49 4e 53 45 52 54 73  {INSERT *INSERTs
23970 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
23980 6c 65 44 69 61 67 72 61 6d 20 69 6e 73 65 72 74  leDiagram insert
23990 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -stmt.</tcl>..<p
239a0 3e 54 68 65 20 49 4e 53 45 52 54 20 73 74 61 74  >The INSERT stat
239b0 65 6d 65 6e 74 20 63 6f 6d 65 73 20 69 6e 20 74  ement comes in t
239c0 68 72 65 65 20 62 61 73 69 63 20 66 6f 72 6d 73  hree basic forms
239d0 2e 20 20 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  .  .<ol>.<li><p>
239e0 3c 62 3e 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c  <b>INSERT INTO <
239f0 2f 62 3e 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 3c  /b><i>table</i><
23a00 62 3e 20 56 41 4c 55 45 53 28 2e 2e 2e 29 3b 3c  b> VALUES(...);<
23a10 2f 62 3e 0a 3c 70 3e 5e 54 68 65 20 66 69 72 73  /b>.<p>^The firs
23a20 74 20 66 6f 72 6d 20 28 77 69 74 68 20 74 68 65  t form (with the
23a30 20 22 56 41 4c 55 45 53 22 20 6b 65 79 77 6f 72   "VALUES" keywor
23a40 64 29 20 63 72 65 61 74 65 73 20 6f 6e 65 20 6f  d) creates one o
23a50 72 20 6d 6f 72 65 0a 6e 65 77 20 72 6f 77 73 20  r more.new rows 
23a60 69 6e 0a 61 6e 20 65 78 69 73 74 69 6e 67 20 74  in.an existing t
23a70 61 62 6c 65 2e 20 5e 49 66 20 74 68 65 20 3c 79  able. ^If the <y
23a80 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d  yterm>column-nam
23a90 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74 20  e</yyterm> list 
23aa0 61 66 74 65 72 0a 3c 79 79 74 65 72 6d 3e 74 61  after.<yyterm>ta
23ab0 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ble-name</yyterm
23ac0 3e 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68 65  > is omitted the
23ad0 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  n the number.of 
23ae0 76 61 6c 75 65 73 20 69 6e 73 65 72 74 65 64 20  values inserted 
23af0 69 6e 74 6f 20 65 61 63 68 20 72 6f 77 0a 6d 75  into each row.mu
23b00 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
23b10 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
23b20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
23b30 61 62 6c 65 2e 20 5e 49 6e 20 74 68 69 73 20 63  able. ^In this c
23b40 61 73 65 0a 74 68 65 20 72 65 73 75 6c 74 20 6f  ase.the result o
23b50 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
23b60 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65   left-most expre
23b70 73 73 69 6f 6e 20 66 72 6f 6d 20 65 61 63 68 20  ssion from each 
23b80 74 65 72 6d 20 6f 66 0a 74 68 65 20 56 41 4c 55  term of.the VALU
23b90 45 53 20 6c 69 73 74 20 69 73 20 69 6e 73 65 72  ES list is inser
23ba0 74 65 64 20 69 6e 74 6f 20 74 68 65 20 6c 65 66  ted into the lef
23bb0 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66  t-most column of
23bc0 20 65 61 63 68 20 6e 65 77 20 72 6f 77 2c 0a 61   each new row,.a
23bd0 6e 64 20 73 6f 20 66 6f 72 74 68 20 66 6f 72 20  nd so forth for 
23be0 65 61 63 68 20 73 75 62 73 65 71 75 65 6e 74 20  each subsequent 
23bf0 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 49 66 20  expression. ^If 
23c00 61 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e  a <yyterm>column
23c10 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 6c  -name</yyterm>.l
23c20 69 73 74 20 69 73 20 73 70 65 63 69 66 69 65 64  ist is specified
23c30 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  , then the numbe
23c40 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 65  r of values in e
23c50 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 0a  ach term of the.
23c60 56 41 4c 55 45 20 6c 69 73 74 20 6d 75 73 74 20  VALUE list must 
23c70 6d 61 74 63 68 20 74 68 65 20 6e 75 6d 62 65 72  match the number
23c80 20 6f 66 0a 73 70 65 63 69 66 69 65 64 20 63 6f   of.specified co
23c90 6c 75 6d 6e 73 2e 20 5e 45 61 63 68 20 6f 66 20  lumns. ^Each of 
23ca0 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e  the named column
23cb0 73 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f 77  s of the new row
23cc0 20 69 73 20 70 6f 70 75 6c 61 74 65 64 0a 77 69   is populated.wi
23cd0 74 68 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  th the results o
23ce0 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
23cf0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 56   corresponding V
23d00 41 4c 55 45 53 20 65 78 70 72 65 73 73 69 6f 6e  ALUES expression
23d10 2e 20 5e 54 61 62 6c 65 0a 63 6f 6c 75 6d 6e 73  . ^Table.columns
23d20 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 61 70 70   that do not app
23d30 65 61 72 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d  ear in the colum
23d40 6e 20 6c 69 73 74 20 61 72 65 20 70 6f 70 75 6c  n list are popul
23d50 61 74 65 64 20 77 69 74 68 20 74 68 65 20 0a 5b  ated with the .[
23d60 64 65 66 61 75 6c 74 20 63 6f 6c 75 6d 6e 20 76  default column v
23d70 61 6c 75 65 5d 20 28 73 70 65 63 69 66 69 65 64  alue] (specified
23d80 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
23d90 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
23da0 74 61 74 65 6d 65 6e 74 29 2c 20 6f 72 0a 77 69  tatement), or.wi
23db0 74 68 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 5b 64  th NULL if no [d
23dc0 65 66 61 75 6c 74 20 76 61 6c 75 65 5d 20 69 73  efault value] is
23dd0 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 6c 69   specified...<li
23de0 3e 3c 70 3e 3c 62 3e 49 4e 53 45 52 54 20 49 4e  ><p><b>INSERT IN
23df0 54 4f 20 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 3c  TO </b><i>table<
23e00 2f 69 3e 3c 62 3e 20 53 45 4c 45 43 54 20 2e 2e  /i><b> SELECT ..
23e10 2e 3b 3c 2f 62 3e 0a 3c 70 3e 54 68 65 20 73 65  .;</b>.<p>The se
23e20 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 65  cond form of the
23e30 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
23e40 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 5b 53 45  t contains a [SE
23e50 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a  LECT] statement.
23e60 69 6e 73 74 65 61 64 20 6f 66 20 61 20 56 41 4c  instead of a VAL
23e70 55 45 53 20 63 6c 61 75 73 65 2e 20 5e 41 20 6e  UES clause. ^A n
23e80 65 77 20 65 6e 74 72 79 20 69 73 20 69 6e 73 65  ew entry is inse
23e90 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74 61  rted into the ta
23ea0 62 6c 65 20 66 6f 72 20 65 61 63 68 0a 72 6f 77  ble for each.row
23eb0 20 6f 66 20 64 61 74 61 20 72 65 74 75 72 6e 65   of data returne
23ec0 64 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74  d by executing t
23ed0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
23ee0 65 6e 74 2e 20 5e 49 66 20 61 20 63 6f 6c 75 6d  ent. ^If a colum
23ef0 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69 66  n-list is.specif
23f00 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20  ied, the number 
23f10 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
23f20 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
23f30 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20 74  SELECT must be t
23f40 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 6e  he same.as the n
23f50 75 6d 62 65 72 20 6f 66 20 69 74 65 6d 73 20 69  umber of items i
23f60 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6c 69 73  n the column-lis
23f70 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  t. ^Otherwise, i
23f80 66 20 6e 6f 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  f no column-list
23f90 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
23fa0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
23fb0 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
23fc0 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  lt of the SELECT
23fd0 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
23fe0 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e.as the number 
23ff0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
24000 65 20 74 61 62 6c 65 2e 20 5e 41 6e 79 20 53 45  e table. ^Any SE
24010 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20  LECT statement, 
24020 69 6e 63 6c 75 64 69 6e 67 0a 5b 63 6f 6d 70 6f  including.[compo
24030 75 6e 64 20 53 45 4c 45 43 54 73 5d 20 61 6e 64  und SELECTs] and
24040 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
24050 74 73 20 77 69 74 68 20 5b 4f 52 44 45 52 20 42  ts with [ORDER B
24060 59 5d 20 61 6e 64 2f 6f 72 20 5b 4c 49 4d 49 54  Y] and/or [LIMIT
24070 5d 20 63 6c 61 75 73 65 73 2c 20 0a 6d 61 79 20  ] clauses, .may 
24080 62 65 20 75 73 65 64 20 69 6e 20 61 6e 20 49 4e  be used in an IN
24090 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  SERT statement o
240a0 66 20 74 68 69 73 20 66 6f 72 6d 2e 0a 0a 3c 70  f this form...<p
240b0 3e 54 6f 20 61 76 6f 69 64 20 61 20 70 61 72 73  >To avoid a pars
240c0 69 6e 67 20 61 6d 62 69 67 75 69 74 79 2c 20 74  ing ambiguity, t
240d0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
240e0 65 6e 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79  ent should alway
240f0 73 0a 63 6f 6e 74 61 69 6e 20 61 20 57 48 45 52  s.contain a WHER
24100 45 20 63 6c 61 75 73 65 2c 20 65 76 65 6e 20 69  E clause, even i
24110 66 20 74 68 61 74 20 63 6c 61 75 73 65 20 69 73  f that clause is
24120 20 73 69 6d 70 6c 79 20 22 57 48 45 52 45 20 74   simply "WHERE t
24130 72 75 65 22 2c 0a 69 66 20 74 68 65 20 5b 75 70  rue",.if the [up
24140 73 65 72 74 2d 63 6c 61 75 73 65 5d 20 69 73 20  sert-clause] is 
24150 70 72 65 73 65 6e 74 2e 20 20 57 69 74 68 6f 75  present.  Withou
24160 74 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  t the WHERE clau
24170 73 65 2c 20 74 68 65 0a 70 61 72 73 65 72 20 64  se, the.parser d
24180 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 69 66 20  oes not know if 
24190 74 68 65 20 74 6f 6b 65 6e 20 22 4f 4e 22 20 69  the token "ON" i
241a0 73 20 70 61 72 74 20 6f 66 20 61 20 6a 6f 69 6e  s part of a join
241b0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 6f 6e 20 74   constraint.on t
241c0 68 65 20 53 45 4c 45 43 54 2c 20 6f 72 20 74 68  he SELECT, or th
241d0 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
241e0 68 65 20 5b 75 70 73 65 72 74 2d 63 6c 61 75 73  he [upsert-claus
241f0 65 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49  e]...<li><p><b>I
24200 4e 53 45 52 54 20 49 4e 54 4f 20 3c 2f 62 3e 3c  NSERT INTO </b><
24210 69 3e 74 61 62 6c 65 3c 2f 69 3e 3c 62 3e 20 44  i>table</i><b> D
24220 45 46 41 55 4c 54 20 56 41 4c 55 45 53 3b 3c 2f  EFAULT VALUES;</
24230 62 3e 0a 3c 70 3e 54 68 65 20 74 68 69 72 64 20  b>.<p>The third 
24240 66 6f 72 6d 20 6f 66 20 61 6e 20 49 4e 53 45 52  form of an INSER
24250 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 77  T statement is w
24260 69 74 68 20 44 45 46 41 55 4c 54 20 56 41 4c 55  ith DEFAULT VALU
24270 45 53 2e 0a 5e 28 54 68 65 20 49 4e 53 45 52 54  ES..^(The INSERT
24280 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c   ... DEFAULT VAL
24290 55 45 53 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  UES statement in
242a0 73 65 72 74 73 20 61 20 73 69 6e 67 6c 65 20 6e  serts a single n
242b0 65 77 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 0a  ew row into the.
242c0 6e 61 6d 65 64 20 74 61 62 6c 65 2e 29 5e 20 5e  named table.)^ ^
242d0 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  Each column of t
242e0 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f  he new row is po
242f0 70 75 6c 61 74 65 64 20 77 69 74 68 20 69 74 73  pulated with its
24300 20 0a 5b 64 65 66 61 75 6c 74 20 76 61 6c 75 65   .[default value
24310 5d 2c 20 6f 72 20 77 69 74 68 20 61 20 4e 55 4c  ], or with a NUL
24320 4c 20 69 66 20 6e 6f 20 64 65 66 61 75 6c 74 20  L if no default 
24330 76 61 6c 75 65 20 69 73 20 73 70 65 63 69 66 69  value is specifi
24340 65 64 20 0a 61 73 20 70 61 72 74 20 6f 66 20 74  ed .as part of t
24350 68 65 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69  he column defini
24360 74 69 6f 6e 20 69 6e 20 74 68 65 20 5b 43 52 45  tion in the [CRE
24370 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
24380 6d 65 6e 74 2e 0a 54 68 65 20 5b 75 70 73 65 72  ment..The [upser
24390 74 2d 63 6c 61 75 73 65 5d 20 69 73 20 6e 6f 74  t-clause] is not
243a0 20 73 75 70 70 6f 72 74 65 64 20 61 66 74 65 72   supported after
243b0 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 2e   DEFAULT VALUES.
243c0 0a 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 54 68  ..</ol>..<p>.^Th
243d0 65 20 69 6e 69 74 69 61 6c 20 22 49 4e 53 45 52  e initial "INSER
243e0 54 22 20 6b 65 79 77 6f 72 64 20 63 61 6e 20 62  T" keyword can b
243f0 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 22 52  e replaced by."R
24400 45 50 4c 41 43 45 22 20 6f 72 20 22 49 4e 53 45  EPLACE" or "INSE
24410 52 54 20 4f 52 20 3c 69 3e 61 63 74 69 6f 6e 3c  RT OR <i>action<
24420 2f 69 3e 22 20 74 6f 20 73 70 65 63 69 66 79 20  /i>" to specify 
24430 61 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 63  an alternative.c
24440 6f 6e 73 74 72 61 69 6e 74 20 5b 4f 4e 20 43 4f  onstraint [ON CO
24450 4e 46 4c 49 43 54 7c 63 6f 6e 66 6c 69 63 74 20  NFLICT|conflict 
24460 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
24470 69 74 68 6d 5d 20 74 6f 20 75 73 65 20 64 75 72  ithm] to use dur
24480 69 6e 67 20 0a 74 68 61 74 20 6f 6e 65 20 49 4e  ing .that one IN
24490 53 45 52 54 20 63 6f 6d 6d 61 6e 64 2e 0a 46 6f  SERT command..Fo
244a0 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
244b0 77 69 74 68 20 4d 79 53 51 4c 2c 20 5e 74 68 65  with MySQL, ^the
244c0 20 70 61 72 73 65 72 20 61 6c 6c 6f 77 73 20 74   parser allows t
244d0 68 65 20 75 73 65 20 6f 66 20 74 68 65 0a 73 69  he use of the.si
244e0 6e 67 6c 65 20 6b 65 79 77 6f 72 64 20 3c 61 20  ngle keyword <a 
244f0 68 72 65 66 3d 22 6c 61 6e 67 5f 72 65 70 6c 61  href="lang_repla
24500 63 65 2e 68 74 6d 6c 22 3e 52 45 50 4c 41 43 45  ce.html">REPLACE
24510 3c 2f 61 3e 20 61 73 20 61 6e 20 0a 61 6c 69 61  </a> as an .alia
24520 73 20 66 6f 72 20 22 49 4e 53 45 52 54 20 4f 52  s for "INSERT OR
24530 20 52 45 50 4c 41 43 45 22 2e 0a 0a 3c 70 3e 5e   REPLACE"...<p>^
24540 28 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 3c  (The optional "<
24550 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69  i>schema-name</i
24560 3e 3c 62 3e 2e 3c 2f 62 3e 22 20 70 72 65 66 69  ><b>.</b>" prefi
24570 78 20 6f 6e 20 74 68 65 20 0a 3c 79 79 74 65 72  x on the .<yyter
24580 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79 79  m>table-name</yy
24590 74 65 72 6d 3e 0a 69 73 20 73 75 70 70 6f 72 74  term>.is support
245a0 65 64 20 66 6f 72 20 74 6f 70 2d 6c 65 76 65 6c  ed for top-level
245b0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
245c0 74 73 20 6f 6e 6c 79 2e 29 5e 20 20 5e 54 68 65  ts only.)^  ^The
245d0 20 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73 74   table name must
245e0 20 62 65 0a 75 6e 71 75 61 6c 69 66 69 65 64 20   be.unqualified 
245f0 66 6f 72 20 49 4e 53 45 52 54 20 73 74 61 74 65  for INSERT state
24600 6d 65 6e 74 73 20 74 68 61 74 20 6f 63 63 75 72  ments that occur
24610 20 77 69 74 68 69 6e 20 5b 43 52 45 41 54 45 20   within [CREATE 
24620 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
24630 6e 74 73 2e 0a 5e 53 69 6d 69 6c 61 72 6c 79 2c  nts..^Similarly,
24640 20 74 68 65 20 22 44 45 46 41 55 4c 54 20 56 41   the "DEFAULT VA
24650 4c 55 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68  LUES" form of th
24660 65 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  e INSERT stateme
24670 6e 74 20 69 73 20 73 75 70 70 6f 72 74 65 64 20  nt is supported 
24680 66 6f 72 0a 74 6f 70 2d 6c 65 76 65 6c 20 49 4e  for.top-level IN
24690 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20  SERT statements 
246a0 6f 6e 6c 79 20 61 6e 64 20 6e 6f 74 20 66 6f 72  only and not for
246b0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
246c0 74 73 20 77 69 74 68 69 6e 0a 74 72 69 67 67 65  ts within.trigge
246d0 72 73 2e 0a 3c 70 3e 0a 0a 3c 70 3e 54 68 65 20  rs..<p>..<p>The 
246e0 6f 70 74 69 6f 6e 61 6c 20 22 41 53 20 3c 79 79  optional "AS <yy
246f0 74 65 72 6d 3e 61 6c 69 61 73 3c 2f 79 79 74 65  term>alias</yyte
24700 72 6d 3e 22 20 70 68 72 61 73 65 20 70 72 6f 76  rm>" phrase prov
24710 69 64 65 73 20 61 6e 20 61 6c 74 65 72 6e 61 74  ides an alternat
24720 69 76 65 0a 6e 61 6d 65 20 66 6f 72 20 74 68 65  ive.name for the
24730 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
24740 68 20 63 6f 6e 74 65 6e 74 20 69 73 20 62 65 69  h content is bei
24750 6e 67 20 69 6e 73 65 72 74 65 64 2e 20 20 54 68  ng inserted.  Th
24760 65 20 61 6c 69 61 73 20 6e 61 6d 65 0a 63 61 6e  e alias name.can
24770 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
24780 57 48 45 52 45 20 61 6e 64 20 53 45 54 20 63 6c  WHERE and SET cl
24790 61 75 73 65 73 20 6f 66 20 74 68 65 20 5b 55 50  auses of the [UP
247a0 53 45 52 54 5d 2e 20 20 49 66 20 74 68 65 72 65  SERT].  If there
247b0 20 69 73 20 6e 6f 0a 5b 75 70 73 65 72 74 2d 63   is no.[upsert-c
247c0 6c 61 75 73 65 5d 2c 20 74 68 65 6e 20 74 68 65  lause], then the
247d0 20 3c 79 79 74 65 72 6d 3e 61 6c 69 61 73 3c 2f   <yyterm>alias</
247e0 79 79 74 65 72 6d 3e 20 69 73 20 70 6f 69 6e 74  yyterm> is point
247f0 6c 65 73 73 2c 20 62 75 74 20 61 6c 73 6f 0a 68  less, but also.h
24800 61 72 6d 6c 65 73 73 2e 0a 0a 3c 70 3e 53 65 65  armless...<p>See
24810 20 74 68 65 20 73 65 70 61 72 61 74 65 20 5b 55   the separate [U
24820 50 53 45 52 54 5d 20 64 6f 63 75 6d 65 6e 74 61  PSERT] documenta
24830 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 61 64 64  tion for the add
24840 69 74 69 6f 6e 61 6c 20 74 72 61 69 6c 69 6e 67  itional trailing
24850 0a 73 79 6e 74 61 78 20 74 68 61 74 20 63 61 6e  .syntax that can
24860 20 63 61 75 73 65 20 61 6e 20 49 4e 53 45 52 54   cause an INSERT
24870 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e   to behave as an
24880 20 55 50 44 41 54 45 20 69 66 20 74 68 65 20 49   UPDATE if the I
24890 4e 53 45 52 54 20 77 6f 75 6c 64 0a 6f 74 68 65  NSERT would.othe
248a0 72 77 69 73 65 20 76 69 6f 6c 61 74 65 20 61 20  rwise violate a 
248b0 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74  uniqueness const
248c0 72 61 69 6e 74 2e 20 20 54 68 65 20 5b 75 70 73  raint.  The [ups
248d0 65 72 74 20 63 6c 61 75 73 65 5d 20 69 73 20 6e  ert clause] is n
248e0 6f 74 0a 61 6c 6c 6f 77 65 64 20 6f 6e 20 61 6e  ot.allowed on an
248f0 20 22 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46   "INSERT ... DEF
24900 41 55 4c 54 20 56 41 4c 55 45 53 22 2e 0a 0a 0a  AULT VALUES"....
24910 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23  <tcl>.##########
24920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24960 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 75 70 73  ####.Section ups
24970 65 72 74 20 55 50 53 45 52 54 20 7b 55 50 53 45  ert UPSERT {UPSE
24980 52 54 20 7b 75 70 73 65 72 74 20 63 6c 61 75 73  RT {upsert claus
24990 65 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  e}}..RecursiveBu
249a0 62 62 6c 65 44 69 61 67 72 61 6d 20 75 70 73 65  bbleDiagram upse
249b0 72 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  rt-clause.</tcl>
249c0 0a 0a 3c 70 3e 55 50 53 45 52 54 20 69 73 20 61  ..<p>UPSERT is a
249d0 20 73 70 65 63 69 61 6c 20 73 79 6e 74 61 78 20   special syntax 
249e0 61 64 64 69 74 69 6f 6e 20 74 6f 20 5b 49 4e 53  addition to [INS
249f0 45 52 54 5d 20 74 68 61 74 20 63 61 75 73 65 73  ERT] that causes
24a00 20 74 68 65 0a 49 4e 53 45 52 54 20 74 6f 20 62   the.INSERT to b
24a10 65 68 61 76 65 20 61 73 20 61 6e 20 5b 55 50 44  ehave as an [UPD
24a20 41 54 45 5d 20 6f 72 20 61 20 6e 6f 2d 6f 70 20  ATE] or a no-op 
24a30 69 66 20 74 68 65 20 49 4e 53 45 52 54 20 77 6f  if the INSERT wo
24a40 75 6c 64 20 76 69 6f 6c 61 74 65 0a 61 20 75 6e  uld violate.a un
24a50 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74 72 61  iqueness constra
24a60 69 6e 74 2e 0a 55 50 53 45 52 54 20 69 73 20 6e  int..UPSERT is n
24a70 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2e  ot standard SQL.
24a80 20 20 55 50 53 45 52 54 20 69 6e 20 53 51 4c 69    UPSERT in SQLi
24a90 74 65 20 66 6f 6c 6c 6f 77 73 20 74 68 65 0a 73  te follows the.s
24aa0 79 6e 74 61 78 20 65 73 74 61 62 6c 69 73 68 65  yntax establishe
24ab0 64 20 62 79 20 50 6f 73 74 67 72 65 53 51 4c 2e  d by PostgreSQL.
24ac0 0a 55 50 53 45 52 54 20 73 79 6e 74 61 78 20 77  .UPSERT syntax w
24ad0 61 73 20 61 64 64 65 64 20 74 6f 20 53 51 4c 69  as added to SQLi
24ae0 74 65 20 77 69 74 68 20 76 65 72 73 69 6f 6e 20  te with version 
24af0 33 2e 32 34 2e 30 20 28 5b 64 61 74 65 6f 66 3a  3.24.0 ([dateof:
24b00 33 2e 32 34 2e 30 5d 29 2e 0a 0a 3c 70 3e 41 6e  3.24.0])...<p>An
24b10 20 55 50 53 45 52 54 20 69 73 20 61 6e 20 6f 72   UPSERT is an or
24b20 64 69 6e 61 72 79 20 5b 49 4e 53 45 52 54 5d 20  dinary [INSERT] 
24b30 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
24b40 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 74 68  s followed by.th
24b50 65 20 73 70 65 63 69 61 6c 20 4f 4e 20 43 4f 4e  e special ON CON
24b60 46 4c 49 43 54 20 63 6c 61 75 73 65 20 73 68 6f  FLICT clause sho
24b70 77 6e 20 61 62 6f 76 65 2e 0a 0a 3c 70 3e 54 68  wn above...<p>Th
24b80 65 20 73 79 6e 74 61 78 20 74 68 61 74 20 6f 63  e syntax that oc
24b90 63 75 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20  curs in between 
24ba0 74 68 65 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54  the "ON CONFLICT
24bb0 22 20 61 6e 64 20 22 44 4f 22 20 6b 65 79 77 6f  " and "DO" keywo
24bc0 72 64 73 0a 69 73 20 63 61 6c 6c 65 64 20 74 68  rds.is called th
24bd0 65 20 22 63 6f 6e 66 6c 69 63 74 20 74 61 72 67  e "conflict targ
24be0 65 74 22 2e 20 20 54 68 65 20 63 6f 6e 66 6c 69  et".  The confli
24bf0 63 74 20 74 61 72 67 65 74 20 73 70 65 63 69 66  ct target specif
24c00 69 65 73 20 61 20 73 70 65 63 69 66 69 63 0a 75  ies a specific.u
24c10 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74 72  niqueness constr
24c20 61 69 6e 74 20 74 68 61 74 20 77 69 6c 6c 20 74  aint that will t
24c30 72 69 67 67 65 72 20 74 68 65 20 75 70 73 65 72  rigger the upser
24c40 74 2e 20 20 54 68 65 20 63 6f 6e 66 6c 69 63 74  t.  The conflict
24c50 20 74 61 72 67 65 74 0a 69 73 20 72 65 71 75 69   target.is requi
24c60 72 65 64 20 66 6f 72 20 44 4f 20 55 50 44 41 54  red for DO UPDAT
24c70 45 20 75 70 73 65 72 74 73 2c 20 62 75 74 20 69  E upserts, but i
24c80 73 20 6f 70 74 69 6f 6e 61 6c 20 66 6f 72 20 44  s optional for D
24c90 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 57 68 65 6e  O NOTHING.  When
24ca0 0a 74 68 65 20 63 6f 6e 66 6c 69 63 74 20 74 61  .the conflict ta
24cb0 72 67 65 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  rget is omitted,
24cc0 20 74 68 65 20 75 70 73 65 72 74 20 62 65 68 61   the upsert beha
24cd0 76 69 6f 72 20 69 73 20 74 72 69 67 67 65 72 65  vior is triggere
24ce0 64 20 62 79 20 61 0a 76 69 6f 6c 61 74 69 6f 6e  d by a.violation
24cf0 20 6f 66 20 61 6e 79 20 75 6e 69 71 75 65 6e 65   of any uniquene
24d00 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 6e  ss constraint on
24d10 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 74 68   the table of th
24d20 65 20 49 4e 53 45 52 54 2e 0a 0a 3c 70 3e 49 66  e INSERT...<p>If
24d30 20 74 68 65 20 69 6e 73 65 72 74 20 6f 70 65 72   the insert oper
24d40 61 74 69 6f 6e 20 77 6f 75 6c 64 20 63 61 75 73  ation would caus
24d50 65 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73  e the uniqueness
24d60 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 64 65 6e   constraint iden
24d70 74 69 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f  tified.by the co
24d80 6e 66 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c  nflict-target cl
24d90 61 75 73 65 20 74 6f 20 66 61 69 6c 2c 20 74 68  ause to fail, th
24da0 65 6e 20 74 68 65 20 69 6e 73 65 72 74 20 69 73  en the insert is
24db0 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a 65 69 74   omitted and.eit
24dc0 68 65 72 20 74 68 65 20 44 4f 20 4e 4f 54 48 49  her the DO NOTHI
24dd0 4e 47 20 6f 72 20 44 4f 20 55 50 44 41 54 45 20  NG or DO UPDATE 
24de0 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 70 65 72  operation is per
24df0 66 6f 72 6d 65 64 20 69 6e 73 74 65 61 64 2e 0a  formed instead..
24e00 49 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61  In the case of a
24e10 20 6d 75 6c 74 69 2d 72 6f 77 20 69 6e 73 65 72   multi-row inser
24e20 74 2c 20 74 68 69 73 20 64 65 63 69 73 69 6f 6e  t, this decision
24e30 20 69 73 20 6d 61 64 65 20 73 65 70 61 72 61 74   is made separat
24e40 65 6c 79 0a 66 6f 72 20 65 61 63 68 20 72 6f 77  ely.for each row
24e50 20 6f 66 20 74 68 65 20 69 6e 73 65 72 74 2e 0a   of the insert..
24e60 0a 3c 70 3e 54 68 65 20 73 70 65 63 69 61 6c 20  .<p>The special 
24e70 55 50 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e  UPSERT processin
24e80 67 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 66  g happens only f
24e90 6f 72 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  or uniqueness co
24ea0 6e 73 74 72 61 69 6e 74 20 6f 6e 0a 74 68 65 20  nstraint on.the 
24eb0 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 72 65  table that is re
24ec0 63 65 69 76 69 6e 67 20 74 68 65 20 49 4e 53 45  ceiving the INSE
24ed0 52 54 2e 20 41 20 22 75 6e 69 71 75 65 6e 65 73  RT. A "uniquenes
24ee0 73 20 63 6f 6e 73 74 72 61 69 6e 74 22 0a 69 73  s constraint".is
24ef0 20 61 6e 20 65 78 70 6c 69 63 69 74 20 55 4e 49   an explicit UNI
24f00 51 55 45 20 6f 72 20 50 52 49 4d 41 52 59 20 4b  QUE or PRIMARY K
24f10 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 77 69  EY constraint wi
24f20 74 68 69 6e 0a 74 68 65 20 43 52 45 41 54 45 20  thin.the CREATE 
24f30 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2c  TABLE statement,
24f40 20 6f 72 20 61 20 5b 75 6e 69 71 75 65 20 69 6e   or a [unique in
24f50 64 65 78 5d 2e 0a 55 50 53 45 52 54 20 64 6f 65  dex]..UPSERT doe
24f60 73 20 6e 6f 74 20 69 6e 74 65 72 76 65 6e 65 20  s not intervene 
24f70 66 6f 72 20 66 61 69 6c 65 64 20 4e 4f 54 20 4e  for failed NOT N
24f80 55 4c 4c 20 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ULL or foreign k
24f90 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 6f  ey constraints.o
24fa0 72 20 66 6f 72 20 63 6f 6e 73 74 72 61 69 6e 74  r for constraint
24fb0 73 20 74 68 61 74 20 61 72 65 20 69 6d 70 6c 65  s that are imple
24fc0 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 74 72 69  mented using tri
24fd0 67 67 65 72 73 2e 0a 0a 3c 70 3e 43 6f 6c 75 6d  ggers...<p>Colum
24fe0 6e 20 6e 61 6d 65 73 20 69 6e 20 74 68 65 20 65  n names in the e
24ff0 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 20  xpressions of a 
25000 44 4f 20 55 50 44 41 54 45 20 72 65 66 65 72 20  DO UPDATE refer 
25010 74 6f 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  to the original.
25020 75 6e 63 68 61 6e 67 65 64 20 76 61 6c 75 65 20  unchanged value 
25030 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 62  of the column, b
25040 65 66 6f 72 65 20 74 68 65 20 61 74 74 65 6d 70  efore the attemp
25050 74 65 64 20 49 4e 53 45 52 54 2e 20 20 54 6f 20  ted INSERT.  To 
25060 75 73 65 20 74 68 65 0a 76 61 6c 75 65 20 74 68  use the.value th
25070 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  at would have be
25080 65 6e 20 69 6e 73 65 72 74 65 64 20 68 61 64 20  en inserted had 
25090 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 6e  the constraint n
250a0 6f 74 20 66 61 69 6c 65 64 2c 0a 61 64 64 20 74  ot failed,.add t
250b0 68 65 20 73 70 65 63 69 61 6c 20 22 65 78 63 6c  he special "excl
250c0 75 64 65 64 2e 22 20 74 61 62 6c 65 20 71 75 61  uded." table qua
250d0 6c 69 66 69 65 72 20 74 6f 20 74 68 65 20 63 6f  lifier to the co
250e0 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 0a 3c 70 3e 53  lumn name...<p>S
250f0 6f 6d 65 20 65 78 61 6d 70 6c 65 73 20 77 69 6c  ome examples wil
25100 6c 20 68 65 6c 70 20 69 6c 6c 75 73 74 72 61 74  l help illustrat
25110 65 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65  e the difference
25120 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
25130 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
25140 45 20 76 6f 63 61 62 75 6c 61 72 79 28 77 6f 72  E vocabulary(wor
25150 64 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b  d TEXT PRIMARY K
25160 45 59 2c 20 63 6f 75 6e 74 20 49 4e 54 20 44 45  EY, count INT DE
25170 46 41 55 4c 54 20 31 29 3b 0a 49 4e 53 45 52 54  FAULT 1);.INSERT
25180 20 49 4e 54 4f 20 76 6f 63 61 62 75 6c 61 72 79   INTO vocabulary
25190 28 77 6f 72 64 29 20 56 41 4c 55 45 53 28 27 6a  (word) VALUES('j
251a0 6f 76 69 61 6c 27 29 0a 20 20 4f 4e 20 43 4f 4e  ovial').  ON CON
251b0 46 4c 49 43 54 28 77 6f 72 64 29 20 44 4f 20 55  FLICT(word) DO U
251c0 50 44 41 54 45 20 53 45 54 20 63 6f 75 6e 74 3d  PDATE SET count=
251d0 63 6f 75 6e 74 2b 31 3b 0a 3c 2f 70 72 65 3e 3c  count+1;.</pre><
251e0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
251f0 3e 54 68 65 20 75 70 73 65 72 74 20 61 62 6f 76  >The upsert abov
25200 65 20 69 6e 73 65 72 74 73 20 74 68 65 20 6e 65  e inserts the ne
25210 77 20 76 6f 63 61 62 75 6c 61 72 79 20 77 6f 72  w vocabulary wor
25220 64 20 22 6a 6f 76 69 61 6c 22 20 69 66 20 74 68  d "jovial" if th
25230 61 74 0a 77 6f 72 64 20 69 73 20 6e 6f 74 20 61  at.word is not a
25240 6c 72 65 61 64 79 20 69 6e 20 74 68 65 20 64 69  lready in the di
25250 63 74 69 6f 6e 61 72 79 2c 20 6f 72 20 69 66 20  ctionary, or if 
25260 69 74 20 69 73 20 61 6c 72 65 61 64 79 20 69 6e  it is already in
25270 20 74 68 65 0a 64 69 63 74 69 6f 6e 61 72 79 2c   the.dictionary,
25280 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 74   it increments t
25290 68 65 20 63 6f 75 6e 74 65 72 2e 20 20 54 68 65  he counter.  The
252a0 20 22 63 6f 75 6e 74 2b 31 22 20 65 78 70 72 65   "count+1" expre
252b0 73 73 69 6f 6e 0a 63 6f 75 6c 64 20 61 6c 73 6f  ssion.could also
252c0 20 62 65 20 77 72 69 74 74 65 6e 20 61 73 20 22   be written as "
252d0 76 6f 63 61 62 75 6c 61 72 79 2e 63 6f 75 6e 74  vocabulary.count
252e0 22 2e 20 20 50 6f 73 74 67 72 65 53 51 4c 20 72  ".  PostgreSQL r
252f0 65 71 75 69 72 65 73 20 74 68 65 0a 73 65 63 6f  equires the.seco
25300 6e 64 20 66 6f 72 6d 2c 20 62 75 74 20 53 51 4c  nd form, but SQL
25310 69 74 65 20 61 63 63 65 70 74 73 20 65 69 74 68  ite accepts eith
25320 65 72 2e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  er...<blockquote
25330 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
25340 42 4c 45 20 70 68 6f 6e 65 62 6f 6f 6b 28 6e 61  BLE phonebook(na
25350 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  me TEXT PRIMARY 
25360 4b 45 59 2c 20 70 68 6f 6e 65 6e 75 6d 62 65 72  KEY, phonenumber
25370 20 54 45 58 54 29 3b 0a 49 4e 53 45 52 54 20 49   TEXT);.INSERT I
25380 4e 54 4f 20 70 68 6f 6e 65 62 6f 6f 6b 28 6e 61  NTO phonebook(na
25390 6d 65 2c 70 68 6f 6e 65 6e 75 6d 62 65 72 29 20  me,phonenumber) 
253a0 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 27  VALUES('Alice','
253b0 37 30 34 2d 35 35 35 2d 31 32 31 32 27 29 0a 20  704-555-1212'). 
253c0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 6e 61 6d   ON CONFLICT(nam
253d0 65 29 20 44 4f 20 55 50 44 41 54 45 20 53 45 54  e) DO UPDATE SET
253e0 20 70 68 6f 6e 65 6e 75 6d 62 65 72 3d 65 78 63   phonenumber=exc
253f0 6c 75 64 65 64 2e 70 68 6f 6e 65 6e 75 6d 62 65  luded.phonenumbe
25400 72 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  r;.</pre></block
25410 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68  quote>..<p>In th
25420 65 20 73 65 63 6f 6e 64 20 65 78 61 6d 70 6c 65  e second example
25430 2c 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  , the expression
25440 20 69 6e 20 74 68 65 20 44 4f 20 55 50 44 41 54   in the DO UPDAT
25450 45 20 63 6c 61 75 73 65 20 69 73 0a 6f 66 20 74  E clause is.of t
25460 68 65 20 66 6f 72 6d 20 22 65 78 63 6c 75 64 65  he form "exclude
25470 64 2e 70 68 6f 6e 65 6e 75 6d 62 65 72 22 2e 20  d.phonenumber". 
25480 20 54 68 65 20 22 65 78 63 6c 75 64 65 64 2e 22   The "excluded."
25490 20 70 72 65 66 69 78 20 63 61 75 73 65 73 20 74   prefix causes t
254a0 68 65 0a 22 70 68 6f 6e 65 6e 75 6d 62 65 72 22  he."phonenumber"
254b0 20 74 6f 20 72 65 66 65 72 20 74 6f 20 74 68 65   to refer to the
254c0 20 76 61 6c 75 65 20 66 6f 72 20 70 68 6f 6e 65   value for phone
254d0 6e 75 6d 62 65 72 20 74 68 61 74 20 77 6f 75 6c  number that woul
254e0 64 20 68 61 76 65 20 62 65 65 6e 0a 69 6e 73 65  d have been.inse
254f0 72 74 65 64 20 68 61 64 20 74 68 65 72 65 20 62  rted had there b
25500 65 65 6e 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 2e  een no conflict.
25510 20 20 48 65 6e 63 65 2c 20 74 68 65 20 65 66 66    Hence, the eff
25520 65 63 74 20 6f 66 20 74 68 65 20 75 70 73 65 72  ect of the upser
25530 74 0a 69 73 20 74 6f 20 69 6e 73 65 72 74 20 61  t.is to insert a
25540 20 70 68 6f 6e 65 6e 75 6d 62 65 72 20 6f 66 20   phonenumber of 
25550 41 6c 69 63 65 20 69 66 20 6e 6f 6e 65 20 65 78  Alice if none ex
25560 69 73 74 73 2c 20 6f 72 20 74 6f 20 6f 76 65 72  ists, or to over
25570 77 72 69 74 65 0a 61 6e 79 20 70 72 69 6f 72 20  write.any prior 
25580 70 68 6f 6e 65 6e 75 6d 62 65 72 20 66 6f 72 20  phonenumber for 
25590 41 6c 69 63 65 20 77 69 74 68 20 74 68 65 20 6e  Alice with the n
255a0 65 77 20 6f 6e 65 2e 0a 0a 3c 70 3e 4e 6f 74 65  ew one...<p>Note
255b0 20 74 68 61 74 20 74 68 65 20 44 4f 20 55 50 44   that the DO UPD
255c0 41 54 45 20 63 6c 61 75 73 65 20 61 63 74 73 20  ATE clause acts 
255d0 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 73 69 6e 67  only on the sing
255e0 6c 65 20 72 6f 77 0a 74 68 61 74 20 65 78 70 65  le row.that expe
255f0 72 69 65 6e 63 65 64 20 74 68 65 20 63 6f 6e 73  rienced the cons
25600 74 72 61 69 6e 74 20 65 72 72 6f 72 20 64 75 72  traint error dur
25610 69 6e 67 20 49 4e 53 45 52 54 2e 20 20 49 74 20  ing INSERT.  It 
25620 69 73 20 6e 6f 74 0a 6e 65 63 65 73 73 61 72 79  is not.necessary
25630 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 20 57 48   to include a WH
25640 45 52 45 20 63 6c 61 75 73 65 20 74 68 61 74 20  ERE clause that 
25650 72 65 73 74 72 69 63 74 69 6f 6e 73 20 74 68 65  restrictions the
25660 20 61 63 74 69 6f 6e 0a 74 6f 20 74 68 61 74 20   action.to that 
25670 6f 6e 65 20 72 6f 77 2e 20 20 54 68 65 20 6f 6e  one row.  The on
25680 6c 79 20 75 73 65 20 66 6f 72 20 74 68 65 20 57  ly use for the W
25690 48 45 52 45 20 63 6c 61 75 73 65 20 61 74 0a 74  HERE clause at.t
256a0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 44 4f  he end of the DO
256b0 20 55 50 44 41 54 45 20 69 73 20 74 6f 20 6f 70   UPDATE is to op
256c0 74 69 6f 6e 61 6c 6c 79 20 63 68 61 6e 67 65 20  tionally change 
256d0 74 68 65 20 44 4f 20 55 50 44 41 54 45 0a 69 6e  the DO UPDATE.in
256e0 74 6f 20 61 20 6e 6f 2d 6f 70 20 64 65 70 65 6e  to a no-op depen
256f0 64 69 6e 67 20 6f 6e 20 74 68 65 20 6f 72 69 67  ding on the orig
25700 69 6e 61 6c 20 61 6e 64 2f 6f 72 20 6e 65 77 20  inal and/or new 
25710 76 61 6c 75 65 73 2e 0a 46 6f 72 20 65 78 61 6d  values..For exam
25720 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ple:..<blockquot
25730 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
25740 41 42 4c 45 20 70 68 6f 6e 65 62 6f 6f 6b 32 28  ABLE phonebook2(
25750 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49  .  name TEXT PRI
25760 4d 41 52 59 20 4b 45 59 2c 0a 20 20 70 68 6f 6e  MARY KEY,.  phon
25770 65 6e 75 6d 62 65 72 20 54 45 58 54 2c 0a 20 20  enumber TEXT,.  
25780 76 61 6c 69 64 44 61 74 65 20 44 41 54 45 0a 29  validDate DATE.)
25790 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 70 68  ;.INSERT INTO ph
257a0 6f 6e 65 62 6f 6f 6b 32 28 6e 61 6d 65 2c 70 68  onebook2(name,ph
257b0 6f 6e 65 6e 75 6d 62 65 72 2c 76 61 6c 69 64 44  onenumber,validD
257c0 61 74 65 29 0a 20 20 56 41 4c 55 45 53 28 27 41  ate).  VALUES('A
257d0 6c 69 63 65 27 2c 27 37 30 34 2d 35 35 35 2d 31  lice','704-555-1
257e0 32 31 32 27 2c 27 32 30 31 38 2d 30 35 2d 30 38  212','2018-05-08
257f0 27 29 0a 20 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ').  ON CONFLICT
25800 28 6e 61 6d 65 29 20 44 4f 20 55 50 44 41 54 45  (name) DO UPDATE
25810 20 53 45 54 0a 20 20 20 20 70 68 6f 6e 65 6e 75   SET.    phonenu
25820 6d 62 65 72 3d 65 78 63 6c 75 64 65 64 2e 70 68  mber=excluded.ph
25830 6f 6e 65 6e 75 6d 62 65 72 2c 0a 20 20 20 20 76  onenumber,.    v
25840 61 6c 69 64 44 61 74 65 3d 65 78 63 6c 75 64 65  alidDate=exclude
25850 64 2e 76 61 6c 69 64 44 61 74 65 0a 20 20 57 48  d.validDate.  WH
25860 45 52 45 20 65 78 63 6c 75 64 65 64 2e 76 61 6c  ERE excluded.val
25870 69 64 44 61 74 65 3e 70 68 6f 6e 65 62 6f 6f 6b  idDate>phonebook
25880 32 2e 76 61 6c 69 64 44 61 74 65 3b 0a 3c 2f 70  2.validDate;.</p
25890 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
258a0 0a 0a 3c 70 3e 49 6e 20 74 68 69 73 20 6c 61 73  ..<p>In this las
258b0 74 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  t example, the p
258c0 68 6f 6e 65 62 6f 6f 6b 32 20 65 6e 74 72 79 20  honebook2 entry 
258d0 69 73 20 6f 6e 6c 79 0a 75 70 64 61 74 65 64 20  is only.updated 
258e0 69 66 20 74 68 65 20 76 61 6c 69 64 44 61 74 65  if the validDate
258f0 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 69   for the newly i
25900 6e 73 65 72 74 65 64 20 76 61 6c 75 65 20 69 73  nserted value is
25910 0a 6e 65 77 65 72 20 74 68 61 6e 20 74 68 65 20  .newer than the 
25920 65 6e 74 72 79 20 61 6c 72 65 61 64 79 20 69 6e  entry already in
25930 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
25940 74 68 65 20 74 61 62 6c 65 20 61 6c 72 65 61 64  the table alread
25950 79 0a 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 6e  y.contains an en
25960 74 72 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  try with the sam
25970 65 20 6e 61 6d 65 20 61 6e 64 20 61 20 63 75 72  e name and a cur
25980 72 65 6e 74 20 76 61 6c 69 64 44 61 74 65 2c 0a  rent validDate,.
25990 74 68 65 6e 20 74 68 65 20 57 48 45 52 45 20 63  then the WHERE c
259a0 6c 61 75 73 65 20 63 61 75 73 65 73 20 74 68 65  lause causes the
259b0 20 44 4f 20 55 50 44 41 54 45 20 74 6f 20 62 65   DO UPDATE to be
259c0 63 6f 6d 65 20 61 20 6e 6f 2d 6f 70 2e 0a 0a 3c  come a no-op...<
259d0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
259e0 70 61 72 73 65 61 6d 62 69 67 20 7b 55 50 53 45  parseambig {UPSE
259f0 52 54 20 70 61 72 73 69 6e 67 20 61 6d 62 69 67  RT parsing ambig
25a00 75 69 74 79 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  uity}</tcl>.<h3>
25a10 50 61 72 73 69 6e 67 20 41 6d 62 69 67 75 69 74  Parsing Ambiguit
25a20 79 3c 2f 68 33 3e 0a 0a 3c 70 3e 57 68 65 6e 20  y</h3>..<p>When 
25a30 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 73 74 61  the [INSERT] sta
25a40 74 65 6d 65 6e 74 20 74 6f 20 77 68 69 63 68 20  tement to which 
25a50 74 68 65 20 55 50 53 45 52 54 20 69 73 20 61 74  the UPSERT is at
25a60 74 61 63 68 65 64 0a 74 61 6b 65 73 20 69 74 73  tached.takes its
25a70 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 61 20 5b   values from a [
25a80 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e  SELECT] statemen
25a90 74 2c 20 74 68 65 72 65 20 69 73 20 61 20 70 6f  t, there is a po
25aa0 74 65 6e 74 69 61 6c 0a 70 61 72 73 69 6e 67 20  tential.parsing 
25ab0 61 6d 62 69 67 75 69 74 79 2e 20 20 54 68 65 20  ambiguity.  The 
25ac0 70 61 72 73 65 72 20 6d 69 67 68 74 20 6e 6f 74  parser might not
25ad0 20 62 65 20 61 62 6c 65 20 74 6f 20 74 65 6c 6c   be able to tell
25ae0 20 69 66 20 74 68 65 0a 22 4f 4e 22 20 6b 65 79   if the."ON" key
25af0 77 6f 72 64 20 69 73 20 69 6e 74 72 6f 64 75 63  word is introduc
25b00 69 6e 67 20 74 68 65 20 55 50 53 45 52 54 20 6f  ing the UPSERT o
25b10 72 20 69 66 20 69 74 20 69 73 20 74 68 65 20 4f  r if it is the O
25b20 4e 20 63 6c 61 75 73 65 0a 6f 66 20 61 20 6a 6f  N clause.of a jo
25b30 69 6e 2e 20 20 54 6f 20 77 6f 72 6b 20 61 72 6f  in.  To work aro
25b40 75 6e 64 20 74 68 69 73 2c 20 74 68 65 20 53 45  und this, the SE
25b50 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73  LECT statement s
25b60 68 6f 75 6c 64 20 61 6c 77 61 79 73 0a 69 6e 63  hould always.inc
25b70 6c 75 64 65 20 61 20 57 48 45 52 45 20 63 6c 61  lude a WHERE cla
25b80 75 73 65 2c 20 65 76 65 6e 20 69 66 20 74 68 61  use, even if tha
25b90 74 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  t WHERE clause i
25ba0 73 20 6a 75 73 74 0a 22 57 48 45 52 45 20 74 72  s just."WHERE tr
25bb0 75 65 22 2e 0a 0a 3c 70 3e 41 6d 62 69 67 75 6f  ue"...<p>Ambiguo
25bc0 75 73 20 75 73 65 20 6f 66 20 4f 4e 3a 0a 0a 3c  us use of ON:..<
25bd0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
25be0 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  .INSERT INTO t1 
25bf0 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
25c00 0a 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 78 29 20  .ON CONFLICT(x) 
25c10 44 4f 20 55 50 44 41 54 45 20 53 45 54 20 79 3d  DO UPDATE SET y=
25c20 65 78 63 6c 75 64 65 64 2e 79 3b 0a 3c 2f 70 72  excluded.y;.</pr
25c30 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
25c40 0a 3c 70 3e 41 6d 62 69 67 75 69 74 79 20 72 65  .<p>Ambiguity re
25c50 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 61 20 57  solved using a W
25c60 48 45 52 45 20 63 6c 61 75 73 65 3a 0a 0a 3c 62  HERE clause:..<b
25c70 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
25c80 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53  INSERT INTO t1 S
25c90 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 20  ELECT * FROM t2 
25ca0 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 62 6c 75  <font color="blu
25cb0 65 22 3e 57 48 45 52 45 20 74 72 75 65 3c 2f 66  e">WHERE true</f
25cc0 6f 6e 74 3e 0a 4f 4e 20 43 4f 4e 46 4c 49 43 54  ont>.ON CONFLICT
25cd0 28 78 29 20 44 4f 20 55 50 44 41 54 45 20 53 45  (x) DO UPDATE SE
25ce0 54 20 79 3d 65 78 63 6c 75 64 65 64 2e 79 3b 0a  T y=excluded.y;.
25cf0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
25d00 74 65 3e 0a 0a 3c 68 33 3e 4c 69 6d 69 74 61 74  te>..<h3>Limitat
25d10 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55 50  ions</h3>..<p>UP
25d20 53 45 52 54 20 64 6f 65 73 20 6e 6f 74 20 63 75  SERT does not cu
25d30 72 72 65 6e 74 6c 79 20 77 6f 72 6b 20 66 6f 72  rrently work for
25d40 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73   [virtual tables
25d50 5d 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ]....<tcl>.#####
25d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25d90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25da0 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
25db0 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  n {ON CONFLICT c
25dc0 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20  lause} conflict 
25dd0 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73  {{conflict claus
25de0 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d  e} {ON CONFLICT}
25df0 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
25e00 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69  leDiagram confli
25e10 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e  ct-clause.</tcl>
25e20 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46  ..<p>The ON CONF
25e30 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20 61  LICT clause is a
25e40 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 65 78  .non-standard ex
25e50 74 65 6e 73 69 6f 6e 20 73 70 65 63 69 66 69 63  tension specific
25e60 20 74 6f 20 53 51 4c 69 74 65 20 0a 74 68 61 74   to SQLite .that
25e70 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d   can appear in m
25e80 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f  any other SQL co
25e90 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69  mmands..It is gi
25ea0 76 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74  ven its own sect
25eb0 69 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75  ion in this docu
25ec0 6d 65 6e 74 20 62 65 63 61 75 73 65 20 69 74 20  ment because it 
25ed0 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73  is not.part of s
25ee0 74 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20  tandard SQL and 
25ef0 74 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20  therefore might 
25f00 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e  not be familiar.
25f10 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20  </p>..<p>The ON 
25f20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
25f30 64 65 73 63 72 69 62 65 64 20 68 65 72 65 20 68  described here h
25f40 61 73 20 62 65 65 6e 20 61 20 70 61 72 74 20 6f  as been a part o
25f50 66 0a 53 51 4c 69 74 65 20 73 69 6e 63 65 20 62  f.SQLite since b
25f60 65 66 6f 72 65 20 76 65 72 73 69 6f 6e 20 33 2e  efore version 3.
25f70 30 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e 30  0.0 ([dateof:3.0
25f80 2e 30 5d 29 2e 20 20 54 68 65 20 70 68 72 61 73  .0]).  The phras
25f90 65 0a 22 4f 4e 26 6e 62 73 70 3b 43 4f 4e 46 4c  e."ON&nbsp;CONFL
25fa0 49 43 54 22 20 69 73 20 61 6c 73 6f 20 70 61 72  ICT" is also par
25fb0 74 20 6f 66 20 5b 55 50 53 45 52 54 5d 2c 20 77  t of [UPSERT], w
25fc0 68 69 63 68 20 69 73 20 61 6e 20 65 78 74 65 6e  hich is an exten
25fd0 73 69 6f 6e 0a 74 6f 20 5b 49 4e 53 45 52 54 5d  sion.to [INSERT]
25fe0 20 61 64 64 65 64 20 69 6e 20 76 65 72 73 69 6f   added in versio
25ff0 6e 20 33 2e 32 34 2e 30 20 28 5b 64 61 74 65 6f  n 3.24.0 ([dateo
26000 66 3a 33 2e 32 34 2e 30 5d 29 2e 20 20 44 6f 20  f:3.24.0]).  Do 
26010 6e 6f 74 0a 63 6f 6e 66 75 73 65 20 74 68 65 73  not.confuse thes
26020 65 20 74 77 6f 20 73 65 70 61 72 61 74 65 20 75  e two separate u
26030 73 65 73 20 6f 66 20 74 68 65 20 22 4f 4e 26 6e  ses of the "ON&n
26040 62 73 70 3b 43 4f 4e 46 4c 49 43 54 22 20 70 68  bsp;CONFLICT" ph
26050 72 61 73 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 73  rase...<p>^The s
26060 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e  yntax for the ON
26070 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
26080 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f   is as shown abo
26090 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54  ve for.the CREAT
260a0 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e  E TABLE command.
260b0 20 20 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52    ^For the INSER
260c0 54 20 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d  T and.UPDATE com
260d0 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f  mands, the keywo
260e0 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54  rds "ON CONFLICT
260f0 22 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  " are replaced b
26100 79 20 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74  y "OR" so that.t
26110 68 65 20 73 79 6e 74 61 78 20 72 65 61 64 73 20  he syntax reads 
26120 6d 6f 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20  more naturally. 
26130 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e   For example, in
26140 73 74 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54  stead of."INSERT
26150 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e   ON CONFLICT IGN
26160 4f 52 45 22 20 77 65 20 68 61 76 65 20 22 49 4e  ORE" we have "IN
26170 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e  SERT OR IGNORE".
26180 0a 54 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68  .The keywords ch
26190 61 6e 67 65 20 62 75 74 20 74 68 65 20 6d 65 61  ange but the mea
261a0 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75  ning of the clau
261b0 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65  se is the same.e
261c0 69 74 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a  ither way.</p>..
261d0 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  <p>The ON CONFLI
261e0 43 54 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65  CT clause applie
261f0 73 20 74 6f 20 5b 55 4e 49 51 55 45 5d 2c 20 5b  s to [UNIQUE], [
26200 4e 4f 54 20 4e 55 4c 4c 5d 2c 0a 5b 43 48 45 43  NOT NULL],.[CHEC
26210 4b 5d 2c 20 61 6e 64 20 5b 50 52 49 4d 41 52 59  K], and [PRIMARY
26220 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74   KEY] constraint
26230 73 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  s..The ON CONFLI
26240 43 54 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65  CT algorithm doe
26250 73 20 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b  s not.apply to [
26260 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
26270 74 72 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20  traints]..There 
26280 61 72 65 20 66 69 76 65 20 63 6f 6e 66 6c 69 63  are five conflic
26290 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
262a0 6f 72 69 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a  orithm choices:.
262b0 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c  ROLLBACK, ABORT,
262c0 20 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61   FAIL, IGNORE, a
262d0 6e 64 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65  nd REPLACE..^The
262e0 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63   default conflic
262f0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
26300 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e  orithm is ABORT.
26310 20 20 54 68 69 73 0a 69 73 20 77 68 61 74 20 74    This.is what t
26320 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c  hey mean:</p>..<
26330 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42  dl>.<dt><b>ROLLB
26340 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ACK</b></dt>.<dd
26350 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
26360 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
26370 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
26380 63 75 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41  curs, the ROLLBA
26390 43 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  CK.resolution al
263a0 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74  gorithm aborts t
263b0 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73  he current SQL s
263c0 74 61 74 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e  tatement with.an
263d0 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
263e0 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c  NT error and rol
263f0 6c 73 20 62 61 63 6b 20 74 68 65 20 63 75 72 72  ls back the curr
26400 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
26410 0a 5e 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74  .^If no transact
26420 69 6f 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f  ion is.active (o
26430 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d  ther than the im
26440 70 6c 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f  plied transactio
26450 6e 20 74 68 61 74 20 69 73 20 63 72 65 61 74 65  n that is create
26460 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61  d on every.comma
26470 6e 64 29 20 74 68 65 6e 20 74 68 65 20 52 4f 4c  nd) then the ROL
26480 4c 42 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e  LBACK resolution
26490 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73   algorithm works
264a0 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
264b0 0a 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d  .ABORT algorithm
264c0 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  .</p></dd>..<dt>
264d0 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74  <b>ABORT</b></dt
264e0 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
264f0 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
26500 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
26510 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 41  on occurs, the A
26520 42 4f 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20  BORT.resolution 
26530 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73  algorithm aborts
26540 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c   the current SQL
26550 20 73 74 61 74 65 6d 65 6e 74 0a 77 69 74 68 20   statement.with 
26560 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  an SQLITE_CONSTR
26570 41 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 62  AINT error and b
26580 61 63 6b 73 20 6f 75 74 20 61 6e 79 20 63 68 61  acks out any cha
26590 6e 67 65 73 0a 6d 61 64 65 20 62 79 20 74 68 65  nges.made by the
265a0 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61   current SQL sta
265b0 74 65 6d 65 6e 74 3b 20 62 75 74 20 63 68 61 6e  tement; but chan
265c0 67 65 73 20 63 61 75 73 65 64 0a 62 79 20 70 72  ges caused.by pr
265d0 69 6f 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ior SQL statemen
265e0 74 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ts within the sa
265f0 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  me transaction a
26600 72 65 20 70 72 65 73 65 72 76 65 64 20 61 6e 64  re preserved and
26610 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e   the.transaction
26620 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76 65 2e   remains active.
26630 0a 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66  .This is the def
26640 61 75 6c 74 20 62 65 68 61 76 69 6f 72 20 61 6e  ault behavior an
26650 64 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 73  d the behavior s
26660 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
26670 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70  SQL.standard.</p
26680 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46  ></dd>..<dt><b>F
26690 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  AIL</b></dt>.<dd
266a0 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70  ><p> ^When an ap
266b0 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61  plicable constra
266c0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63  int violation oc
266d0 63 75 72 73 2c 20 74 68 65 20 46 41 49 4c 0a 72  curs, the FAIL.r
266e0 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
266f0 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63  thm aborts the c
26700 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
26710 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a 53 51 4c  ment with an.SQL
26720 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65  ITE_CONSTRAINT e
26730 72 72 6f 72 2e 20 20 5e 42 75 74 20 74 68 65 20  rror.  ^But the 
26740 46 41 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20  FAIL resolution 
26750 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75  does not.back ou
26760 74 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  t prior changes 
26770 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  of the SQL state
26780 6d 65 6e 74 20 74 68 61 74 20 66 61 69 6c 65 64  ment that failed
26790 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e 64   nor does.it end
267a0 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
267b0 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ..^For example, 
267c0 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61  if an UPDATE.sta
267d0 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72  tement encounter
267e0 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  ed a constraint 
267f0 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65  violation on the
26800 20 31 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a   100th row that.
26810 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75  it attempts to u
26820 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20  pdate, then the 
26830 66 69 72 73 74 20 39 39 20 72 6f 77 20 63 68 61  first 99 row cha
26840 6e 67 65 73 20 61 72 65 20 70 72 65 73 65 72 76  nges are preserv
26850 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74  ed.but changes t
26860 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62  o rows 100 and b
26870 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75  eyond never occu
26880 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  r.</p></dd>..<dt
26890 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f  ><b>IGNORE</b></
268a0 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65  dt>.<dd><p> ^Whe
268b0 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20  n an applicable 
268c0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
268d0 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68  tion occurs, .th
268e0 65 20 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74  e IGNORE resolut
268f0 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b  ion algorithm sk
26900 69 70 73 20 74 68 65 20 6f 6e 65 20 72 6f 77 20  ips the one row 
26910 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68  that contains.th
26920 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  e constraint vio
26930 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69  lation and conti
26940 6e 75 65 73 20 70 72 6f 63 65 73 73 69 6e 67 20  nues processing 
26950 73 75 62 73 65 71 75 65 6e 74 20 72 6f 77 73 0a  subsequent rows.
26960 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  of the SQL state
26970 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f 74 68 69  ment as if nothi
26980 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f  ng went wrong..O
26990 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65  ther rows before
269a0 20 61 6e 64 20 61 66 74 65 72 20 74 68 65 20 72   and after the r
269b0 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65  ow that.containe
269c0 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
269d0 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69   violation are i
269e0 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74  nserted or updat
269f0 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f  ed.normally. ^No
26a00 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
26a10 65 64 20 77 68 65 6e 20 74 68 65 20 49 47 4e 4f  ed when the IGNO
26a20 52 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  RE conflict reso
26a30 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d  lution.algorithm
26a40 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64   is used.</p></d
26a50 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41  d>..<dt><b>REPLA
26a60 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  CE</b></dt>.<dd>
26a70 3c 70 3e 20 5e 57 68 65 6e 20 61 20 5b 55 4e 49  <p> ^When a [UNI
26a80 51 55 45 5d 20 6f 72 20 5b 50 52 49 4d 41 52 59  QUE] or [PRIMARY
26a90 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74   KEY] constraint
26aa0 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72   violation occur
26ab0 73 2c 20 0a 74 68 65 20 52 45 50 4c 41 43 45 20  s, .the REPLACE 
26ac0 61 6c 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65  algorithm.delete
26ad0 73 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72  s pre-existing r
26ae0 6f 77 73 20 74 68 61 74 20 61 72 65 20 63 61 75  ows that are cau
26af0 73 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61  sing the constra
26b00 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72  int violation.pr
26b10 69 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67  ior to inserting
26b20 20 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68 65   or updating the
26b30 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 6e 64   current row and
26b40 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e   the command con
26b50 74 69 6e 75 65 73 20 0a 65 78 65 63 75 74 69 6e  tinues .executin
26b60 67 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20  g normally..^If 
26b70 61 20 5b 4e 4f 54 20 4e 55 4c 4c 5d 20 63 6f 6e  a [NOT NULL] con
26b80 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
26b90 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45  n occurs, the RE
26ba0 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 0a 72  PLACE conflict.r
26bb0 65 73 6f 6c 75 74 69 6f 6e 20 72 65 70 6c 61 63  esolution replac
26bc0 65 73 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75  es the NULL valu
26bd0 65 20 77 69 74 68 0a 74 68 65 20 64 65 66 61 75  e with.the defau
26be0 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 61  lt value for tha
26bf0 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20  t column, or if 
26c00 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e  the column has n
26c10 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c  o default.value,
26c20 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20   then the ABORT 
26c30 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65  algorithm is use
26c40 64 2e 0a 5e 49 66 20 61 20 5b 43 48 45 43 4b 5d  d..^If a [CHECK]
26c50 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
26c60 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68  ation occurs, th
26c70 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69  e REPLACE confli
26c80 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c  ct resolution.al
26c90 67 6f 72 69 74 68 6d 20 61 6c 77 61 79 73 20 77  gorithm always w
26ca0 6f 72 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e  orks like ABORT.
26cb0 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74  </p>..<p>^When t
26cc0 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
26cd0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73  ict resolution s
26ce0 74 72 61 74 65 67 79 20 64 65 6c 65 74 65 73 20  trategy deletes 
26cf0 72 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  rows in order to
26d00 0a 73 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74  .satisfy a const
26d10 72 61 69 6e 74 2c 20 5b 43 52 45 41 54 45 20 54  raint, [CREATE T
26d20 52 49 47 47 45 52 20 7c 20 64 65 6c 65 74 65 20  RIGGER | delete 
26d30 74 72 69 67 67 65 72 73 5d 20 66 69 72 65 20 69  triggers] fire i
26d40 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72  f and only if.[r
26d50 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
26d60 73 20 70 72 61 67 6d 61 20 7c 20 72 65 63 75 72  s pragma | recur
26d70 73 69 76 65 20 74 72 69 67 67 65 72 73 5d 20 61  sive triggers] a
26d80 72 65 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a  re enabled.</p>.
26d90 0a 3c 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65  .<p>^The [sqlite
26da0 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20  3_update_hook | 
26db0 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20  update hook] is 
26dc0 6e 6f 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20  not invoked for 
26dd0 72 6f 77 73 20 74 68 61 74 0a 61 72 65 20 64 65  rows that.are de
26de0 6c 65 74 65 64 20 62 79 20 74 68 65 20 52 45 50  leted by the REP
26df0 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65  LACE conflict re
26e00 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67  solution strateg
26e10 79 2e 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45  y.  ^Nor does.RE
26e20 50 4c 41 43 45 20 69 6e 63 72 65 6d 65 6e 74 20  PLACE increment 
26e30 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61  the [sqlite3_cha
26e40 6e 67 65 73 20 7c 20 63 68 61 6e 67 65 20 63 6f  nges | change co
26e50 75 6e 74 65 72 5d 2e 0a 54 68 65 20 65 78 63 65  unter]..The exce
26e60 70 74 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72  ptional behavior
26e70 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69  s defined in thi
26e80 73 20 70 61 72 61 67 72 61 70 68 20 6d 69 67 68  s paragraph migh
26e90 74 20 63 68 61 6e 67 65 20 0a 69 6e 20 61 20 66  t change .in a f
26ea0 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f  uture release.</
26eb0 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68  p>.</dl>..<p>^Th
26ec0 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63  e algorithm spec
26ed0 69 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20  ified in the OR 
26ee0 63 6c 61 75 73 65 20 6f 66 20 61 6e 20 49 4e 53  clause of an INS
26ef0 45 52 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76  ERT or UPDATE.ov
26f00 65 72 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f  errides any algo
26f10 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64 20  rithm specified 
26f20 69 6e 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  in a CREATE TABL
26f30 45 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69  E..^If no algori
26f40 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65 64  thm is specified
26f50 20 61 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41   anywhere, the A
26f60 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69  BORT algorithm i
26f70 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63  s used.</p>..<tc
26f80 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
26f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26fd0 23 0a 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45  #.Section REINDE
26fe0 58 20 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45  X reindex REINDE
26ff0 58 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  X..RecursiveBubb
27000 6c 65 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65  leDiagram reinde
27010 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c  x-stmt.</tcl>..<
27020 70 3e 5e 54 68 65 20 52 45 49 4e 44 45 58 20 63  p>^The REINDEX c
27030 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74  ommand is used t
27040 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63  o delete and rec
27050 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66 72  reate indices fr
27060 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73  om scratch..This
27070 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20   is useful when 
27080 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  the definition o
27090 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  f a collation se
270a0 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67  quence has chang
270b0 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  ed..</p>..<p>^If
270c0 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79   the REINDEX key
270d0 77 6f 72 64 20 69 73 20 6e 6f 74 20 66 6f 6c 6c  word is not foll
270e0 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74  owed by a collat
270f0 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6f 72 20  ion-sequence or 
27100 64 61 74 61 62 61 73 65 20 0a 6f 62 6a 65 63 74  database .object
27110 20 69 64 65 6e 74 69 66 69 65 72 2c 20 74 68 65   identifier, the
27120 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e  n all indices in
27130 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
27140 74 61 62 61 73 65 73 20 61 72 65 20 72 65 62 75  tabases are rebu
27150 69 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  ilt...<p>^If the
27160 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64   REINDEX keyword
27170 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
27180 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75  a collation-sequ
27190 65 6e 63 65 20 6e 61 6d 65 2c 20 74 68 65 6e 0a  ence name, then.
271a0 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
271b0 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
271c0 62 61 73 65 73 20 74 68 61 74 20 75 73 65 20 74  bases that use t
271d0 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69  he named collati
271e0 6f 6e 20 73 65 71 75 65 6e 63 65 73 0a 61 72 65  on sequences.are
271f0 20 72 65 63 72 65 61 74 65 64 2e 20 0a 0a 3c 70   recreated. ..<p
27200 3e 5e 4f 72 2c 20 69 66 20 74 68 65 20 61 72 67  >^Or, if the arg
27210 75 6d 65 6e 74 20 61 74 74 61 63 68 65 64 20 74  ument attached t
27220 6f 20 74 68 65 20 52 45 49 4e 44 45 58 20 69 64  o the REINDEX id
27230 65 6e 74 69 66 69 65 73 20 61 20 73 70 65 63 69  entifies a speci
27240 66 69 63 20 0a 64 61 74 61 62 61 73 65 20 74 61  fic .database ta
27250 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  ble, then all in
27260 64 69 63 65 73 20 61 74 74 61 63 68 65 64 20 74  dices attached t
27270 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  o the database t
27280 61 62 6c 65 20 61 72 65 20 72 65 62 75 69 6c 74  able are rebuilt
27290 2e 20 0a 5e 49 66 20 69 74 20 69 64 65 6e 74 69  . .^If it identi
272a0 66 69 65 73 20 61 20 73 70 65 63 69 66 69 63 20  fies a specific 
272b0 64 61 74 61 62 61 73 65 20 69 6e 64 65 78 2c 20  database index, 
272c0 74 68 65 6e 20 6a 75 73 74 20 74 68 61 74 20 69  then just that i
272d0 6e 64 65 78 20 69 73 20 72 65 63 72 65 61 74 65  ndex is recreate
272e0 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 61 20 63 6f  d...<p>^For a co
272f0 6d 6d 61 6e 64 20 6f 66 20 74 68 65 20 66 6f 72  mmand of the for
27300 6d 20 22 52 45 49 4e 44 45 58 20 3c 69 3e 6e 61  m "REINDEX <i>na
27310 6d 65 3c 2f 69 3e 22 2c 20 61 20 6d 61 74 63 68  me</i>", a match
27320 0a 61 67 61 69 6e 73 74 20 3c 79 79 74 65 72 6d  .against <yyterm
27330 3e 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3c  >collation-name<
27340 2f 79 79 74 65 72 6d 3e 20 74 61 6b 65 73 20 70  /yyterm> takes p
27350 72 65 63 65 64 65 6e 63 65 20 6f 76 65 72 20 61  recedence over a
27360 20 6d 61 74 63 68 0a 61 67 61 69 6e 73 74 20 3c   match.against <
27370 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d  yyterm>index-nam
27380 65 3c 2f 79 79 74 65 72 6d 3e 20 6f 72 20 3c 79  e</yyterm> or <y
27390 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65  yterm>table-name
273a0 3c 2f 79 79 74 65 72 6d 3e 2e 0a 54 68 69 73 20  </yyterm>..This 
273b0 61 6d 62 69 67 75 69 74 79 20 69 6e 20 74 68 65  ambiguity in the
273c0 20 73 79 6e 74 61 78 20 6d 61 79 20 62 65 20 61   syntax may be a
273d0 76 6f 69 64 65 64 20 62 79 20 61 6c 77 61 79 73  voided by always
273e0 20 73 70 65 63 69 66 79 69 6e 67 20 61 0a 3c 79   specifying a.<y
273f0 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d  yterm>schema-nam
27400 65 3c 2f 79 79 74 65 72 6d 3e 20 77 68 65 6e 20  e</yyterm> when 
27410 72 65 69 6e 64 65 78 69 6e 67 20 61 20 73 70 65  reindexing a spe
27420 63 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69  cific table or i
27430 6e 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ndex...<tcl>.###
27440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27480 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63  ############.Sec
27490 74 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70  tion REPLACE rep
274a0 6c 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f  lace REPLACE..</
274b0 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45  tcl>..<p>^The RE
274c0 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73  PLACE command is
274d0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
274e0 65 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  e "[ON CONFLICT 
274f0 7c 20 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c  | INSERT OR REPL
27500 41 43 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66  ACE]".variant of
27510 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f   the [INSERT] co
27520 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c  mmand.  .This al
27530 69 61 73 20 69 73 20 70 72 6f 76 69 64 65 64 20  ias is provided 
27540 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  for compatibilit
27550 79 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61  y other SQL data
27560 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 53  base engines.  S
27570 65 65 20 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d  ee the .[INSERT]
27580 20 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e   command documen
27590 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74  tation for addit
275a0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
275b0 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a  n.</p>  ..<tcl>.
275c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
275d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
275e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
275f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
27610 53 65 63 74 69 6f 6e 20 7b 57 49 54 48 20 63 6c  Section {WITH cl
27620 61 75 73 65 7d 20 77 69 74 68 20 7b 7b 63 6f 6d  ause} with {{com
27630 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
27640 73 69 6f 6e 73 7d 20 57 49 54 48 7d 0a 0a 52 65  sions} WITH}..Re
27650 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
27660 67 72 61 6d 20 77 69 74 68 2d 63 6c 61 75 73 65  gram with-clause
27670 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d  .</tcl>..<p>Comm
27680 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73 73  on Table Express
27690 69 6f 6e 73 20 6f 72 20 43 54 45 73 20 61 63 74  ions or CTEs act
276a0 20 6c 69 6b 65 20 74 65 6d 70 6f 72 61 72 79 20   like temporary 
276b0 5b 76 69 65 77 73 5d 20 74 68 61 74 20 65 78 69  [views] that exi
276c0 73 74 0a 6f 6e 6c 79 20 66 6f 72 20 74 68 65 20  st.only for the 
276d0 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73 69  duration of a si
276e0 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
276f0 6e 74 2e 20 20 54 68 65 72 65 20 61 72 65 20 74  nt.  There are t
27700 77 6f 20 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d 6d  wo kinds of.comm
27710 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
27720 69 6f 6e 73 3a 20 22 6f 72 64 69 6e 61 72 79 22  ions: "ordinary"
27730 20 61 6e 64 20 22 72 65 63 75 72 73 69 76 65 22   and "recursive"
27740 2e 20 4f 72 64 69 6e 61 72 79 20 0a 63 6f 6d 6d  . Ordinary .comm
27750 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
27760 69 6f 6e 73 20 61 72 65 20 68 65 6c 70 66 75 6c  ions are helpful
27770 20 66 6f 72 20 6d 61 6b 69 6e 67 0a 71 75 65 72   for making.quer
27780 69 65 73 20 65 61 73 69 65 72 20 74 6f 20 75 6e  ies easier to un
27790 64 65 72 73 74 61 6e 64 20 62 79 20 66 61 63 74  derstand by fact
277a0 6f 72 69 6e 67 0a 73 75 62 71 75 65 72 69 65 73  oring.subqueries
277b0 20 6f 75 74 20 6f 66 20 74 68 65 20 6d 61 69 6e   out of the main
277c0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a   SQL statement..
277d0 52 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e  Recursive common
277e0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
277f0 6e 73 0a 70 72 6f 76 69 64 65 20 74 68 65 20 61  ns.provide the a
27800 62 69 6c 69 74 79 20 74 6f 20 64 6f 20 68 69 65  bility to do hie
27810 72 61 72 63 68 69 63 61 6c 20 6f 72 0a 72 65 63  rarchical or.rec
27820 75 72 73 69 76 65 20 71 75 65 72 69 65 73 20 6f  ursive queries o
27830 66 20 74 72 65 65 73 20 61 6e 64 20 67 72 61 70  f trees and grap
27840 68 73 2c 20 61 20 63 61 70 61 62 69 6c 69 74 79  hs, a capability
27850 0a 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 74 68  .that is not oth
27860 65 72 77 69 73 65 20 61 76 61 69 6c 61 62 6c 65  erwise available
27870 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67   in the SQL lang
27880 75 61 67 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63 6f  uage...<p>All co
27890 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
278a0 73 73 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72 79  ssions (ordinary
278b0 20 61 6e 64 20 72 65 63 75 72 73 69 76 65 29 20   and recursive) 
278c0 61 72 65 20 0a 63 72 65 61 74 65 64 20 62 79 20  are .created by 
278d0 70 72 65 70 65 6e 64 69 6e 67 20 61 20 57 49 54  prepending a WIT
278e0 48 20 63 6c 61 75 73 65 20 69 6e 20 66 72 6f 6e  H clause in fron
278f0 74 20 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d 2c  t of a [SELECT],
27900 20 5b 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c 45   [INSERT], [DELE
27910 54 45 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d  TE],.or [UPDATE]
27920 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 20 73   statement.  A s
27930 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73  ingle WITH claus
27940 65 20 63 61 6e 20 73 70 65 63 69 66 79 20 6f 6e  e can specify on
27950 65 20 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f 6e  e or more.common
27960 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
27970 6e 73 2c 20 73 6f 6d 65 20 6f 66 20 77 68 69 63  ns, some of whic
27980 68 20 61 72 65 20 6f 72 64 69 6e 61 72 79 20 61  h are ordinary a
27990 6e 64 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68  nd some of which
279a0 0a 61 72 65 20 72 65 63 75 72 73 69 76 65 2e 0a  .are recursive..
279b0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
279c0 74 20 6f 72 64 69 6e 61 72 79 63 74 65 20 7b 6f  t ordinarycte {o
279d0 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74  rdinary common t
279e0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
279f0 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64 69  }</tcl>.<h3>Ordi
27a00 6e 61 72 79 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c  nary Common Tabl
27a10 65 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68  e Expressions</h
27a20 33 3e 0a 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e 61  3>..<p>An ordina
27a30 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ry common table 
27a40 65 78 70 72 65 73 73 69 6f 6e 20 77 6f 72 6b 73  expression works
27a50 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20 61   as if it were a
27a60 20 5b 76 69 65 77 5d 20 74 68 61 74 0a 65 78 69   [view] that.exi
27a70 73 74 73 20 66 6f 72 20 74 68 65 20 64 75 72 61  sts for the dura
27a80 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65  tion of a single
27a90 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72 64   statement.  Ord
27aa0 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62  inary common tab
27ab0 6c 65 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 61  le.expressions a
27ac0 72 65 20 75 73 65 66 75 6c 20 66 6f 72 20 66 61  re useful for fa
27ad0 63 74 6f 72 69 6e 67 20 6f 75 74 20 73 75 62 71  ctoring out subq
27ae0 75 65 72 69 65 73 20 61 6e 64 20 6d 61 6b 69 6e  ueries and makin
27af0 67 20 74 68 65 20 6f 76 65 72 61 6c 6c 0a 53 51  g the overall.SQ
27b00 4c 20 73 74 61 74 65 6d 65 6e 74 20 65 61 73 69  L statement easi
27b10 65 72 20 74 6f 20 72 65 61 64 20 61 6e 64 20 75  er to read and u
27b20 6e 64 65 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e 41  nderstand...<p>A
27b30 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e   WITH clause can
27b40 20 63 6f 6e 74 61 69 6e 20 6f 72 64 69 6e 61 72   contain ordinar
27b50 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  y common table e
27b60 78 70 72 65 73 73 69 6f 6e 73 20 65 76 65 6e 20  xpressions even 
27b70 69 66 0a 69 74 20 69 6e 63 6c 75 64 65 73 20 74  if.it includes t
27b80 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65 79  he RECURSIVE key
27b90 77 6f 72 64 2e 20 20 54 68 65 20 75 73 65 20 6f  word.  The use o
27ba0 66 20 52 45 43 55 52 53 49 56 45 20 64 6f 65 73  f RECURSIVE does
27bb0 20 6e 6f 74 20 66 6f 72 63 65 0a 63 6f 6d 6d 6f   not force.commo
27bc0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
27bd0 6f 6e 73 20 74 6f 20 62 65 20 72 65 63 75 72 73  ons to be recurs
27be0 69 76 65 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66  ive...<tcl>.hd_f
27bf0 72 61 67 6d 65 6e 74 20 72 65 63 75 72 73 69 76  ragment recursiv
27c00 65 63 74 65 20 7b 72 65 63 75 72 73 69 76 65 20  ecte {recursive 
27c10 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
27c20 72 65 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65 63  ressions} \.{rec
27c30 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61  ursive common ta
27c40 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 7d 20  ble expression} 
27c50 7b 72 65 63 75 72 73 69 76 65 20 71 75 65 72 79  {recursive query
27c60 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 65 63  }.</tcl>.<h3>Rec
27c70 75 72 73 69 76 65 20 43 6f 6d 6d 6f 6e 20 54 61  ursive Common Ta
27c80 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73 3c  ble Expressions<
27c90 2f 68 33 3e 0a 0a 3c 70 3e 41 20 72 65 63 75 72  /h3>..<p>A recur
27ca0 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  sive common tabl
27cb0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e  e expression can
27cc0 20 62 65 20 75 73 65 64 20 74 6f 20 77 72 69 74   be used to writ
27cd0 65 20 61 20 71 75 65 72 79 20 74 68 61 74 0a 77  e a query that.w
27ce0 61 6c 6b 73 20 61 20 74 72 65 65 20 6f 72 20 67  alks a tree or g
27cf0 72 61 70 68 2e 20 20 41 20 72 65 63 75 72 73 69  raph.  A recursi
27d00 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ve common table 
27d10 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73 20 74  expression has t
27d20 68 65 20 73 61 6d 65 0a 62 61 73 69 63 20 73 79  he same.basic sy
27d30 6e 74 61 78 20 61 73 20 61 6e 20 6f 72 64 69 6e  ntax as an ordin
27d40 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
27d50 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 62 75 74   expression, but
27d60 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
27d70 69 6e 67 0a 61 64 64 69 74 69 6f 6e 61 6c 20 66  ing.additional f
27d80 65 61 74 75 72 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c  eatures:..<ol>.<
27d90 6c 69 3e 20 54 68 65 20 22 5b 73 65 6c 65 63 74  li> The "[select
27da0 2d 73 74 6d 74 5d 22 0a 20 20 20 20 20 6d 75 73  -stmt]".     mus
27db0 74 20 62 65 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  t be a [compound
27dc0 20 73 65 6c 65 63 74 5d 20 77 68 65 72 65 20 74   select] where t
27dd0 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 63  he right-most [c
27de0 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72  ompound-operator
27df0 5d 20 69 73 0a 20 20 20 20 20 65 69 74 68 65 72  ] is.     either
27e00 20 55 4e 49 4f 4e 20 6f 72 20 55 4e 49 4f 4e 20   UNION or UNION 
27e10 41 4c 4c 2e 0a 3c 6c 69 3e 20 54 68 65 20 74 61  ALL..<li> The ta
27e20 62 6c 65 20 6e 61 6d 65 64 20 6f 6e 20 74 68 65  ble named on the
27e30 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20   left-hand side 
27e40 6f 66 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72  of the AS keywor
27e50 64 20 6d 75 73 74 20 61 70 70 65 61 72 0a 20 20  d must appear.  
27e60 20 20 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20     exactly once 
27e70 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
27e80 73 65 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d  se of the right-
27e90 6d 6f 73 74 20 53 45 4c 45 43 54 20 73 74 61 74  most SELECT stat
27ea0 65 6d 65 6e 74 0a 20 20 20 20 20 6f 66 20 74 68  ement.     of th
27eb0 65 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63  e compound selec
27ec0 74 2c 20 61 6e 64 20 6e 6f 77 68 65 72 65 20 65  t, and nowhere e
27ed0 6c 73 65 2e 0a 3c 6c 69 3e 20 54 68 65 20 72 69  lse..<li> The ri
27ee0 67 68 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20  ght-most SELECT 
27ef0 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  of the compound 
27f00 73 65 6c 65 63 74 20 6d 75 73 74 20 6e 6f 74 20  select must not 
27f10 6d 61 6b 65 20 75 73 65 20 6f 66 0a 20 20 20 20  make use of.    
27f20 20 5b 41 67 67 72 65 67 61 74 65 20 46 75 6e 63   [Aggregate Func
27f30 74 69 6f 6e 73 7c 61 67 67 72 65 67 61 74 65 5d  tions|aggregate]
27f40 20 6f 72 20 5b 77 69 6e 64 6f 77 20 66 75 6e 63   or [window func
27f50 74 69 6f 6e 73 5d 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  tions]..</ol>..<
27f60 70 3e 54 6f 20 70 75 74 20 69 74 20 61 6e 6f 74  p>To put it anot
27f70 68 65 72 20 77 61 79 2c 20 61 20 72 65 63 75 72  her way, a recur
27f80 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  sive common tabl
27f90 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73  e expression mus
27fa0 74 0a 6c 6f 6f 6b 20 6c 69 6b 65 20 74 68 65 20  t.look like the 
27fb0 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 74 63 6c  following:..<tcl
27fc0 3e 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  >RecursiveBubble
27fd0 44 69 61 67 72 61 6d 20 72 65 63 75 72 73 69 76  Diagram recursiv
27fe0 65 2d 63 74 65 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  e-cte</tcl>..<p>
27ff0 43 61 6c 6c 20 74 68 65 20 74 61 62 6c 65 20 6e  Call the table n
28000 61 6d 65 64 20 62 79 20 74 68 65 20 5b 63 74 65  amed by the [cte
28010 2d 74 61 62 6c 65 2d 6e 61 6d 65 5d 20 69 6e 20  -table-name] in 
28020 61 20 72 65 63 75 72 73 69 76 65 0a 63 6f 6d 6d  a recursive.comm
28030 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
28040 69 6f 6e 20 74 68 65 20 22 72 65 63 75 72 73 69  ion the "recursi
28050 76 65 20 74 61 62 6c 65 22 2e 0a 49 6e 20 74 68  ve table"..In th
28060 65 20 5b 72 65 63 75 72 73 69 76 65 2d 63 74 65  e [recursive-cte
28070 5d 20 62 75 62 62 6c 65 20 64 69 61 67 72 61 6d  ] bubble diagram
28080 20 61 62 6f 76 65 2c 20 74 68 65 20 72 65 63 75   above, the recu
28090 72 73 69 76 65 0a 74 61 62 6c 65 20 6d 75 73 74  rsive.table must
280a0 20 61 70 70 65 61 72 20 65 78 61 63 74 6c 79 20   appear exactly 
280b0 6f 6e 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d  once in the FROM
280c0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 0a   clause of the .
280d0 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76  <yyterm>recursiv
280e0 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  e-select</yyterm
280f0 3e 0a 61 6e 64 20 6d 75 73 74 20 6e 6f 74 20 61  >.and must not a
28100 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20 65  ppear anywhere e
28110 6c 73 65 20 69 6e 20 65 69 74 68 65 72 20 74 68  lse in either th
28120 65 0a 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61  e.<yyterm>initia
28130 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  l-select</yyterm
28140 3e 20 6f 72 20 74 68 65 0a 3c 79 79 74 65 72 6d  > or the.<yyterm
28150 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63  >recursive-selec
28160 74 3c 2f 79 79 74 65 72 6d 3e 2c 20 69 6e 63 6c  t</yyterm>, incl
28170 75 64 69 6e 67 20 73 75 62 71 75 65 72 69 65 73  uding subqueries
28180 2e 0a 54 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e  ..The <yyterm>in
28190 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79  itial-select</yy
281a0 74 65 72 6d 3e 20 6d 61 79 20 62 65 0a 61 20 5b  term> may be.a [
281b0 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d  compound select]
281c0 2c 20 62 75 74 20 69 74 20 6d 61 79 20 6e 6f 74  , but it may not
281d0 20 69 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45   include an ORDE
281e0 52 20 42 59 2c 20 4c 49 4d 49 54 2c 20 6f 72 20  R BY, LIMIT, or 
281f0 4f 46 46 53 45 54 2e 0a 54 68 65 20 72 65 63 75  OFFSET..The recu
28200 72 73 69 76 65 2d 73 65 6c 65 63 74 20 6d 75 73  rsive-select mus
28210 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 73 65  t be a simple se
28220 6c 65 63 74 2c 20 6e 6f 74 20 61 20 63 6f 6d 70  lect, not a comp
28230 6f 75 6e 64 2e 20 20 54 68 65 0a 72 65 63 75 72  ound.  The.recur
28240 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 61  sive-select is a
28250 6c 6c 6f 77 65 64 20 74 6f 20 69 6e 63 6c 75 64  llowed to includ
28260 65 20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c  e an ORDER BY, L
28270 49 4d 49 54 2c 20 61 6e 64 2f 6f 72 20 4f 46 46  IMIT, and/or OFF
28280 53 45 54 2e 0a 0a 3c 70 3e 54 68 65 20 62 61 73  SET...<p>The bas
28290 69 63 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72  ic algorithm for
282a0 20 63 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 63   computing the c
282b0 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65  ontent of the re
282c0 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a 69 73  cursive table.is
282d0 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f   as follows:..<o
282e0 6c 3e 0a 3c 6c 69 3e 20 52 75 6e 20 74 68 65 20  l>.<li> Run the 
282f0 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d  <yyterm>initial-
28300 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20  select</yyterm> 
28310 61 6e 64 20 61 64 64 20 74 68 65 20 72 65 73 75  and add the resu
28320 6c 74 73 20 74 6f 20 61 20 71 75 65 75 65 2e 0a  lts to a queue..
28330 3c 6c 69 3e 20 57 68 69 6c 65 20 74 68 65 20 71  <li> While the q
28340 75 65 75 65 20 69 73 20 6e 6f 74 20 65 6d 70 74  ueue is not empt
28350 79 3a 0a 3c 6f 6c 20 74 79 70 65 3d 22 61 22 3e  y:.<ol type="a">
28360 0a 3c 6c 69 3e 20 45 78 74 72 61 63 74 20 61 20  .<li> Extract a 
28370 73 69 6e 67 6c 65 20 72 6f 77 20 66 72 6f 6d 20  single row from 
28380 74 68 65 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20  the queue..<li> 
28390 49 6e 73 65 72 74 20 74 68 61 74 20 73 69 6e 67  Insert that sing
283a0 6c 65 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 20  le row into the 
283b0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a  recursive table.
283c0 3c 6c 69 3e 20 50 72 65 74 65 6e 64 20 74 68 61  <li> Pretend tha
283d0 74 20 74 68 65 20 73 69 6e 67 6c 65 20 72 6f 77  t the single row
283e0 20 6a 75 73 74 20 65 78 74 72 61 63 74 65 64 20   just extracted 
283f0 69 73 20 74 68 65 20 6f 6e 6c 79 0a 20 20 20 20  is the only.    
28400 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 63 75   row in the recu
28410 72 73 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20  rsive table and 
28420 72 75 6e 20 74 68 65 20 72 65 63 75 72 73 69 76  run the recursiv
28430 65 2d 73 65 6c 65 63 74 2c 0a 20 20 20 20 20 61  e-select,.     a
28440 64 64 69 6e 67 20 61 6c 6c 20 72 65 73 75 6c 74  dding all result
28450 73 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 0a  s to the queue..
28460 3c 2f 6f 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </ol>.</ol>..<p>
28470 54 68 65 20 62 61 73 69 63 20 70 72 6f 63 65 64  The basic proced
28480 75 72 65 20 61 62 6f 76 65 20 6d 61 79 20 6d 6f  ure above may mo
28490 64 69 66 69 65 64 20 62 79 20 74 68 65 20 66 6f  dified by the fo
284a0 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e  llowing addition
284b0 61 6c 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a  al rules:..<ul>.
284c0 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66 20 61 20 55  <li><p>.  If a U
284d0 4e 49 4f 4e 20 6f 70 65 72 61 74 6f 72 20 63 6f  NION operator co
284e0 6e 6e 65 63 74 73 20 74 68 65 20 3c 79 79 74 65  nnects the <yyte
284f0 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  rm>initial-selec
28500 74 3c 2f 79 79 74 65 72 6d 3e 20 77 69 74 68 20  t</yyterm> with 
28510 74 68 65 0a 20 20 3c 79 79 74 65 72 6d 3e 72 65  the.  <yyterm>re
28520 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f  cursive-select</
28530 79 79 74 65 72 6d 3e 2c 20 74 68 65 6e 20 6f 6e  yyterm>, then on
28540 6c 79 20 61 64 64 20 72 6f 77 73 20 74 6f 20 74  ly add rows to t
28550 68 65 20 71 75 65 75 65 20 69 66 20 0a 20 20 6e  he queue if .  n
28560 6f 20 69 64 65 6e 74 69 63 61 6c 20 72 6f 77 20  o identical row 
28570 68 61 73 0a 20 20 62 65 65 6e 20 70 72 65 76 69  has.  been previ
28580 6f 75 73 6c 79 20 61 64 64 65 64 20 74 6f 20 74  ously added to t
28590 68 65 20 71 75 65 75 65 2e 20 20 52 65 70 65 61  he queue.  Repea
285a0 74 65 64 20 72 6f 77 73 20 61 72 65 20 64 69 73  ted rows are dis
285b0 63 61 72 64 65 64 20 62 65 66 6f 72 65 20 62 65  carded before be
285c0 69 6e 67 0a 20 20 61 64 64 65 64 20 74 6f 20 74  ing.  added to t
285d0 68 65 20 71 75 65 75 65 20 65 76 65 6e 20 69 66  he queue even if
285e0 20 74 68 65 20 72 65 70 65 61 74 65 64 20 72 6f   the repeated ro
285f0 77 73 20 68 61 76 65 20 61 6c 72 65 61 64 79 20  ws have already 
28600 62 65 65 6e 20 65 78 74 72 61 63 74 65 64 0a 20  been extracted. 
28610 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20   from the queue 
28620 62 79 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e  by the recursion
28630 20 73 74 65 70 2e 20 20 49 66 20 74 68 65 20 6f   step.  If the o
28640 70 65 72 61 74 6f 72 20 69 73 20 55 4e 49 4f 4e  perator is UNION
28650 20 41 4c 4c 2c 0a 20 20 74 68 65 6e 20 61 6c 6c   ALL,.  then all
28660 20 72 6f 77 73 20 67 65 6e 65 72 61 74 65 64 20   rows generated 
28670 62 79 20 62 6f 74 68 20 74 68 65 20 3c 79 79 74  by both the <yyt
28680 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65  erm>initial-sele
28690 63 74 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20  ct</yyterm> and 
286a0 74 68 65 0a 20 20 3c 79 79 74 65 72 6d 3e 72 65  the.  <yyterm>re
286b0 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f  cursive-select</
286c0 79 79 74 65 72 6d 3e 20 61 72 65 20 61 6c 77 61  yyterm> are alwa
286d0 79 73 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  ys added to the 
286e0 71 75 65 75 65 20 65 76 65 6e 20 69 66 0a 20 20  queue even if.  
286f0 74 68 65 79 20 61 72 65 20 72 65 70 65 61 74 73  they are repeats
28700 2e 0a 20 20 57 68 65 6e 20 64 65 74 65 72 6d 69  ..  When determi
28710 6e 69 6e 67 20 69 66 20 61 20 72 6f 77 20 69 73  ning if a row is
28720 20 72 65 70 65 61 74 65 64 2c 20 4e 55 4c 4c 20   repeated, NULL 
28730 76 61 6c 75 65 73 20 63 6f 6d 70 61 72 65 0a 20  values compare. 
28740 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e   equal to one an
28750 6f 74 68 65 72 20 61 6e 64 20 6e 6f 74 20 65 71  other and not eq
28760 75 61 6c 20 74 6f 20 61 6e 79 20 6f 74 68 65 72  ual to any other
28770 20 76 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a   value..<li><p>.
28780 20 20 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75    The LIMIT clau
28790 73 65 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20  se, if present, 
287a0 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6d  determines the m
287b0 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
287c0 20 72 6f 77 73 20 74 68 61 74 0a 20 20 77 69 6c   rows that.  wil
287d0 6c 20 65 76 65 72 20 62 65 20 61 64 64 65 64 20  l ever be added 
287e0 74 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65  to the recursive
287f0 20 74 61 62 6c 65 20 69 6e 20 73 74 65 70 20 32   table in step 2
28800 62 2e 0a 20 20 4f 6e 63 65 20 74 68 65 20 6c 69  b..  Once the li
28810 6d 69 74 20 69 73 20 72 65 61 63 68 65 64 2c 20  mit is reached, 
28820 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74  the recursion st
28830 6f 70 73 2e 0a 20 20 41 20 6c 69 6d 69 74 20 6f  ops..  A limit o
28840 66 20 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 61  f zero means tha
28850 74 20 6e 6f 20 72 6f 77 73 20 61 72 65 20 65 76  t no rows are ev
28860 65 72 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a  er added to the.
28870 20 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c    recursive tabl
28880 65 2c 20 61 6e 64 20 61 20 6e 65 67 61 74 69 76  e, and a negativ
28890 65 20 6c 69 6d 69 74 20 6d 65 61 6e 73 20 61 6e  e limit means an
288a0 20 75 6e 6c 69 6d 69 74 65 64 20 6e 75 6d 62 65   unlimited numbe
288b0 72 20 6f 66 20 72 6f 77 73 0a 20 20 6d 61 79 20  r of rows.  may 
288c0 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  be added to the 
288d0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e  recursive table.
288e0 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4f  .<li><p>.  The O
288f0 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 69 66  FFSET clause, if
28900 20 69 74 20 69 73 20 70 72 65 73 65 6e 74 20 61   it is present a
28910 6e 64 20 68 61 73 20 61 20 70 6f 73 69 74 69 76  nd has a positiv
28920 65 20 76 61 6c 75 65 20 4e 2c 20 70 72 65 76 65  e value N, preve
28930 6e 74 73 20 74 68 65 0a 20 20 66 69 72 73 74 20  nts the.  first 
28940 4e 20 72 6f 77 73 20 66 72 6f 6d 20 62 65 69 6e  N rows from bein
28950 67 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72  g added to the r
28960 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a  ecursive table..
28970 20 20 54 68 65 20 66 69 72 73 74 20 4e 20 72 6f    The first N ro
28980 77 73 20 61 72 65 20 73 74 69 6c 6c 20 70 72 6f  ws are still pro
28990 63 65 73 73 65 64 0a 20 20 62 79 20 74 68 65 20  cessed.  by the 
289a0 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76  <yyterm>recursiv
289b0 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d  e-select</yyterm
289c0 3e 20 26 6d 64 61 73 68 3b 20 74 68 65 79 0a 20  > &mdash; they. 
289d0 20 6a 75 73 74 20 61 72 65 20 6e 6f 74 20 61 64   just are not ad
289e0 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72  ded to the recur
289f0 73 69 76 65 20 74 61 62 6c 65 2e 20 20 52 6f 77  sive table.  Row
28a00 73 20 61 72 65 20 6e 6f 74 20 63 6f 75 6e 74 65  s are not counte
28a10 64 20 74 6f 77 61 72 64 0a 20 20 66 75 6c 66 69  d toward.  fulfi
28a20 6c 6c 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20  lling the LIMIT 
28a30 75 6e 74 69 6c 20 61 6c 6c 20 4f 46 46 53 45 54  until all OFFSET
28a40 20 72 6f 77 73 20 68 61 76 65 20 62 65 65 6e 20   rows have been 
28a50 73 6b 69 70 70 65 64 2e 0a 3c 6c 69 3e 3c 70 3e  skipped..<li><p>
28a60 0a 20 20 49 66 20 61 6e 20 4f 52 44 45 52 20 42  .  If an ORDER B
28a70 59 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  Y clause is pres
28a80 65 6e 74 2c 20 69 74 20 64 65 74 65 72 6d 69 6e  ent, it determin
28a90 65 73 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20  es the order in 
28aa0 77 68 69 63 68 20 72 6f 77 73 0a 20 20 61 72 65  which rows.  are
28ab0 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20   extracted from 
28ac0 74 68 65 20 71 75 65 75 65 20 69 6e 20 73 74 65  the queue in ste
28ad0 70 20 32 61 2e 20 20 49 66 20 74 68 65 72 65 20  p 2a.  If there 
28ae0 69 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63  is no ORDER BY c
28af0 6c 61 75 73 65 2c 0a 20 20 74 68 65 6e 20 74 68  lause,.  then th
28b00 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
28b10 20 72 6f 77 73 20 61 72 65 20 65 78 74 72 61 63   rows are extrac
28b20 74 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ted is undefined
28b30 2e 20 20 28 49 6e 20 74 68 65 20 63 75 72 72 65  .  (In the curre
28b40 6e 74 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74  nt.  implementat
28b50 69 6f 6e 2c 20 74 68 65 20 71 75 65 75 65 20 62  ion, the queue b
28b60 65 63 6f 6d 65 73 20 61 20 46 49 46 4f 20 69 66  ecomes a FIFO if
28b70 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
28b80 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2c  ause is omitted,
28b90 0a 20 20 62 75 74 20 61 70 70 6c 69 63 61 74 69  .  but applicati
28ba0 6f 6e 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 64  ons should not d
28bb0 65 70 65 6e 64 20 6f 6e 20 74 68 61 74 20 66 61  epend on that fa
28bc0 63 74 20 73 69 6e 63 65 20 69 74 20 6d 69 67 68  ct since it migh
28bd0 74 20 63 68 61 6e 67 65 2e 29 0a 3c 2f 75 6c 3e  t change.).</ul>
28be0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
28bf0 6e 74 20 72 63 65 78 31 3c 2f 74 63 6c 3e 0a 3c  nt rcex1</tcl>.<
28c00 68 34 3e 52 65 63 75 72 73 69 76 65 20 51 75 65  h4>Recursive Que
28c10 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e  ry Examples</h4>
28c20 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
28c30 6e 67 20 71 75 65 72 79 20 72 65 74 75 72 6e 73  ng query returns
28c40 20 61 6c 6c 20 69 6e 74 65 67 65 72 73 20 62 65   all integers be
28c50 74 77 65 65 6e 20 31 20 61 6e 64 20 31 30 30 30  tween 1 and 1000
28c60 30 30 30 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  000:..<blockquot
28c70 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43  e><pre>.WITH REC
28c80 55 52 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20  URSIVE.  cnt(x) 
28c90 41 53 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e  AS (VALUES(1) UN
28ca0 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 78  ION ALL SELECT x
28cb0 2b 31 20 46 52 4f 4d 20 63 6e 74 20 57 48 45 52  +1 FROM cnt WHER
28cc0 45 20 78 3c 31 30 30 30 30 30 30 29 0a 53 45 4c  E x<1000000).SEL
28cd0 45 43 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b 0a  ECT x FROM cnt;.
28ce0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
28cf0 74 65 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72  te>..<p>Consider
28d00 20 68 6f 77 20 74 68 69 73 20 71 75 65 72 79 20   how this query 
28d10 77 6f 72 6b 73 2e 20 20 54 68 65 20 69 6e 69 74  works.  The init
28d20 69 61 6c 2d 73 65 6c 65 63 74 0a 72 75 6e 73 20  ial-select.runs 
28d30 66 69 72 73 74 20 61 6e 64 20 72 65 74 75 72 6e  first and return
28d40 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 0a 77  s a single row.w
28d50 69 74 68 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c  ith a single col
28d60 75 6d 6e 20 22 31 22 2e 20 20 54 68 69 73 20 6f  umn "1".  This o
28d70 6e 65 20 72 6f 77 20 69 73 20 61 64 64 65 64 20  ne row is added 
28d80 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20 49  to the queue.  I
28d90 6e 0a 73 74 65 70 20 32 61 2c 20 74 68 61 74 20  n.step 2a, that 
28da0 6f 6e 65 20 72 6f 77 20 69 73 20 65 78 74 72 61  one row is extra
28db0 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75  cted from the qu
28dc0 65 75 65 20 61 6e 64 20 61 64 64 65 64 20 74 6f  eue and added to
28dd0 20 22 63 6e 74 22 2e 0a 54 68 65 6e 20 74 68 65   "cnt"..Then the
28de0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
28df0 74 20 69 73 20 72 75 6e 20 69 6e 20 61 63 63 6f  t is run in acco
28e00 72 64 61 6e 63 65 20 77 69 74 68 20 73 74 65 70  rdance with step
28e10 20 32 63 20 67 65 6e 65 72 61 74 69 6e 67 0a 61   2c generating.a
28e20 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20   single new row 
28e30 77 69 74 68 20 76 61 6c 75 65 20 22 32 22 20 74  with value "2" t
28e40 6f 20 61 64 64 20 74 6f 20 74 68 65 20 71 75 65  o add to the que
28e50 75 65 2e 20 20 54 68 65 20 71 75 65 75 65 20 73  ue.  The queue s
28e60 74 69 6c 6c 0a 68 61 73 20 6f 6e 65 20 72 6f 77  till.has one row
28e70 2c 20 73 6f 20 73 74 65 70 20 32 20 72 65 70 65  , so step 2 repe
28e80 61 74 73 2e 20 20 54 68 65 20 22 32 22 20 72 6f  ats.  The "2" ro
28e90 77 20 69 73 20 65 78 74 72 61 63 74 65 64 20 61  w is extracted a
28ea0 6e 64 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a  nd added to the.
28eb0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20  recursive table 
28ec0 62 79 20 73 74 65 70 73 20 32 61 20 61 6e 64 20  by steps 2a and 
28ed0 32 62 2e 20 20 54 68 65 6e 20 74 68 65 20 72 6f  2b.  Then the ro
28ee0 77 20 63 6f 6e 74 61 69 6e 69 6e 67 20 32 20 69  w containing 2 i
28ef0 73 20 75 73 65 64 20 0a 61 73 20 69 66 20 69 74  s used .as if it
28f00 20 77 65 72 65 20 74 68 65 20 63 6f 6d 70 6c 65   were the comple
28f10 74 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  te content of th
28f20 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
28f30 65 20 61 6e 64 20 74 68 65 20 0a 72 65 63 75 72  e and the .recur
28f40 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72  sive-select is r
28f50 75 6e 20 61 67 61 69 6e 2c 20 72 65 73 75 6c 74  un again, result
28f60 69 6e 67 20 69 6e 20 61 20 72 6f 77 20 77 69 74  ing in a row wit
28f70 68 20 76 61 6c 75 65 20 22 33 22 20 62 65 69 6e  h value "3" bein
28f80 67 20 61 64 64 65 64 0a 74 6f 20 74 68 65 20 71  g added.to the q
28f90 75 65 75 65 2e 20 20 54 68 69 73 20 72 65 70 65  ueue.  This repe
28fa0 61 74 73 20 39 39 39 39 39 39 20 74 69 6d 65 73  ats 999999 times
28fb0 20 75 6e 74 69 6c 20 66 69 6e 61 6c 6c 79 20 61   until finally a
28fc0 74 20 73 74 65 70 20 32 61 20 74 68 65 0a 6f 6e  t step 2a the.on
28fd0 6c 79 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20  ly value on the 
28fe0 71 75 65 75 65 20 69 73 20 61 20 72 6f 77 20 63  queue is a row c
28ff0 6f 6e 74 61 69 6e 69 6e 67 20 31 30 30 30 30 30  ontaining 100000
29000 30 2e 20 20 54 68 61 74 20 72 6f 77 20 69 73 0a  0.  That row is.
29010 65 78 74 72 61 63 74 65 64 20 61 6e 64 20 61 64  extracted and ad
29020 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72  ded to the recur
29030 73 69 76 65 20 74 61 62 6c 65 2e 20 20 42 75 74  sive table.  But
29040 20 74 68 69 73 20 74 69 6d 65 2c 20 74 68 65 0a   this time, the.
29050 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 75  WHERE clause cau
29060 73 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76  ses the recursiv
29070 65 2d 73 65 6c 65 63 74 20 74 6f 20 72 65 74 75  e-select to retu
29080 72 6e 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 74  rn no rows, so t
29090 68 65 0a 71 75 65 75 65 20 72 65 6d 61 69 6e 73  he.queue remains
290a0 20 65 6d 70 74 79 20 61 6e 64 20 74 68 65 20 72   empty and the r
290b0 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a  ecursion stops..
290c0 0a 3c 70 3e 3c 62 3e 4f 70 74 69 6d 69 7a 61 74  .<p><b>Optimizat
290d0 69 6f 6e 20 6e 6f 74 65 3a 3c 2f 62 3e 0a 49 6e  ion note:</b>.In
290e0 20 74 68 65 20 64 69 73 63 75 73 73 69 6f 6e 20   the discussion 
290f0 61 62 6f 76 65 2c 20 73 74 61 74 65 6d 65 6e 74  above, statement
29100 73 20 6c 69 6b 65 20 22 69 6e 73 65 72 74 20 74  s like "insert t
29110 68 65 20 72 6f 77 20 69 6e 74 6f 0a 74 68 65 20  he row into.the 
29120 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 22  recursive table"
29130 20 73 68 6f 75 6c 64 20 62 65 20 75 6e 64 65 72   should be under
29140 73 74 6f 6f 64 20 63 6f 6e 63 65 70 74 75 61 6c  stood conceptual
29150 6c 79 2c 20 6e 6f 74 20 6c 69 74 65 72 61 6c 6c  ly, not literall
29160 79 2e 0a 49 74 20 73 6f 75 6e 64 73 20 61 73 20  y..It sounds as 
29170 69 66 20 53 51 4c 69 74 65 20 69 73 20 61 63 63  if SQLite is acc
29180 75 6d 75 6c 61 74 69 6e 67 20 61 20 68 75 67 65  umulating a huge
29190 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 69 6e   table.containin
291a0 67 20 6f 6e 65 20 6d 69 6c 6c 69 6f 6e 20 72 6f  g one million ro
291b0 77 73 2c 20 74 68 65 6e 20 67 6f 69 6e 67 20 62  ws, then going b
291c0 61 63 6b 20 61 6e 64 20 73 63 61 6e 6e 69 6e 67  ack and scanning
291d0 20 74 68 61 74 20 74 61 62 6c 65 0a 66 72 6f 6d   that table.from
291e0 20 74 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 20 74   top to bottom t
291f0 6f 20 67 65 6e 65 72 61 74 65 20 74 68 65 20 72  o generate the r
29200 65 73 75 6c 74 2e 20 20 57 68 61 74 20 72 65 61  esult.  What rea
29210 6c 6c 79 20 68 61 70 70 65 6e 73 0a 69 73 20 74  lly happens.is t
29220 68 61 74 20 74 68 65 20 71 75 65 72 79 20 6f 70  hat the query op
29230 74 69 6d 69 7a 65 72 20 73 65 65 73 20 74 68 61  timizer sees tha
29240 74 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 0a  t values in the.
29250 22 63 6e 74 22 20 72 65 63 75 72 73 69 76 65 20  "cnt" recursive 
29260 74 61 62 6c 65 20 61 72 65 20 6f 6e 6c 79 20 75  table are only u
29270 73 65 64 20 6f 6e 63 65 2e 20 20 53 6f 20 61 73  sed once.  So as
29280 20 65 61 63 68 20 72 6f 77 20 69 73 20 61 64 64   each row is add
29290 65 64 20 74 6f 0a 74 68 65 20 72 65 63 75 72 73  ed to.the recurs
292a0 69 76 65 20 74 61 62 6c 65 2c 20 74 68 61 74 20  ive table, that 
292b0 72 6f 77 20 69 73 20 69 6d 6d 65 64 69 61 74 65  row is immediate
292c0 6c 79 20 72 65 74 75 72 6e 65 64 20 61 73 20 61  ly returned as a
292d0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6d   result of the m
292e0 61 69 6e 0a 53 45 4c 45 43 54 20 73 74 61 74 65  ain.SELECT state
292f0 6d 65 6e 74 20 61 6e 64 20 74 68 65 6e 20 64 69  ment and then di
29300 73 63 61 72 64 65 64 2e 20 20 53 51 4c 69 74 65  scarded.  SQLite
29310 20 64 6f 65 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65   does <em>not</e
29320 6d 3e 20 61 63 63 75 6d 75 6c 61 74 65 0a 61 20  m> accumulate.a 
29330 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
29340 63 6f 6e 74 61 69 6e 69 6e 67 20 61 20 6d 69 6c  containing a mil
29350 6c 69 6f 6e 20 72 6f 77 73 2e 20 20 56 65 72 79  lion rows.  Very
29360 20 6c 69 74 74 6c 65 20 6d 65 6d 6f 72 79 20 69   little memory i
29370 73 0a 6e 65 65 64 65 64 20 74 6f 20 72 75 6e 20  s.needed to run 
29380 74 68 65 20 61 62 6f 76 65 20 65 78 61 6d 70 6c  the above exampl
29390 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20  e.  However, if 
293a0 74 68 65 20 65 78 61 6d 70 6c 65 20 68 61 64 20  the example had 
293b0 75 73 65 64 0a 55 4e 49 4f 4e 20 69 6e 73 74 65  used.UNION inste
293c0 61 64 20 6f 66 20 55 4e 49 4f 4e 20 41 4c 4c 2c  ad of UNION ALL,
293d0 20 74 68 65 6e 20 53 51 4c 69 74 65 20 77 6f 75   then SQLite wou
293e0 6c 64 20 68 61 76 65 20 68 61 64 20 74 6f 20 6b  ld have had to k
293f0 65 65 70 20 61 72 6f 75 6e 64 0a 61 6c 6c 20 70  eep around.all p
29400 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61  reviously genera
29410 74 65 64 20 63 6f 6e 74 65 6e 74 20 69 6e 20 6f  ted content in o
29420 72 64 65 72 20 74 6f 20 63 68 65 63 6b 20 66 6f  rder to check fo
29430 72 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 46 6f  r duplicates..Fo
29440 72 20 74 68 69 73 20 72 65 61 73 6f 6e 2c 20 70  r this reason, p
29450 72 6f 67 72 61 6d 6d 65 72 73 20 73 68 6f 75 6c  rogrammers shoul
29460 64 20 73 74 72 69 76 65 20 74 6f 20 75 73 65 20  d strive to use 
29470 55 4e 49 4f 4e 20 41 4c 4c 20 69 6e 73 74 65 61  UNION ALL instea
29480 64 0a 6f 66 20 55 4e 49 4f 4e 20 77 68 65 6e 20  d.of UNION when 
29490 66 65 61 73 69 62 6c 65 2e 0a 0a 3c 70 3e 48 65  feasible...<p>He
294a0 72 65 20 69 73 20 61 20 76 61 72 69 61 74 69 6f  re is a variatio
294b0 6e 20 6f 6e 20 74 68 65 20 70 72 65 76 69 6f 75  n on the previou
294c0 73 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f  s example:..<blo
294d0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49  ckquote><pre>.WI
294e0 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 63  TH RECURSIVE.  c
294f0 6e 74 28 78 29 20 41 53 20 28 0a 20 20 20 20 20  nt(x) AS (.     
29500 53 45 4c 45 43 54 20 31 0a 20 20 20 20 20 55 4e  SELECT 1.     UN
29510 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c  ION ALL.     SEL
29520 45 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74  ECT x+1 FROM cnt
29530 0a 20 20 20 20 20 20 4c 49 4d 49 54 20 31 30 30  .      LIMIT 100
29540 30 30 30 30 0a 20 20 29 0a 53 45 4c 45 43 54 20  0000.  ).SELECT 
29550 78 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72  x FROM cnt;.</pr
29560 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
29570 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74 77  .<p>There are tw
29580 6f 20 64 69 66 66 65 72 65 6e 63 65 73 20 69 6e  o differences in
29590 20 74 68 69 73 20 76 61 72 69 61 74 69 6f 6e 2e   this variation.
295a0 20 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65    The initial-se
295b0 6c 65 63 74 20 69 73 0a 22 53 45 4c 45 43 54 20  lect is."SELECT 
295c0 31 22 20 69 6e 73 74 65 61 64 20 6f 66 20 22 56  1" instead of "V
295d0 41 4c 55 45 53 28 31 29 22 2e 20 20 42 75 74 20  ALUES(1)".  But 
295e0 74 68 6f 73 65 20 61 72 65 20 6a 75 73 74 20 64  those are just d
295f0 69 66 66 65 72 65 6e 74 0a 73 79 6e 74 61 78 65  ifferent.syntaxe
29600 73 20 66 6f 72 20 73 61 79 69 6e 67 20 65 78 61  s for saying exa
29610 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
29620 69 6e 67 2e 20 20 54 68 65 20 6f 74 68 65 72 20  ing.  The other 
29630 63 68 61 6e 67 65 20 69 73 20 74 68 61 74 20 74  change is that t
29640 68 65 0a 72 65 63 75 72 73 69 6f 6e 20 69 73 20  he.recursion is 
29650 73 74 6f 70 70 65 64 20 62 79 20 61 20 4c 49 4d  stopped by a LIM
29660 49 54 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  IT rather than a
29670 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 20 20   WHERE clause.  
29680 54 68 65 20 75 73 65 20 6f 66 0a 4c 49 4d 49 54  The use of.LIMIT
29690 20 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e   means that when
296a0 20 74 68 65 20 6f 6e 65 2d 6d 69 6c 6c 69 6f 6e   the one-million
296b0 74 68 20 72 6f 77 20 69 73 20 61 64 64 65 64 20  th row is added 
296c0 74 6f 20 74 68 65 20 22 63 6e 74 22 20 74 61 62  to the "cnt" tab
296d0 6c 65 0a 28 61 6e 64 20 72 65 74 75 72 6e 65 64  le.(and returned
296e0 20 62 79 20 74 68 65 20 6d 61 69 6e 20 53 45 4c   by the main SEL
296f0 45 43 54 2c 20 74 68 61 6e 6b 73 20 74 6f 20 74  ECT, thanks to t
29700 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
29710 65 72 29 0a 74 68 65 6e 20 74 68 65 20 72 65 63  er).then the rec
29720 75 72 73 69 6f 6e 20 73 74 6f 70 73 20 69 6d 6d  ursion stops imm
29730 65 64 69 61 74 65 6c 79 20 72 65 67 61 72 64 6c  ediately regardl
29740 65 73 73 20 6f 66 20 68 6f 77 20 6d 61 6e 79 20  ess of how many 
29750 72 6f 77 73 20 6d 69 67 68 74 20 62 65 0a 6c 65  rows might be.le
29760 66 74 20 69 6e 20 74 68 65 20 71 75 65 75 65 2e  ft in the queue.
29770 20 20 4f 6e 20 6d 6f 72 65 20 63 6f 6d 70 6c 65    On more comple
29780 78 20 71 75 65 72 69 65 73 2c 20 69 74 20 63 61  x queries, it ca
29790 6e 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 0a 64  n sometimes be.d
297a0 69 66 66 69 63 75 6c 74 20 74 6f 20 65 6e 73 75  ifficult to ensu
297b0 72 65 20 74 68 61 74 20 74 68 65 20 57 48 45 52  re that the WHER
297c0 45 20 63 6c 61 75 73 65 20 77 69 6c 6c 20 65 76  E clause will ev
297d0 65 6e 74 75 61 6c 6c 79 20 63 61 75 73 65 20 74  entually cause t
297e0 68 65 0a 71 75 65 75 65 20 74 6f 20 64 72 61 69  he.queue to drai
297f0 6e 20 61 6e 64 20 74 68 65 20 72 65 63 75 72 73  n and the recurs
29800 69 6f 6e 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  ion to terminate
29810 2e 20 20 42 75 74 20 74 68 65 20 4c 49 4d 49 54  .  But the LIMIT
29820 20 63 6c 61 75 73 65 20 77 69 6c 6c 0a 61 6c 77   clause will.alw
29830 61 79 73 20 73 74 6f 70 20 74 68 65 20 72 65 63  ays stop the rec
29840 75 72 73 69 6f 6e 2e 20 20 53 6f 20 69 74 20 69  ursion.  So it i
29850 73 20 67 6f 6f 64 20 70 72 61 63 74 69 63 65 20  s good practice 
29860 74 6f 20 61 6c 77 61 79 73 20 69 6e 63 6c 75 64  to always includ
29870 65 20 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65  e a.LIMIT clause
29880 20 61 73 20 61 20 73 61 66 65 74 79 20 69 66 20   as a safety if 
29890 61 6e 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f  an upper bound o
298a0 6e 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  n the size of th
298b0 65 20 72 65 63 75 72 73 69 6f 6e 20 0a 69 73 20  e recursion .is 
298c0 6b 6e 6f 77 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  known...<tcl>hd_
298d0 66 72 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f  fragment rcex2</
298e0 74 63 6c 3e 0a 3c 68 34 3e 48 69 65 72 61 72 63  tcl>.<h4>Hierarc
298f0 68 69 63 61 6c 20 51 75 65 72 79 20 45 78 61 6d  hical Query Exam
29900 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 43 6f  ples</h4>..<p>Co
29910 6e 73 69 64 65 72 20 61 20 74 61 62 6c 65 20 74  nsider a table t
29920 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
29930 65 20 6d 65 6d 62 65 72 73 20 6f 66 20 61 6e 20  e members of an 
29940 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 61 73 0a  organization as.
29950 77 65 6c 6c 20 61 73 20 74 68 65 20 63 68 61 69  well as the chai
29960 6e 2d 6f 66 2d 63 6f 6d 6d 61 6e 64 20 77 69 74  n-of-command wit
29970 68 69 6e 20 74 68 61 74 20 6f 72 67 61 6e 69 7a  hin that organiz
29980 61 74 69 6f 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  ation:..<blockqu
29990 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
299a0 20 54 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61   TABLE org(.  na
299b0 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  me TEXT PRIMARY 
299c0 4b 45 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54  KEY,.  boss TEXT
299d0 20 52 45 46 45 52 45 4e 43 45 53 20 6f 72 67 2c   REFERENCES org,
299e0 0a 20 20 68 65 69 67 68 74 20 49 4e 54 2c 0a 20  .  height INT,. 
299f0 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e   -- other conten
29a00 74 20 6f 6d 69 74 74 65 64 0a 29 3b 0a 3c 2f 70  t omitted.);.</p
29a10 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
29a20 0a 0a 3c 70 3e 45 76 65 72 79 20 6d 65 6d 62 65  ..<p>Every membe
29a30 72 20 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a  r in the organiz
29a40 61 74 69 6f 6e 20 68 61 73 20 61 20 6e 61 6d 65  ation has a name
29a50 2c 20 61 6e 64 20 6d 6f 73 74 20 6d 65 6d 62 65  , and most membe
29a60 72 73 20 68 61 76 65 0a 61 20 73 69 6e 67 6c 65  rs have.a single
29a70 20 62 6f 73 73 2e 20 20 28 54 68 65 20 68 65 61   boss.  (The hea
29a80 64 20 6f 66 20 74 68 65 20 77 68 6f 6c 65 20 6f  d of the whole o
29a90 72 67 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20  rganization has 
29aa0 61 20 4e 55 4c 4c 0a 22 62 6f 73 73 22 20 66 69  a NULL."boss" fi
29ab0 65 6c 64 2e 29 20 54 68 65 20 72 6f 77 73 20 6f  eld.) The rows o
29ac0 66 20 74 68 65 20 22 6f 72 67 22 20 74 61 62 6c  f the "org" tabl
29ad0 65 20 66 6f 72 6d 20 61 20 74 72 65 65 2e 0a 0a  e form a tree...
29ae0 3c 70 3e 48 65 72 65 20 69 73 20 61 20 71 75 65  <p>Here is a que
29af0 72 79 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ry that computes
29b00 20 74 68 65 20 61 76 65 72 61 67 65 20 68 65 69   the average hei
29b10 67 68 74 20 6f 76 65 72 20 65 76 65 72 79 6f 6e  ght over everyon
29b20 65 0a 69 6e 20 41 6c 69 63 65 27 73 20 6f 72 67  e.in Alice's org
29b30 61 6e 69 7a 61 74 69 6f 6e 2c 20 69 6e 63 6c 75  anization, inclu
29b40 64 69 6e 67 20 41 6c 69 63 65 3a 0a 0a 3c 62 6c  ding Alice:..<bl
29b50 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
29b60 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
29b70 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 28  works_for_alice(
29b80 6e 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55  n) AS (.    VALU
29b90 45 53 28 27 41 6c 69 63 65 27 29 0a 20 20 20 20  ES('Alice').    
29ba0 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54  UNION.    SELECT
29bb0 20 6e 61 6d 65 20 46 52 4f 4d 20 6f 72 67 2c 20   name FROM org, 
29bc0 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 0a  works_for_alice.
29bd0 20 20 20 20 20 57 48 45 52 45 20 6f 72 67 2e 62       WHERE org.b
29be0 6f 73 73 3d 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c  oss=works_for_al
29bf0 69 63 65 2e 6e 0a 20 20 29 0a 53 45 4c 45 43 54  ice.n.  ).SELECT
29c00 20 61 76 67 28 68 65 69 67 68 74 29 20 46 52 4f   avg(height) FRO
29c10 4d 20 6f 72 67 0a 20 57 48 45 52 45 20 6f 72 67  M org. WHERE org
29c20 2e 6e 61 6d 65 20 49 4e 20 77 6f 72 6b 73 5f 66  .name IN works_f
29c30 6f 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e  or_alice;.</pre>
29c40 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
29c50 70 3e 54 68 65 20 6e 65 78 74 20 65 78 61 6d 70  p>The next examp
29c60 6c 65 20 75 73 65 73 20 74 77 6f 20 0a 63 6f 6d  le uses two .com
29c70 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
29c80 73 69 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c  sions in a singl
29c90 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 20 20  e WITH clause.  
29ca0 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  .The following t
29cb0 61 62 6c 65 20 72 65 63 6f 72 64 73 20 61 20 66  able records a f
29cc0 61 6d 69 6c 79 20 74 72 65 65 3a 0a 0a 3c 62 6c  amily tree:..<bl
29cd0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
29ce0 52 45 41 54 45 20 54 41 42 4c 45 20 66 61 6d 69  REATE TABLE fami
29cf0 6c 79 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20  ly(.  name TEXT 
29d00 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d  PRIMARY KEY,.  m
29d10 6f 6d 20 54 45 58 54 20 52 45 46 45 52 45 4e 43  om TEXT REFERENC
29d20 45 53 20 66 61 6d 69 6c 79 2c 0a 20 20 64 61 64  ES family,.  dad
29d30 20 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53   TEXT REFERENCES
29d40 20 66 61 6d 69 6c 79 2c 0a 20 20 62 6f 72 6e 20   family,.  born 
29d50 44 41 54 45 54 49 4d 45 2c 0a 20 20 64 69 65 64  DATETIME,.  died
29d60 20 44 41 54 45 54 49 4d 45 2c 20 2d 2d 20 4e 55   DATETIME, -- NU
29d70 4c 4c 20 69 66 20 73 74 69 6c 6c 20 61 6c 69 76  LL if still aliv
29d80 65 0a 20 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e  e.  -- other con
29d90 74 65 6e 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  tent.);.</pre></
29da0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
29db0 54 68 65 20 22 66 61 6d 69 6c 79 22 20 74 61 62  The "family" tab
29dc0 6c 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  le is similar to
29dd0 20 74 68 65 20 65 61 72 6c 69 65 72 20 22 6f 72   the earlier "or
29de0 67 22 20 74 61 62 6c 65 20 65 78 63 65 70 74 20  g" table except 
29df0 74 68 61 74 20 0a 6e 6f 77 20 74 68 65 72 65 20  that .now there 
29e00 61 72 65 20 74 77 6f 20 70 61 72 65 6e 74 73 20  are two parents 
29e10 74 6f 20 65 61 63 68 20 6d 65 6d 62 65 72 2e 0a  to each member..
29e20 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20  We want to know 
29e30 61 6c 6c 20 6c 69 76 69 6e 67 20 61 6e 63 65 73  all living ances
29e40 74 6f 72 73 20 6f 66 20 41 6c 69 63 65 2c 20 66  tors of Alice, f
29e50 72 6f 6d 20 6f 6c 64 65 73 74 20 74 6f 20 79 6f  rom oldest to yo
29e60 75 6e 67 65 73 74 2e 0a 41 6e 20 6f 72 64 69 6e  ungest..An ordin
29e70 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
29e80 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 22 70 61   expression, "pa
29e90 72 65 6e 74 5f 6f 66 22 2c 20 69 73 20 64 65 66  rent_of", is def
29ea0 69 6e 65 64 20 66 69 72 73 74 2e 20 20 54 68 61  ined first.  Tha
29eb0 74 0a 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69  t.ordinary CTE i
29ec0 73 20 61 20 76 69 65 77 20 74 68 61 74 20 63 61  s a view that ca
29ed0 6e 20 62 65 20 75 73 65 64 20 74 6f 20 66 69 6e  n be used to fin
29ee0 64 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 6f 66  d all parents of
29ef0 20 61 6e 79 0a 69 6e 64 69 76 69 64 75 61 6c 2e   any.individual.
29f00 20 20 54 68 61 74 20 6f 72 64 69 6e 61 72 79 20    That ordinary 
29f10 43 54 45 20 69 73 20 74 68 65 6e 20 75 73 65 64  CTE is then used
29f20 20 69 6e 20 74 68 65 20 22 61 6e 63 65 73 74 6f   in the "ancesto
29f30 72 5f 6f 66 5f 61 6c 69 63 65 22 0a 72 65 63 75  r_of_alice".recu
29f40 72 73 69 76 65 20 43 54 45 2e 20 20 54 68 65 20  rsive CTE.  The 
29f50 72 65 63 75 72 73 69 76 65 20 43 54 45 20 69 73  recursive CTE is
29f60 20 74 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68   then used in th
29f70 65 20 66 69 6e 61 6c 20 71 75 65 72 79 3a 0a 0a  e final query:..
29f80 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
29f90 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45  >.WITH RECURSIVE
29fa0 0a 20 20 70 61 72 65 6e 74 5f 6f 66 28 6e 61 6d  .  parent_of(nam
29fb0 65 2c 20 70 61 72 65 6e 74 29 20 41 53 0a 20 20  e, parent) AS.  
29fc0 20 20 28 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20    (SELECT name, 
29fd0 6d 6f 6d 20 46 52 4f 4d 20 66 61 6d 69 6c 79 20  mom FROM family 
29fe0 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 6e 61 6d  UNION SELECT nam
29ff0 65 2c 20 64 61 64 20 46 52 4f 4d 20 66 61 6d 69  e, dad FROM fami
2a000 6c 79 29 2c 0a 20 20 61 6e 63 65 73 74 6f 72 5f  ly),.  ancestor_
2a010 6f 66 5f 61 6c 69 63 65 28 6e 61 6d 65 29 20 41  of_alice(name) A
2a020 53 0a 20 20 20 20 28 53 45 4c 45 43 54 20 70 61  S.    (SELECT pa
2a030 72 65 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74  rent FROM parent
2a040 5f 6f 66 20 57 48 45 52 45 20 6e 61 6d 65 3d 27  _of WHERE name='
2a050 41 6c 69 63 65 27 0a 20 20 20 20 20 55 4e 49 4f  Alice'.     UNIO
2a060 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43  N ALL.     SELEC
2a070 54 20 70 61 72 65 6e 74 20 46 52 4f 4d 20 70 61  T parent FROM pa
2a080 72 65 6e 74 5f 6f 66 20 4a 4f 49 4e 20 61 6e 63  rent_of JOIN anc
2a090 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 20 55  estor_of_alice U
2a0a0 53 49 4e 47 28 6e 61 6d 65 29 29 0a 53 45 4c 45  SING(name)).SELE
2a0b0 43 54 20 66 61 6d 69 6c 79 2e 6e 61 6d 65 20 46  CT family.name F
2a0c0 52 4f 4d 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f  ROM ancestor_of_
2a0d0 61 6c 69 63 65 2c 20 66 61 6d 69 6c 79 0a 20 57  alice, family. W
2a0e0 48 45 52 45 20 61 6e 63 65 73 74 6f 72 5f 6f 66  HERE ancestor_of
2a0f0 5f 61 6c 69 63 65 2e 6e 61 6d 65 3d 66 61 6d 69  _alice.name=fami
2a100 6c 79 2e 6e 61 6d 65 0a 20 20 20 41 4e 44 20 64  ly.name.   AND d
2a110 69 65 64 20 49 53 20 4e 55 4c 4c 0a 20 4f 52 44  ied IS NULL. ORD
2a120 45 52 20 42 59 20 62 6f 72 6e 3b 0a 3c 2f 70 72  ER BY born;.</pr
2a130 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
2a140 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2a150 74 20 72 63 65 78 33 3c 2f 74 63 6c 3e 0a 3c 68  t rcex3</tcl>.<h
2a160 34 3e 51 75 65 72 69 65 73 20 41 67 61 69 6e 73  4>Queries Agains
2a170 74 20 41 20 47 72 61 70 68 3c 2f 68 34 3e 0a 0a  t A Graph</h4>..
2a180 3c 70 3e 41 20 76 65 72 73 69 6f 6e 20 63 6f 6e  <p>A version con
2a190 74 72 6f 6c 20 73 79 73 74 65 6d 20 28 56 43 53  trol system (VCS
2a1a0 29 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79  ) will typically
2a1b0 20 73 74 6f 72 65 20 74 68 65 20 65 76 6f 6c 76   store the evolv
2a1c0 69 6e 67 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20  ing.versions of 
2a1d0 61 20 70 72 6f 6a 65 63 74 20 61 73 20 61 20 64  a project as a d
2a1e0 69 72 65 63 74 65 64 20 61 63 79 63 6c 69 63 20  irected acyclic 
2a1f0 67 72 61 70 68 20 28 44 41 47 29 2e 20 20 43 61  graph (DAG).  Ca
2a200 6c 6c 20 65 61 63 68 0a 76 65 72 73 69 6f 6e 20  ll each.version 
2a210 6f 66 20 74 68 65 20 70 72 6f 6a 65 63 74 20 61  of the project a
2a220 20 22 63 68 65 63 6b 69 6e 22 2e 20 20 41 20 73   "checkin".  A s
2a230 69 6e 67 6c 65 0a 63 68 65 63 6b 69 6e 20 63 61  ingle.checkin ca
2a240 6e 20 68 61 76 65 20 7a 65 72 6f 20 6f 72 20 6d  n have zero or m
2a250 6f 72 65 20 70 61 72 65 6e 74 73 2e 20 20 4d 6f  ore parents.  Mo
2a260 73 74 20 63 68 65 63 6b 69 6e 73 20 28 65 78 63  st checkins (exc
2a270 65 70 74 20 74 68 65 0a 66 69 72 73 74 29 20 68  ept the.first) h
2a280 61 76 65 20 61 20 73 69 6e 67 6c 65 20 70 61 72  ave a single par
2a290 65 6e 74 2c 20 62 75 74 20 69 6e 20 74 68 65 20  ent, but in the 
2a2a0 63 61 73 65 20 6f 66 20 61 20 6d 65 72 67 65 2c  case of a merge,
2a2b0 20 61 20 63 68 65 63 6b 69 6e 0a 6d 69 67 68 74   a checkin.might
2a2c0 20 68 61 76 65 20 74 77 6f 20 6f 72 20 74 68 72   have two or thr
2a2d0 65 65 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e  ee or more paren
2a2e0 74 73 2e 20 20 41 20 73 63 68 65 6d 61 20 74 6f  ts.  A schema to
2a2f0 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 0a 63   keep track of.c
2a300 68 65 63 6b 69 6e 73 20 61 6e 64 20 74 68 65 20  heckins and the 
2a310 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74  order in which t
2a320 68 65 79 20 6f 63 63 75 72 20 6d 69 67 68 74 20  hey occur might 
2a330 6c 6f 6f 6b 20 73 6f 6d 65 74 68 69 6e 67 20 6c  look something l
2a340 69 6b 65 0a 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63  ike.this:..<bloc
2a350 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
2a360 41 54 45 20 54 41 42 4c 45 20 63 68 65 63 6b 69  ATE TABLE checki
2a370 6e 28 0a 20 20 69 64 20 49 4e 54 45 47 45 52 20  n(.  id INTEGER 
2a380 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d  PRIMARY KEY,.  m
2a390 74 69 6d 65 20 49 4e 54 45 47 45 52 20 2d 2d 20  time INTEGER -- 
2a3a0 74 69 6d 65 73 74 61 6d 70 20 77 68 65 6e 20 74  timestamp when t
2a3b0 68 69 73 20 63 68 65 63 6b 69 6e 20 6f 63 63 75  his checkin occu
2a3c0 72 72 65 64 0a 29 3b 0a 43 52 45 41 54 45 20 54  rred.);.CREATE T
2a3d0 41 42 4c 45 20 64 65 72 69 76 65 64 66 72 6f 6d  ABLE derivedfrom
2a3e0 28 0a 20 20 78 66 72 6f 6d 20 49 4e 54 45 47 45  (.  xfrom INTEGE
2a3f0 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52  R NOT NULL REFER
2a400 45 4e 43 45 53 20 63 68 65 63 6b 69 6e 2c 20 2d  ENCES checkin, -
2a410 2d 20 70 61 72 65 6e 74 20 63 68 65 63 6b 69 6e  - parent checkin
2a420 0a 20 20 78 74 6f 20 49 4e 54 45 47 45 52 20 4e  .  xto INTEGER N
2a430 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43  OT NULL REFERENC
2a440 45 53 20 63 68 65 63 6b 69 6e 2c 20 20 20 2d 2d  ES checkin,   --
2a450 20 64 65 72 69 76 65 64 20 63 68 65 63 6b 69 6e   derived checkin
2a460 0a 20 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78  .  PRIMARY KEY(x
2a470 66 72 6f 6d 2c 78 74 6f 29 0a 29 3b 0a 43 52 45  from,xto).);.CRE
2a480 41 54 45 20 49 4e 44 45 58 20 64 65 72 69 76 65  ATE INDEX derive
2a490 64 66 72 6f 6d 5f 62 61 63 6b 20 4f 4e 20 64 65  dfrom_back ON de
2a4a0 72 69 76 65 64 66 72 6f 6d 28 78 74 6f 2c 78 66  rivedfrom(xto,xf
2a4b0 72 6f 6d 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  rom);.</pre></bl
2a4c0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
2a4d0 69 73 20 67 72 61 70 68 20 69 73 20 61 63 79 63  is graph is acyc
2a4e0 6c 69 63 2e 20 20 41 6e 64 20 77 65 20 61 73 73  lic.  And we ass
2a4f0 75 6d 65 20 74 68 61 74 20 74 68 65 20 6d 74 69  ume that the mti
2a500 6d 65 20 6f 66 20 65 76 65 72 79 0a 63 68 69 6c  me of every.chil
2a510 64 20 63 68 65 63 6b 69 6e 20 69 73 20 6e 6f 20  d checkin is no 
2a520 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6d 74  less than the mt
2a530 69 6d 65 20 6f 66 20 61 6c 6c 20 69 74 73 20 70  ime of all its p
2a540 61 72 65 6e 74 73 2e 20 20 42 75 74 0a 75 6e 6c  arents.  But.unl
2a550 69 6b 65 20 74 68 65 20 65 61 72 6c 69 65 72 20  ike the earlier 
2a560 65 78 61 6d 70 6c 65 73 2c 20 74 68 69 73 20 67  examples, this g
2a570 72 61 70 68 20 6d 69 67 68 74 20 68 61 76 65 20  raph might have 
2a580 6d 75 6c 74 69 70 6c 65 20 70 61 74 68 73 20 6f  multiple paths o
2a590 66 0a 64 69 66 66 65 72 69 6e 67 20 6c 65 6e 67  f.differing leng
2a5a0 74 68 73 20 62 65 74 77 65 65 6e 20 61 6e 79 20  ths between any 
2a5b0 74 77 6f 20 63 68 65 63 6b 69 6e 73 2e 0a 0a 3c  two checkins...<
2a5c0 70 3e 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e 6f  p>We want to kno
2a5d0 77 20 74 68 65 20 74 77 65 6e 74 79 20 6d 6f 73  w the twenty mos
2a5e0 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f  t recent ancesto
2a5f0 72 73 20 69 6e 20 74 69 6d 65 20 28 6f 75 74 20  rs in time (out 
2a600 6f 66 0a 74 68 65 20 74 68 6f 75 73 61 6e 64 73  of.the thousands
2a610 20 61 6e 64 20 74 68 6f 75 73 61 6e 64 73 20 6f   and thousands o
2a620 66 20 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74  f ancestors in t
2a630 68 65 20 77 68 6f 6c 65 20 44 41 47 29 20 66 6f  he whole DAG) fo
2a640 72 0a 63 68 65 63 6b 69 6e 20 22 40 42 41 53 45  r.checkin "@BASE
2a650 4c 49 4e 45 22 2e 20 20 28 41 20 71 75 65 72 79  LINE".  (A query
2a660 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73   similar to this
2a670 20 69 73 20 75 73 65 64 0a 62 79 20 74 68 65 20   is used.by the 
2a680 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
2a690 77 77 77 2e 66 6f 73 73 69 6c 2d 73 63 6d 2e 6f  www.fossil-scm.o
2a6a0 72 67 2f 22 3e 46 6f 73 73 69 6c 3c 2f 61 3e 20  rg/">Fossil</a> 
2a6b0 56 43 53 20 74 6f 0a 73 68 6f 77 20 74 68 65 20  VCS to.show the 
2a6c0 4e 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e  N most recent an
2a6d0 63 65 73 74 6f 72 73 20 6f 66 20 61 20 63 68 65  cestors of a che
2a6e0 63 6b 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ck.  For example
2a6f0 3a 0a 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a  :.<a href="http:
2a700 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67  //www.sqlite.org
2a710 2f 73 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d  /src/timeline?p=
2a720 74 72 75 6e 6b 26 6e 3d 33 30 22 3e 68 74 74 70  trunk&n=30">http
2a730 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72  ://www.sqlite.or
2a740 67 2f 73 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70  g/src/timeline?p
2a750 3d 74 72 75 6e 6b 26 6e 3d 33 30 3c 2f 61 3e 2e  =trunk&n=30</a>.
2a760 29 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  )..<blockquote><
2a770 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53  pre>.WITH RECURS
2a780 49 56 45 0a 20 20 61 6e 63 65 73 74 6f 72 28 69  IVE.  ancestor(i
2a790 64 2c 6d 74 69 6d 65 29 20 41 53 20 28 0a 20 20  d,mtime) AS (.  
2a7a0 20 20 53 45 4c 45 43 54 20 69 64 2c 20 6d 74 69    SELECT id, mti
2a7b0 6d 65 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20  me FROM checkin 
2a7c0 57 48 45 52 45 20 69 64 3d 40 42 41 53 45 4c 49  WHERE id=@BASELI
2a7d0 4e 45 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20  NE.    UNION.   
2a7e0 20 53 45 4c 45 43 54 20 64 65 72 69 76 65 64 66   SELECT derivedf
2a7f0 72 6f 6d 2e 78 66 72 6f 6d 2c 20 63 68 65 63 6b  rom.xfrom, check
2a800 69 6e 2e 6d 74 69 6d 65 0a 20 20 20 20 20 20 46  in.mtime.      F
2a810 52 4f 4d 20 61 6e 63 65 73 74 6f 72 2c 20 64 65  ROM ancestor, de
2a820 72 69 76 65 64 66 72 6f 6d 2c 20 63 68 65 63 6b  rivedfrom, check
2a830 69 6e 0a 20 20 20 20 20 57 48 45 52 45 20 61 6e  in.     WHERE an
2a840 63 65 73 74 6f 72 2e 69 64 3d 64 65 72 69 76 65  cestor.id=derive
2a850 64 66 72 6f 6d 2e 78 74 6f 0a 20 20 20 20 20 20  dfrom.xto.      
2a860 20 41 4e 44 20 63 68 65 63 6b 69 6e 2e 69 64 3d   AND checkin.id=
2a870 64 65 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f  derivedfrom.xfro
2a880 6d 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20  m.     ORDER BY 
2a890 63 68 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45  checkin.mtime DE
2a8a0 53 43 0a 20 20 20 20 20 4c 49 4d 49 54 20 32 30  SC.     LIMIT 20
2a8b0 0a 20 20 29 0a 53 45 4c 45 43 54 20 2a 20 46 52  .  ).SELECT * FR
2a8c0 4f 4d 20 63 68 65 63 6b 69 6e 20 4a 4f 49 4e 20  OM checkin JOIN 
2a8d0 61 6e 63 65 73 74 6f 72 20 55 53 49 4e 47 28 69  ancestor USING(i
2a8e0 64 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  d);.</pre></bloc
2a8f0 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54 68 65  kquote>..<p>.The
2a900 20 22 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b   "ORDER BY check
2a910 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43 22 20 74  in.mtime DESC" t
2a920 65 72 6d 20 69 6e 20 74 68 65 20 72 65 63 75 72  erm in the recur
2a930 73 69 76 65 2d 73 65 6c 65 63 74 20 6d 61 6b 65  sive-select make
2a940 73 0a 74 68 65 20 71 75 65 72 79 20 72 75 6e 20  s.the query run 
2a950 6d 75 63 68 20 66 61 73 74 65 72 20 62 79 20 70  much faster by p
2a960 72 65 76 65 6e 74 69 6e 67 20 69 74 20 66 72 6f  reventing it fro
2a970 6d 20 66 6f 6c 6c 6f 77 69 6e 67 0a 62 72 61 6e  m following.bran
2a980 63 68 65 73 20 74 68 61 74 20 6d 65 72 67 65 20  ches that merge 
2a990 63 68 65 63 6b 69 6e 73 0a 66 72 6f 6d 20 6c 6f  checkins.from lo
2a9a0 6e 67 20 61 67 6f 2e 20 20 54 68 65 20 4f 52 44  ng ago.  The ORD
2a9b0 45 52 20 42 59 20 66 6f 72 63 65 73 20 74 68 65  ER BY forces the
2a9c0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
2a9d0 74 20 74 6f 20 66 6f 63 75 73 0a 6f 6e 20 74 68  t to focus.on th
2a9e0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 63 68  e most recent ch
2a9f0 65 63 6b 69 6e 73 2c 20 74 68 65 20 6f 6e 65 73  eckins, the ones
2aa00 20 77 65 20 77 61 6e 74 2e 20 20 57 69 74 68 6f   we want.  Witho
2aa10 75 74 20 74 68 65 20 4f 52 44 45 52 20 42 59 0a  ut the ORDER BY.
2aa20 6f 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  on the recursive
2aa30 2d 73 65 6c 65 63 74 2c 20 6f 6e 65 20 77 6f 75  -select, one wou
2aa40 6c 64 20 62 65 20 66 6f 72 63 65 64 20 74 6f 20  ld be forced to 
2aa50 63 6f 6d 70 75 74 65 20 74 68 65 20 63 6f 6d 70  compute the comp
2aa60 6c 65 74 65 20 73 65 74 20 6f 66 0a 74 68 6f 75  lete set of.thou
2aa70 73 61 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f  sands of ancesto
2aa80 72 73 2c 20 73 6f 72 74 20 74 68 65 6d 20 61 6c  rs, sort them al
2aa90 6c 20 62 79 20 6d 74 69 6d 65 2c 20 74 68 65 6e  l by mtime, then
2aaa0 20 74 61 6b 65 20 74 68 65 20 74 6f 70 20 74 77   take the top tw
2aab0 65 6e 74 79 2e 0a 54 68 65 20 4f 52 44 45 52 20  enty..The ORDER 
2aac0 42 59 20 65 73 73 65 6e 74 69 61 6c 6c 79 20 73  BY essentially s
2aad0 65 74 73 20 75 70 20 61 20 70 72 69 6f 72 69 74  ets up a priorit
2aae0 79 20 71 75 65 75 65 20 74 68 61 74 0a 66 6f 72  y queue that.for
2aaf0 63 65 73 20 74 68 65 20 72 65 63 75 72 73 69 76  ces the recursiv
2ab00 65 20 71 75 65 72 79 20 74 6f 20 6c 6f 6f 6b 20  e query to look 
2ab10 61 74 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  at the most rece
2ab20 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 66 69 72  nt ancestors fir
2ab30 73 74 2c 0a 61 6c 6c 6f 77 69 6e 67 20 74 68 65  st,.allowing the
2ab40 20 75 73 65 20 6f 66 20 61 20 4c 49 4d 49 54 20   use of a LIMIT 
2ab50 63 6c 61 75 73 65 20 74 6f 20 72 65 73 74 72 69  clause to restri
2ab60 63 74 20 74 68 65 20 73 63 6f 70 65 20 6f 66 20  ct the scope of 
2ab70 74 68 65 0a 71 75 65 72 79 20 74 6f 20 6a 75 73  the.query to jus
2ab80 74 20 74 68 65 20 63 68 65 63 6b 69 6e 73 20 6f  t the checkins o
2ab90 66 20 69 6e 74 65 72 65 73 74 2e 0a 0a 3c 74 63  f interest...<tc
2aba0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 69  l>hd_fragment wi
2abb0 74 68 6f 72 64 65 72 62 79 3c 2f 74 63 6c 3e 0a  thorderby</tcl>.
2abc0 3c 68 34 3e 43 6f 6e 74 72 6f 6c 6c 69 6e 67 20  <h4>Controlling 
2abd0 44 65 70 74 68 2d 46 69 72 73 74 20 56 65 72 73  Depth-First Vers
2abe0 75 73 20 42 72 65 61 64 74 68 2d 46 69 72 73 74  us Breadth-First
2abf0 20 53 65 61 72 63 68 20 4f 66 20 61 20 54 72 65   Search Of a Tre
2ac00 65 0a 55 73 69 6e 67 20 4f 52 44 45 52 20 42 59  e.Using ORDER BY
2ac10 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 6e 20 4f 52 44  </h4>..<p>An ORD
2ac20 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20  ER BY clause on 
2ac30 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
2ac40 6c 65 63 74 20 63 61 6e 20 62 65 20 75 73 65 64  lect can be used
2ac50 20 74 6f 20 63 6f 6e 74 72 6f 6c 0a 77 68 65 74   to control.whet
2ac60 68 65 72 20 74 68 65 20 73 65 61 72 63 68 20 6f  her the search o
2ac70 66 20 61 20 74 72 65 65 20 69 73 20 64 65 70 74  f a tree is dept
2ac80 68 2d 66 69 72 73 74 20 6f 72 20 62 72 65 61 64  h-first or bread
2ac90 74 68 2d 66 69 72 73 74 2e 20 20 54 6f 0a 69 6c  th-first.  To.il
2aca0 6c 75 73 74 72 61 74 65 2c 20 77 65 20 77 69 6c  lustrate, we wil
2acb0 6c 20 75 73 65 20 61 20 76 61 72 69 61 74 69 6f  l use a variatio
2acc0 6e 20 6f 6e 20 74 68 65 20 22 6f 72 67 22 20 74  n on the "org" t
2acd0 61 62 6c 65 20 66 72 6f 6d 20 61 6e 20 65 78 61  able from an exa
2ace0 6d 70 6c 65 0a 61 62 6f 76 65 2c 20 77 69 74 68  mple.above, with
2acf0 6f 75 74 20 74 68 65 20 22 68 65 69 67 68 74 22  out the "height"
2ad00 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 77 69 74   column, and wit
2ad10 68 20 73 6f 6d 65 20 72 65 61 6c 20 64 61 74 61  h some real data
2ad20 20 69 6e 73 65 72 74 65 64 3a 0a 0a 3c 62 6c 6f   inserted:..<blo
2ad30 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
2ad40 45 41 54 45 20 54 41 42 4c 45 20 6f 72 67 28 0a  EATE TABLE org(.
2ad50 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d    name TEXT PRIM
2ad60 41 52 59 20 4b 45 59 2c 0a 20 20 62 6f 73 73 20  ARY KEY,.  boss 
2ad70 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20  TEXT REFERENCES 
2ad80 6f 72 67 0a 29 20 57 49 54 48 4f 55 54 20 52 4f  org.) WITHOUT RO
2ad90 57 49 44 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  WID;.INSERT INTO
2ada0 20 6f 72 67 20 56 41 4c 55 45 53 28 27 41 6c 69   org VALUES('Ali
2adb0 63 65 27 2c 4e 55 4c 4c 29 3b 0a 49 4e 53 45 52  ce',NULL);.INSER
2adc0 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
2add0 53 28 27 42 6f 62 27 2c 27 41 6c 69 63 65 27 29  S('Bob','Alice')
2ade0 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
2adf0 67 20 56 41 4c 55 45 53 28 27 43 69 6e 64 79 27  g VALUES('Cindy'
2ae00 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52  ,'Alice');.INSER
2ae10 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45  T INTO org VALUE
2ae20 53 28 27 44 61 76 65 27 2c 27 42 6f 62 27 29 3b  S('Dave','Bob');
2ae30 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67  .INSERT INTO org
2ae40 20 56 41 4c 55 45 53 28 27 45 6d 6d 61 27 2c 27   VALUES('Emma','
2ae50 42 6f 62 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e  Bob');.INSERT IN
2ae60 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 46  TO org VALUES('F
2ae70 72 65 64 27 2c 27 43 69 6e 64 79 27 29 3b 0a 49  red','Cindy');.I
2ae80 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
2ae90 41 4c 55 45 53 28 27 47 61 69 6c 27 2c 27 43 69  ALUES('Gail','Ci
2aea0 6e 64 79 27 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ndy');.</pre></b
2aeb0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 48  lockquote>..<p>H
2aec0 65 72 65 20 69 73 20 61 20 71 75 65 72 79 20 74  ere is a query t
2aed0 6f 20 73 68 6f 77 20 74 68 65 20 74 72 65 65 20  o show the tree 
2aee0 73 74 72 75 63 74 75 72 65 20 69 6e 20 61 20 62  structure in a b
2aef0 72 65 61 64 74 68 2d 66 69 72 73 74 20 70 61 74  readth-first pat
2af00 74 65 72 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  tern:..<blockquo
2af10 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
2af20 43 55 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f  CURSIVE.  under_
2af30 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c  alice(name,level
2af40 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45  ) AS (.    VALUE
2af50 53 28 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20  S('Alice',0).   
2af60 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53   UNION ALL.    S
2af70 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20  ELECT org.name, 
2af80 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65  under_alice.leve
2af90 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f  l+1.      FROM o
2afa0 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c  rg JOIN under_al
2afb0 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d  ice ON org.boss=
2afc0 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65  under_alice.name
2afd0 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 32  .     ORDER BY 2
2afe0 0a 20 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73  .  ).SELECT subs
2aff0 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c  tr('..........',
2b000 31 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61  1,level*3) || na
2b010 6d 65 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c  me FROM under_al
2b020 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  ice;.</pre></blo
2b030 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
2b040 20 22 4f 52 44 45 52 20 42 59 20 32 22 20 28 77   "ORDER BY 2" (w
2b050 68 69 63 68 20 6d 65 61 6e 73 20 74 68 65 20 73  hich means the s
2b060 61 6d 65 20 61 73 20 22 4f 52 44 45 52 20 42 59  ame as "ORDER BY
2b070 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76   under_alice.lev
2b080 65 6c 2b 31 22 29 0a 63 61 75 73 65 73 20 68 69  el+1").causes hi
2b090 67 68 65 72 20 6c 65 76 65 6c 73 20 69 6e 20 74  gher levels in t
2b0a0 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20  he organization 
2b0b0 63 68 61 72 74 20 28 77 69 74 68 20 73 6d 61 6c  chart (with smal
2b0c0 6c 65 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75  ler "level" valu
2b0d0 65 73 29 0a 74 6f 20 62 65 20 70 72 6f 63 65 73  es).to be proces
2b0e0 73 65 64 20 66 69 72 73 74 2c 20 72 65 73 75 6c  sed first, resul
2b0f0 74 69 6e 67 20 69 6e 20 61 20 62 72 65 61 64 74  ting in a breadt
2b100 68 2d 66 69 72 73 74 20 73 65 61 72 63 68 2e 20  h-first search. 
2b110 20 54 68 65 20 6f 75 74 70 75 74 20 69 73 3a 0a   The output is:.
2b120 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
2b130 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a  e>.Alice....Bob.
2b140 2e 2e 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 44  ...Cindy.......D
2b150 61 76 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e  ave.......Emma..
2b160 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e  .....Fred.......
2b170 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  Gail.</pre></blo
2b180 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 42 75 74  ckquote>..<p>But
2b190 20 69 66 20 77 65 20 63 68 61 6e 67 65 20 74 68   if we change th
2b1a0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
2b1b0 65 20 74 6f 20 61 64 64 20 74 68 65 20 22 44 45  e to add the "DE
2b1c0 53 43 22 20 6d 6f 64 69 66 69 65 72 2c 20 74 68  SC" modifier, th
2b1d0 61 74 20 77 69 6c 6c 0a 63 61 75 73 65 20 6c 6f  at will.cause lo
2b1e0 77 65 72 20 6c 65 76 65 6c 73 20 69 6e 20 74 68  wer levels in th
2b1f0 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 28  e organization (
2b200 77 69 74 68 20 6c 61 72 67 65 72 20 22 6c 65 76  with larger "lev
2b210 65 6c 22 20 76 61 6c 75 65 73 29 20 74 6f 20 62  el" values) to b
2b220 65 0a 70 72 6f 63 65 73 73 65 64 20 66 69 72 73  e.processed firs
2b230 74 20 62 79 20 74 68 65 20 72 65 63 75 72 73 69  t by the recursi
2b240 76 65 2d 73 65 6c 65 63 74 2c 20 72 65 73 75 6c  ve-select, resul
2b250 74 69 6e 67 20 69 6e 20 61 20 64 65 70 74 68 2d  ting in a depth-
2b260 66 69 72 73 74 20 73 65 61 72 63 68 3a 0a 0a 3c  first search:..<
2b270 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
2b280 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
2b290 20 20 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61    under_alice(na
2b2a0 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20  me,level) AS (. 
2b2b0 20 20 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65     VALUES('Alice
2b2c0 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41  ',0).    UNION A
2b2d0 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72  LL.    SELECT or
2b2e0 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c  g.name, under_al
2b2f0 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20  ice.level+1.    
2b300 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20    FROM org JOIN 
2b310 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f  under_alice ON o
2b320 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c  rg.boss=under_al
2b330 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52  ice.name.     OR
2b340 44 45 52 20 42 59 20 32 20 3c 62 3e 44 45 53 43  DER BY 2 <b>DESC
2b350 3c 2f 62 3e 0a 20 20 29 0a 53 45 4c 45 43 54 20  </b>.  ).SELECT 
2b360 73 75 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e  substr('........
2b370 2e 2e 27 2c 31 2c 6c 65 76 65 6c 2a 33 29 20 7c  ..',1,level*3) |
2b380 7c 20 6e 61 6d 65 20 46 52 4f 4d 20 75 6e 64 65  | name FROM unde
2b390 72 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c  r_alice;.</pre><
2b3a0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
2b3b0 3e 54 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74  >The output of t
2b3c0 68 69 73 20 72 65 76 69 73 65 64 20 71 75 65 72  his revised quer
2b3d0 79 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  y is:..<blockquo
2b3e0 74 65 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e  te><pre>.Alice..
2b3f0 2e 2e 42 6f 62 0a 2e 2e 2e 2e 2e 2e 44 61 76 65  ..Bob.......Dave
2b400 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 43  .......Emma....C
2b410 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a  indy.......Fred.
2b420 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65  ......Gail.</pre
2b430 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
2b440 3c 70 3e 57 68 65 6e 20 74 68 65 20 4f 52 44 45  <p>When the ORDE
2b450 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f  R BY clause is o
2b460 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
2b470 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74  recursive-select
2b480 2c 20 74 68 65 0a 71 75 65 75 65 20 62 65 68 61  , the.queue beha
2b490 76 65 73 20 61 73 20 61 20 46 49 46 4f 2c 20 77  ves as a FIFO, w
2b4a0 68 69 63 68 20 72 65 73 75 6c 74 73 20 69 6e 20  hich results in 
2b4b0 61 20 62 72 65 61 64 74 68 2d 66 69 72 73 74 20  a breadth-first 
2b4c0 73 65 61 72 63 68 2e 0a 0a 0a 3c 74 63 6c 3e 68  search....<tcl>h
2b4d0 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61 6e 64 65  d_fragment mande
2b4e0 6c 62 72 6f 74 20 7b 63 6f 6d 70 75 74 65 20 74  lbrot {compute t
2b4f0 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 73 65  he Mandelbrot se
2b500 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 4f 75 74  t}</tcl>.<h4>Out
2b510 6c 61 6e 64 69 73 68 20 52 65 63 75 72 73 69 76  landish Recursiv
2b520 65 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73  e Query Examples
2b530 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h4>..<p>The fo
2b540 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79 20 63 6f  llowing query co
2b550 6d 70 75 74 65 73 20 61 6e 20 61 70 70 72 6f 78  mputes an approx
2b560 69 6d 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 4d  imation of the M
2b570 61 6e 64 65 6c 62 72 6f 74 20 53 65 74 0a 61 6e  andelbrot Set.an
2b580 64 20 6f 75 74 70 75 74 73 20 74 68 65 20 72 65  d outputs the re
2b590 73 75 6c 74 20 61 73 20 41 53 43 49 49 2d 61 72  sult as ASCII-ar
2b5a0 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  t:..<blockquote>
2b5b0 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
2b5c0 53 49 56 45 0a 20 20 78 61 78 69 73 28 78 29 20  SIVE.  xaxis(x) 
2b5d0 41 53 20 28 56 41 4c 55 45 53 28 2d 32 2e 30 29  AS (VALUES(-2.0)
2b5e0 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
2b5f0 54 20 78 2b 30 2e 30 35 20 46 52 4f 4d 20 78 61  T x+0.05 FROM xa
2b600 78 69 73 20 57 48 45 52 45 20 78 26 6c 74 3b 31  xis WHERE x&lt;1
2b610 2e 32 29 2c 0a 20 20 79 61 78 69 73 28 79 29 20  .2),.  yaxis(y) 
2b620 41 53 20 28 56 41 4c 55 45 53 28 2d 31 2e 30 29  AS (VALUES(-1.0)
2b630 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
2b640 54 20 79 2b 30 2e 31 20 46 52 4f 4d 20 79 61 78  T y+0.1 FROM yax
2b650 69 73 20 57 48 45 52 45 20 79 26 6c 74 3b 31 2e  is WHERE y&lt;1.
2b660 30 29 2c 0a 20 20 6d 28 69 74 65 72 2c 20 63 78  0),.  m(iter, cx
2b670 2c 20 63 79 2c 20 78 2c 20 79 29 20 41 53 20 28  , cy, x, y) AS (
2b680 0a 20 20 20 20 53 45 4c 45 43 54 20 30 2c 20 78  .    SELECT 0, x
2b690 2c 20 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52  , y, 0.0, 0.0 FR
2b6a0 4f 4d 20 78 61 78 69 73 2c 20 79 61 78 69 73 0a  OM xaxis, yaxis.
2b6b0 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
2b6c0 20 20 53 45 4c 45 43 54 20 69 74 65 72 2b 31 2c    SELECT iter+1,
2b6d0 20 63 78 2c 20 63 79 2c 20 78 2a 78 2d 79 2a 79   cx, cy, x*x-y*y
2b6e0 20 2b 20 63 78 2c 20 32 2e 30 2a 78 2a 79 20 2b   + cx, 2.0*x*y +
2b6f0 20 63 79 20 46 52 4f 4d 20 6d 20 0a 20 20 20 20   cy FROM m .    
2b700 20 57 48 45 52 45 20 28 78 2a 78 20 2b 20 79 2a   WHERE (x*x + y*
2b710 79 29 20 26 6c 74 3b 20 34 2e 30 20 41 4e 44 20  y) &lt; 4.0 AND 
2b720 69 74 65 72 26 6c 74 3b 32 38 0a 20 20 29 2c 0a  iter&lt;28.  ),.
2b730 20 20 6d 32 28 69 74 65 72 2c 20 63 78 2c 20 63    m2(iter, cx, c
2b740 79 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  y) AS (.    SELE
2b750 43 54 20 6d 61 78 28 69 74 65 72 29 2c 20 63 78  CT max(iter), cx
2b760 2c 20 63 79 20 46 52 4f 4d 20 6d 20 47 52 4f 55  , cy FROM m GROU
2b770 50 20 42 59 20 63 78 2c 20 63 79 0a 20 20 29 2c  P BY cx, cy.  ),
2b780 0a 20 20 61 28 74 29 20 41 53 20 28 0a 20 20 20  .  a(t) AS (.   
2b790 20 53 45 4c 45 43 54 20 67 72 6f 75 70 5f 63 6f   SELECT group_co
2b7a0 6e 63 61 74 28 20 73 75 62 73 74 72 28 27 20 2e  ncat( substr(' .
2b7b0 2b 2a 23 27 2c 20 31 2b 6d 69 6e 28 69 74 65 72  +*#', 1+min(iter
2b7c0 2f 37 2c 34 29 2c 20 31 29 2c 20 27 27 29 20 0a  /7,4), 1), '') .
2b7d0 20 20 20 20 46 52 4f 4d 20 6d 32 20 47 52 4f 55      FROM m2 GROU
2b7e0 50 20 42 59 20 63 79 0a 20 20 29 0a 53 45 4c 45  P BY cy.  ).SELE
2b7f0 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  CT group_concat(
2b800 72 74 72 69 6d 28 74 29 2c 78 27 30 61 27 29 20  rtrim(t),x'0a') 
2b810 46 52 4f 4d 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f  FROM a;.</pre></
2b820 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
2b830 49 6e 20 74 68 69 73 20 71 75 65 72 79 2c 20 74  In this query, t
2b840 68 65 20 22 78 61 78 69 73 22 20 61 6e 64 20 22  he "xaxis" and "
2b850 79 61 78 69 73 22 20 43 54 45 73 20 64 65 66 69  yaxis" CTEs defi
2b860 6e 65 20 74 68 65 20 67 72 69 64 20 6f 66 20 70  ne the grid of p
2b870 6f 69 6e 74 73 20 66 6f 72 0a 77 68 69 63 68 20  oints for.which 
2b880 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53  the Mandelbrot S
2b890 65 74 20 77 69 6c 6c 20 62 65 20 61 70 70 72 6f  et will be appro
2b8a0 78 69 6d 61 74 65 64 2e 20 20 45 61 63 68 20 72  ximated.  Each r
2b8b0 6f 77 20 69 6e 20 74 68 65 0a 22 6d 28 69 74 65  ow in the."m(ite
2b8c0 72 2c 63 78 2c 63 79 2c 78 2c 79 29 22 20 43 54  r,cx,cy,x,y)" CT
2b8d0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 66 74  E means that aft
2b8e0 65 72 20 22 69 74 65 72 22 20 69 74 65 72 61 74  er "iter" iterat
2b8f0 69 6f 6e 73 2c 20 74 68 65 20 4d 61 6e 64 65 6c  ions, the Mandel
2b900 62 72 6f 74 0a 69 74 65 72 61 74 69 6f 6e 20 73  brot.iteration s
2b910 74 61 72 74 69 6e 67 20 61 74 20 63 78 2c 63 79  tarting at cx,cy
2b920 20 68 61 73 20 72 65 61 63 68 65 64 20 70 6f 69   has reached poi
2b930 6e 74 20 78 2c 79 2e 20 20 54 68 65 20 6e 75 6d  nt x,y.  The num
2b940 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
2b950 73 0a 69 6e 20 74 68 69 73 20 65 78 61 6d 70 6c  s.in this exampl
2b960 65 20 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20  e is limited to 
2b970 32 38 20 28 77 68 69 63 68 20 73 65 76 65 72 65  28 (which severe
2b980 6c 79 20 6c 69 6d 69 74 73 20 74 68 65 20 72 65  ly limits the re
2b990 73 6f 6c 75 74 69 6f 6e 20 6f 66 0a 74 68 65 20  solution of.the 
2b9a0 63 6f 6d 70 75 74 61 74 69 6f 6e 2c 20 62 75 74  computation, but
2b9b0 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 66   is sufficient f
2b9c0 6f 72 20 6c 6f 77 2d 72 65 73 6f 6c 75 74 69 6f  or low-resolutio
2b9d0 6e 20 41 53 43 49 49 2d 61 72 74 20 6f 75 74 70  n ASCII-art outp
2b9e0 75 74 29 2e 0a 54 68 65 20 22 6d 32 28 69 74 65  ut)..The "m2(ite
2b9f0 72 2c 63 78 2c 63 79 29 22 20 43 54 45 20 68 6f  r,cx,cy)" CTE ho
2ba00 6c 64 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  lds the maximum 
2ba10 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
2ba20 69 6f 6e 73 20 72 65 61 63 68 65 64 20 77 68 65  ions reached whe
2ba30 6e 0a 73 74 61 72 74 69 6e 67 20 61 74 20 70 6f  n.starting at po
2ba40 69 6e 74 20 63 78 2c 63 79 2e 0a 46 69 6e 61 6c  int cx,cy..Final
2ba50 6c 79 2c 20 65 61 63 68 20 72 6f 77 20 69 6e 20  ly, each row in 
2ba60 74 68 65 20 22 61 28 74 29 22 20 43 54 45 20 68  the "a(t)" CTE h
2ba70 6f 6c 64 73 20 61 20 73 74 72 69 6e 67 20 0a 77  olds a string .w
2ba80 68 69 63 68 20 69 73 20 61 20 73 69 6e 67 6c 65  hich is a single
2ba90 20 6c 69 6e 65 20 6f 66 20 74 68 65 20 6f 75 74   line of the out
2baa0 70 75 74 20 41 53 43 49 49 2d 61 72 74 2e 0a 54  put ASCII-art..T
2bab0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2bac0 65 6e 74 20 61 74 20 74 68 65 20 65 6e 64 20 6a  ent at the end j
2bad0 75 73 74 20 71 75 65 72 69 65 73 20 74 68 65 20  ust queries the 
2bae0 22 61 22 20 43 54 45 20 74 6f 0a 72 65 74 72 69  "a" CTE to.retri
2baf0 65 76 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66  eve all lines of
2bb00 20 41 53 43 49 49 2d 61 72 74 2c 20 6f 6e 65 20   ASCII-art, one 
2bb10 62 79 20 6f 6e 65 2e 0a 0a 3c 70 3e 52 75 6e 6e  by one...<p>Runn
2bb20 69 6e 67 20 74 68 65 20 71 75 65 72 79 20 61 62  ing the query ab
2bb30 6f 76 65 20 69 6e 20 61 6e 20 53 51 4c 69 74 65  ove in an SQLite
2bb40 20 5b 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73   [command-line s
2bb50 68 65 6c 6c 5d 20 72 65 73 75 6c 74 73 0a 69 6e  hell] results.in
2bb60 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f   the following o
2bb70 75 74 70 75 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  utput:..<blockqu
2bb80 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 20  ote><pre>.      
2bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
2bbb0 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20 20  ..#.            
2bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbd0 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20         ..#*...  
2bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
2bc00 2e 2b 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20  .+####+..       
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23       .......+###
2bc30 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20  #....   +.      
2bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc50 20 20 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23       ..##+*#####
2bc60 23 23 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20  #####+.++++.    
2bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc80 20 20 20 20 20 20 2e 2b 2e 23 23 23 23 23 23 23        .+.#######
2bc90 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
2bca0 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
2bcb0 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23  .........+######
2bcc0 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #############+.+
2bcd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  .              .
2bce0 2e 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23  .++..#.....*####
2bcf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd00 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
2bd10 20 2e 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23   ...+#######++##
2bd20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd30 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20  #####..         
2bd40 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23   ....+*#########
2bd50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd60 23 23 23 23 23 23 23 2e 0a 20 23 23 23 23 23 23  #######.. ######
2bd70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd90 23 23 23 23 23 23 23 2e 2e 2e 0a 20 20 20 20 20  #######....     
2bda0 20 20 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23       ....+*#####
2bdb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bdc0 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20  ###########..   
2bdd0 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23            ...+##
2bde0 23 23 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23  #####++#########
2bdf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a  ##############..
2be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
2be10 2b 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23  ++..#.....*#####
2be20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2be30 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2be40 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23   .............+#
2be50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2be60 23 23 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20  ##+.+.          
2be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be80 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23 23  .+.#############
2be90 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20  #####+..        
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2beb0 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23     ..##+*#######
2bec0 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20  ###+.++++.      
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bee0 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23        .......+##
2bef0 23 23 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20  ##....   +.     
2bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf10 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23              ..+#
2bf20 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20  ###+..          
2bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf40 20 20 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a           ..#*...
2bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf70 20 20 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20      ....#.      
2bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 2e                +.
2bfa0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
2bfb0 6f 74 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ote>..<tcl>hd_fr
2bfc0 61 67 6d 65 6e 74 20 73 75 64 6f 6b 75 20 7b 73  agment sudoku {s
2bfd0 6f 6c 76 65 20 53 75 64 6f 6b 75 20 70 75 7a 7a  olve Sudoku puzz
2bfe0 6c 65 73 7d 20 3c 2f 74 63 6c 3e 0a 3c 70 3e 54  les} </tcl>.<p>T
2bff0 68 69 73 20 6e 65 78 74 20 71 75 65 72 79 20 73  his next query s
2c000 6f 6c 76 65 73 20 61 20 53 75 64 6f 6b 75 20 70  olves a Sudoku p
2c010 75 7a 7a 6c 65 2e 20 20 54 68 65 20 73 74 61 74  uzzle.  The stat
2c020 65 20 6f 66 20 74 68 65 20 70 75 7a 7a 6c 65 20  e of the puzzle 
2c030 69 73 0a 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is.defined by an
2c040 20 38 31 2d 63 68 61 72 61 63 74 65 72 20 73 74   81-character st
2c050 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72  ring formed by r
2c060 65 61 64 69 6e 67 20 65 6e 74 72 69 65 73 20 66  eading entries f
2c070 72 6f 6d 20 74 68 65 0a 70 75 7a 7a 6c 65 20 62  rom the.puzzle b
2c080 6f 78 20 72 6f 77 20 62 79 20 72 6f 77 20 66 72  ox row by row fr
2c090 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
2c0a0 20 61 6e 64 20 74 68 65 6e 20 66 72 6f 6d 20 74   and then from t
2c0b0 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 2e 0a 42 6c  op to bottom..Bl
2c0c0 61 6e 6b 20 73 71 75 61 72 65 73 20 69 6e 20 74  ank squares in t
2c0d0 68 65 20 70 75 7a 7a 6c 65 20 61 72 65 20 64 65  he puzzle are de
2c0e0 6e 6f 74 65 64 20 62 79 20 61 20 22 2e 22 20 63  noted by a "." c
2c0f0 68 61 72 61 63 74 65 72 2e 20 20 0a 54 68 75 73  haracter.  .Thus
2c100 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
2c110 67 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  g:..<blockquote>
2c120 0a 35 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35  .53..7....6..195
2c130 2e 2e 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e  ....98....6.8...
2c140 36 2e 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e  6...34..8.3..17.
2c150 2e 2e 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e  ..2...6.6....28.
2c160 2e 2e 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e  ...419..5....8..
2c170 37 39 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  79.</blockquote>
2c180 0a 0a 3c 70 3e 43 6f 72 72 65 73 70 6f 6e 64 73  ..<p>Corresponds
2c190 20 74 6f 20 61 20 70 75 7a 7a 6c 65 20 6c 69 6b   to a puzzle lik
2c1a0 65 20 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  e this:..<blockq
2c1b0 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  uote>.<table bor
2c1c0 64 65 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 64  der="1" cellpadd
2c1d0 69 6e 67 3d 22 35 22 3e 0a 3c 74 72 3e 3c 74 64  ing="5">.<tr><td
2c1e0 3e 35 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e  >5<td>3<td> <td>
2c1f0 20 3c 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20   <td>7<td> <td> 
2c200 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74  <td> <td>.<tr><t
2c210 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>6<td> <td> <td
2c220 3e 31 3c 74 64 3e 39 3c 74 64 3e 35 3c 74 64 3e  >1<td>9<td>5<td>
2c230 20 3c 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c   <td> <td>.<tr><
2c240 74 64 3e 20 3c 74 64 3e 39 3c 74 64 3e 38 3c 74  td> <td>9<td>8<t
2c250 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
2c260 3e 20 3c 74 64 3e 36 3c 74 64 3e 0a 3c 74 72 3e  > <td>6<td>.<tr>
2c270 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>8<td> <td> <
2c280 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74  td> <td>6<td> <t
2c290 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 33 0a 3c 74  d> <td> <td>3.<t
2c2a0 72 3e 3c 74 64 3e 34 3c 74 64 3e 20 3c 74 64 3e  r><td>4<td> <td>
2c2b0 20 3c 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 33   <td>8<td> <td>3
2c2c0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 0a  <td> <td> <td>1.
2c2d0 3c 74 72 3e 3c 74 64 3e 37 3c 74 64 3e 20 3c 74  <tr><td>7<td> <t
2c2e0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 32 3c 74 64  d> <td> <td>2<td
2c2f0 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  > <td> <td> <td>
2c300 36 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 36  6.<tr><td> <td>6
2c310 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
2c320 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 38 3c 74  td> <td>2<td>8<t
2c330 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e  d>.<tr><td> <td>
2c340 20 3c 74 64 3e 20 3c 74 64 3e 34 3c 74 64 3e 31   <td> <td>4<td>1
2c350 3c 74 64 3e 39 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>9<td> <td> <
2c360 74 64 3e 35 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74  td>5.<tr><td> <t
2c370 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
2c380 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >8<td> <td> <td>
2c390 37 3c 74 64 3e 39 0a 3c 2f 74 61 62 6c 65 3e 0a  7<td>9.</table>.
2c3a0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
2c3b0 70 3e 54 68 69 73 20 69 73 20 74 68 65 20 71 75  p>This is the qu
2c3c0 65 72 79 20 74 68 61 74 20 73 6f 6c 76 65 73 20  ery that solves 
2c3d0 74 68 65 20 70 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c  the puzzle:..<bl
2c3e0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
2c3f0 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
2c400 69 6e 70 75 74 28 73 75 64 29 20 41 53 20 28 0a  input(sud) AS (.
2c410 20 20 20 20 56 41 4c 55 45 53 28 27 35 33 2e 2e      VALUES('53..
2c420 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39  7....6..195....9
2c430 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33  8....6.8...6...3
2c440 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e  4..8.3..17...2..
2c450 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31  .6.6....28....41
2c460 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 27 29 0a  9..5....8..79').
2c470 20 20 29 2c 0a 20 20 64 69 67 69 74 73 28 7a 2c    ),.  digits(z,
2c480 20 6c 70 29 20 41 53 20 28 0a 20 20 20 20 56 41   lp) AS (.    VA
2c490 4c 55 45 53 28 27 31 27 2c 20 31 29 0a 20 20 20  LUES('1', 1).   
2c4a0 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
2c4b0 54 0a 20 20 20 20 43 41 53 54 28 6c 70 2b 31 20  T.    CAST(lp+1 
2c4c0 41 53 20 54 45 58 54 29 2c 20 6c 70 2b 31 20 46  AS TEXT), lp+1 F
2c4d0 52 4f 4d 20 64 69 67 69 74 73 20 57 48 45 52 45  ROM digits WHERE
2c4e0 20 6c 70 26 6c 74 3b 39 0a 20 20 29 2c 0a 20 20   lp&lt;9.  ),.  
2c4f0 78 28 73 2c 20 69 6e 64 29 20 41 53 20 28 0a 20  x(s, ind) AS (. 
2c500 20 20 20 53 45 4c 45 43 54 20 73 75 64 2c 20 69     SELECT sud, i
2c510 6e 73 74 72 28 73 75 64 2c 20 27 2e 27 29 20 46  nstr(sud, '.') F
2c520 52 4f 4d 20 69 6e 70 75 74 0a 20 20 20 20 55 4e  ROM input.    UN
2c530 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45  ION ALL.    SELE
2c540 43 54 0a 20 20 20 20 20 20 73 75 62 73 74 72 28  CT.      substr(
2c550 73 2c 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20  s, 1, ind-1) || 
2c560 7a 20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69  z || substr(s, i
2c570 6e 64 2b 31 29 2c 0a 20 20 20 20 20 20 69 6e 73  nd+1),.      ins
2c580 74 72 28 20 73 75 62 73 74 72 28 73 2c 20 31 2c  tr( substr(s, 1,
2c590 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20   ind-1) || z || 
2c5a0 73 75 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29  substr(s, ind+1)
2c5b0 2c 20 27 2e 27 20 29 0a 20 20 20 20 20 46 52 4f  , '.' ).     FRO
2c5c0 4d 20 78 2c 20 64 69 67 69 74 73 20 41 53 20 7a  M x, digits AS z
2c5d0 0a 20 20 20 20 57 48 45 52 45 20 69 6e 64 3e 30  .    WHERE ind>0
2c5e0 0a 20 20 20 20 20 20 41 4e 44 20 4e 4f 54 20 45  .      AND NOT E
2c5f0 58 49 53 54 53 20 28 0a 20 20 20 20 20 20 20 20  XISTS (.        
2c600 20 20 20 20 53 45 4c 45 43 54 20 31 0a 20 20 20      SELECT 1.   
2c610 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20             FROM 
2c620 64 69 67 69 74 73 20 41 53 20 6c 70 0a 20 20 20  digits AS lp.   
2c630 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20            WHERE 
2c640 7a 2e 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20  z.z = substr(s, 
2c650 28 28 69 6e 64 2d 31 29 2f 39 29 2a 39 20 2b 20  ((ind-1)/9)*9 + 
2c660 6c 70 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20  lp, 1).         
2c670 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20         OR z.z = 
2c680 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d  substr(s, ((ind-
2c690 31 29 25 39 29 20 2b 20 28 6c 70 2d 31 29 2a 39  1)%9) + (lp-1)*9
2c6a0 20 2b 20 31 2c 20 31 29 0a 20 20 20 20 20 20 20   + 1, 1).       
2c6b0 20 20 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20           OR z.z 
2c6c0 3d 20 73 75 62 73 74 72 28 73 2c 20 28 28 28 69  = substr(s, (((i
2c6d0 6e 64 2d 31 29 2f 33 29 20 25 20 33 29 20 2a 20  nd-1)/3) % 3) * 
2c6e0 33 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3.              
2c6f0 20 20 20 20 20 20 20 20 20 20 2b 20 28 28 69 6e            + ((in
2c700 64 2d 31 29 2f 32 37 29 20 2a 20 32 37 20 2b 20  d-1)/27) * 27 + 
2c710 6c 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  lp.             
2c720 20 20 20 20 20 20 20 20 20 20 20 2b 20 28 28 6c             + ((l
2c730 70 2d 31 29 20 2f 20 33 29 20 2a 20 36 2c 20 31  p-1) / 3) * 6, 1
2c740 29 0a 20 20 20 20 20 20 20 20 20 29 0a 20 20 29  ).         ).  )
2c750 0a 53 45 4c 45 43 54 20 73 20 46 52 4f 4d 20 78  .SELECT s FROM x
2c760 20 57 48 45 52 45 20 69 6e 64 3d 30 3b 0a 3c 2f   WHERE ind=0;.</
2c770 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
2c780 3e 0a 0a 3c 70 3e 54 68 65 20 22 69 6e 70 75 74  >..<p>The "input
2c790 22 20 43 54 45 20 64 65 66 69 6e 65 73 20 74 68  " CTE defines th
2c7a0 65 20 69 6e 70 75 74 20 70 75 7a 7a 6c 65 2e 0a  e input puzzle..
2c7b0 54 68 65 20 22 64 69 67 69 74 73 22 20 43 54 45  The "digits" CTE
2c7c0 20 64 65 66 69 6e 65 73 20 61 20 74 61 62 6c 65   defines a table
2c7d0 20 74 68 61 74 20 68 6f 6c 64 73 20 61 6c 6c 20   that holds all 
2c7e0 64 69 67 69 74 73 20 62 65 74 77 65 65 6e 20 31  digits between 1
2c7f0 20 61 6e 64 20 39 2e 0a 54 68 65 20 77 6f 72 6b   and 9..The work
2c800 20 6f 66 20 73 6f 6c 76 69 6e 67 20 74 68 65 20   of solving the 
2c810 70 75 7a 7a 6c 65 20 69 73 20 75 6e 64 65 72 74  puzzle is undert
2c820 61 6b 65 6e 20 62 79 20 74 68 65 20 22 78 22 20  aken by the "x" 
2c830 43 54 45 2e 0a 41 6e 20 65 6e 74 72 79 20 69 6e  CTE..An entry in
2c840 20 78 28 73 2c 69 6e 64 29 20 6d 65 61 6e 73 20   x(s,ind) means 
2c850 74 68 61 74 20 74 68 65 20 38 31 2d 63 68 61 72  that the 81-char
2c860 61 63 74 65 72 20 73 74 72 69 6e 67 20 22 73 22  acter string "s"
2c870 20 69 73 20 61 20 76 61 6c 69 64 0a 73 75 64 6f   is a valid.sudo
2c880 6b 75 20 70 75 7a 7a 6c 65 20 28 69 74 20 68 61  ku puzzle (it ha
2c890 73 20 6e 6f 20 63 6f 6e 66 6c 69 63 74 73 29 20  s no conflicts) 
2c8a0 61 6e 64 20 74 68 61 74 20 74 68 65 20 66 69 72  and that the fir
2c8b0 73 74 20 75 6e 6b 6e 6f 77 6e 20 63 68 61 72 61  st unknown chara
2c8c0 63 74 65 72 0a 69 73 20 61 74 20 70 6f 73 69 74  cter.is at posit
2c8d0 69 6f 6e 20 22 69 6e 64 22 2c 20 6f 72 20 69 6e  ion "ind", or in
2c8e0 64 3d 3d 30 20 69 66 20 61 6c 6c 20 63 68 61 72  d==0 if all char
2c8f0 61 63 74 65 72 20 70 6f 73 69 74 69 6f 6e 73 20  acter positions 
2c900 61 72 65 20 66 69 6c 6c 65 64 20 69 6e 2e 0a 54  are filled in..T
2c910 68 65 20 67 6f 61 6c 2c 20 74 68 65 6e 2c 20 69  he goal, then, i
2c920 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 65 6e 74  s to compute ent
2c930 72 69 65 73 20 66 6f 72 20 22 78 22 20 77 69 74  ries for "x" wit
2c940 68 20 61 6e 20 22 69 6e 64 22 20 6f 66 20 30 2e  h an "ind" of 0.
2c950 0a 0a 3c 70 3e 54 68 65 20 73 6f 6c 76 65 72 20  ..<p>The solver 
2c960 77 6f 72 6b 73 20 62 79 20 61 64 64 69 6e 67 20  works by adding 
2c970 6e 65 77 20 65 6e 74 72 69 65 73 20 74 6f 20 74  new entries to t
2c980 68 65 20 22 78 22 20 72 65 63 75 72 73 69 76 65  he "x" recursive
2c990 20 74 61 62 6c 65 2e 0a 47 69 76 65 6e 20 70 72   table..Given pr
2c9a0 69 6f 72 20 65 6e 74 72 69 65 73 2c 20 74 68 65  ior entries, the
2c9b0 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63   recursive-selec
2c9c0 74 20 74 72 69 65 73 20 74 6f 20 66 69 6c 6c 20  t tries to fill 
2c9d0 69 6e 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 0a  in a single new.
2c9e0 70 6f 73 69 74 69 6f 6e 20 77 69 74 68 20 61 6c  position with al
2c9f0 6c 20 76 61 6c 75 65 73 20 62 65 74 77 65 65 6e  l values between
2ca00 20 31 20 61 6e 64 20 39 20 74 68 61 74 20 61 63   1 and 9 that ac
2ca10 74 75 61 6c 6c 79 20 77 6f 72 6b 20 69 6e 20 74  tually work in t
2ca20 68 61 74 0a 70 6f 73 69 74 69 6f 6e 2e 20 20 54  hat.position.  T
2ca30 68 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 22  he complicated "
2ca40 4e 4f 54 20 45 58 49 53 54 53 22 20 73 75 62 71  NOT EXISTS" subq
2ca50 75 65 72 79 20 69 73 20 74 68 65 20 6d 61 67 69  uery is the magi
2ca60 63 20 74 68 61 74 0a 66 69 67 75 72 65 73 20 6f  c that.figures o
2ca70 75 74 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ut whether or no
2ca80 74 20 65 61 63 68 20 63 61 6e 64 69 64 61 74 65  t each candidate
2ca90 20 22 73 22 20 73 74 72 69 6e 67 20 69 73 20 61   "s" string is a
2caa0 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75   valid.sudoku pu
2cab0 7a 7a 6c 65 20 6f 72 20 6e 6f 74 2e 0a 0a 3c 70  zzle or not...<p
2cac0 3e 54 68 65 20 66 69 6e 61 6c 20 61 6e 73 77 65  >The final answe
2cad0 72 20 69 73 20 66 6f 75 6e 64 20 62 79 20 6c 6f  r is found by lo
2cae0 6f 6b 69 6e 67 20 66 6f 72 20 61 20 73 74 72 69  oking for a stri
2caf0 6e 67 20 77 69 74 68 20 69 6e 64 3d 3d 30 2e 0a  ng with ind==0..
2cb00 49 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  If the original 
2cb10 73 75 64 6f 6b 75 20 70 72 6f 62 6c 65 6d 20 64  sudoku problem d
2cb20 69 64 20 6e 6f 74 20 68 61 76 65 20 61 20 75 6e  id not have a un
2cb30 69 71 75 65 20 73 6f 6c 75 74 69 6f 6e 2c 20 74  ique solution, t
2cb40 68 65 6e 0a 74 68 65 20 71 75 65 72 79 20 77 69  hen.the query wi
2cb50 6c 6c 20 72 65 74 75 72 6e 20 61 6c 6c 20 70 6f  ll return all po
2cb60 73 73 69 62 6c 65 20 73 6f 6c 75 74 69 6f 6e 73  ssible solutions
2cb70 2e 20 20 49 66 20 74 68 65 20 6f 72 69 67 69 6e  .  If the origin
2cb80 61 6c 20 70 72 6f 62 6c 65 6d 0a 77 61 73 20 75  al problem.was u
2cb90 6e 73 6f 6c 76 61 62 6c 65 2c 20 74 68 65 6e 20  nsolvable, then 
2cba0 6e 6f 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20  no rows will be 
2cbb0 72 65 74 75 72 6e 65 64 2e 20 20 49 6e 20 74 68  returned.  In th
2cbc0 69 73 20 63 61 73 65 2c 20 74 68 65 20 75 6e 69  is case, the uni
2cbd0 71 75 65 0a 61 6e 73 77 65 72 20 69 73 3a 0a 0a  que.answer is:..
2cbe0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 34  <blockquote>.534
2cbf0 36 37 38 39 31 32 36 37 32 31 39 35 33 34 38 31  6789126721953481
2cc00 39 38 33 34 32 35 36 37 38 35 39 37 36 31 34 32  9834256785976142
2cc10 33 34 32 36 38 35 33 37 39 31 37 31 33 39 32 34  3426853791713924
2cc20 38 35 36 39 36 31 35 33 37 32 38 34 32 38 37 34  8569615372842874
2cc30 31 39 36 33 35 33 34 35 32 38 36 31 37 39 0a 3c  19635345286179.<
2cc40 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
2cc50 3e 54 68 65 20 73 6f 6c 75 74 69 6f 6e 20 77 61  >The solution wa
2cc60 73 20 63 6f 6d 70 75 74 65 64 20 69 6e 20 6c 65  s computed in le
2cc70 73 73 20 74 68 61 6e 20 33 30 30 20 6d 69 6c 6c  ss than 300 mill
2cc80 69 73 65 63 6f 6e 64 73 20 6f 6e 20 61 20 6d 6f  iseconds on a mo
2cc90 64 65 72 6e 0a 77 6f 72 6b 73 74 61 74 69 6f 6e  dern.workstation
2cca0 2e 0a 0a 3c 68 33 3e 4c 69 6d 69 74 61 74 69 6f  ...<h3>Limitatio
2ccb0 6e 73 20 41 6e 64 20 43 61 76 65 61 74 73 3c 2f  ns And Caveats</
2ccc0 68 33 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  h3>..<ul>.<li><p
2ccd0 3e 0a 54 68 65 20 57 49 54 48 20 63 6c 61 75 73  >.The WITH claus
2cce0 65 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  e cannot be used
2ccf0 20 77 69 74 68 69 6e 20 61 20 5b 43 52 45 41 54   within a [CREAT
2cd00 45 20 54 52 49 47 47 45 52 5d 2e 0a 3c 6c 69 3e  E TRIGGER]..<li>
2cd10 3c 70 3e 0a 54 68 65 20 57 49 54 48 20 63 6c 61  <p>.The WITH cla
2cd20 75 73 65 20 6d 75 73 74 20 61 70 70 65 61 72 20  use must appear 
2cd30 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
2cd40 20 6f 66 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20   of a top-level 
2cd50 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
2cd60 6e 74 0a 6f 72 20 61 74 20 74 68 65 20 62 65 67  nt.or at the beg
2cd70 69 6e 6e 69 6e 67 20 6f 66 20 61 20 73 75 62 71  inning of a subq
2cd80 75 65 72 79 2e 20 20 54 68 65 20 57 49 54 48 20  uery.  The WITH 
2cd90 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65  clause cannot be
2cda0 20 70 72 65 70 65 6e 64 65 64 20 74 6f 0a 74 68   prepended to.th
2cdb0 65 20 73 65 63 6f 6e 64 20 6f 72 20 73 75 62 73  e second or subs
2cdc0 65 71 75 65 6e 74 20 53 45 4c 45 43 54 20 73 74  equent SELECT st
2cdd0 61 74 65 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f  atement of a [co
2cde0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2e 0a  mpound select]..
2cdf0 3c 6c 69 3e 3c 70 3e 0a 54 68 65 20 53 51 4c 3a  <li><p>.The SQL:
2ce00 31 39 39 39 20 73 70 65 63 20 72 65 71 75 69 72  1999 spec requir
2ce10 65 73 20 74 68 61 74 20 74 68 65 20 52 45 43 55  es that the RECU
2ce20 52 53 49 56 45 20 6b 65 79 77 6f 72 64 20 66 6f  RSIVE keyword fo
2ce30 6c 6c 6f 77 20 57 49 54 48 20 69 6e 20 61 6e 79  llow WITH in any
2ce40 0a 57 49 54 48 20 63 6c 61 75 73 65 20 74 68 61  .WITH clause tha
2ce50 74 20 69 6e 63 6c 75 64 65 73 20 61 20 72 65 63  t includes a rec
2ce60 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61  ursive common ta
2ce70 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  ble expression. 
2ce80 20 48 6f 77 65 76 65 72 2c 20 66 6f 72 0a 63 6f   However, for.co
2ce90 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68  mpatibility with
2cea0 20 53 71 6c 53 65 72 76 65 72 20 61 6e 64 20 4f   SqlServer and O
2ceb0 72 61 63 6c 65 2c 20 53 51 4c 69 74 65 20 64 6f  racle, SQLite do
2cec0 65 73 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 74  es not enforce t
2ced0 68 69 73 20 72 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a  his rule..</ul>.
2cee0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
2cef0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cf00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cf10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cf20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cf30 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53  ######.Section S
2cf40 45 4c 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45  ELECT select {SE
2cf50 4c 45 43 54 20 71 75 65 72 79 7d 0a 0a 52 65 63  LECT query}..Rec
2cf60 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
2cf70 72 61 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 0a  ram select-stmt.
2cf80 3c 2f 74 63 6c 3e 0a 0a 0a 3c 70 3e 54 68 65 20  </tcl>...<p>The 
2cf90 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2cfa0 20 69 73 20 75 73 65 64 20 74 6f 20 71 75 65 72   is used to quer
2cfb0 79 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  y the database. 
2cfc0 20 54 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 61   The.result of a
2cfd0 20 53 45 4c 45 43 54 20 69 73 20 7a 65 72 6f 20   SELECT is zero 
2cfe0 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20  or more rows of 
2cff0 64 61 74 61 20 77 68 65 72 65 20 65 61 63 68 20  data where each 
2d000 72 6f 77 0a 68 61 73 20 61 20 66 69 78 65 64 20  row.has a fixed 
2d010 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
2d020 73 2e 20 20 41 20 53 45 4c 45 43 54 20 73 74 61  s.  A SELECT sta
2d030 74 65 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20  tement does not 
2d040 6d 61 6b 65 0a 61 6e 79 20 63 68 61 6e 67 65 73  make.any changes
2d050 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2d060 2e 0a 0a 3c 70 3e 54 68 65 20 22 5b 73 65 6c 65  ...<p>The "[sele
2d070 63 74 2d 73 74 6d 74 5d 22 20 73 79 6e 74 61 78  ct-stmt]" syntax
2d080 20 64 69 61 67 72 61 6d 20 61 62 6f 76 65 20 61   diagram above a
2d090 74 74 65 6d 70 74 73 20 74 6f 20 73 68 6f 77 20  ttempts to show 
2d0a0 61 73 20 6d 75 63 68 20 6f 66 20 74 68 65 0a 53  as much of the.S
2d0b0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2d0c0 73 79 6e 74 61 78 20 61 73 20 70 6f 73 73 69 62  syntax as possib
2d0d0 6c 65 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 64  le in a single d
2d0e0 69 61 67 72 61 6d 2c 20 62 65 63 61 75 73 65 20  iagram, because 
2d0f0 73 6f 6d 65 20 72 65 61 64 65 72 73 0a 66 69 6e  some readers.fin
2d100 64 20 74 68 61 74 20 68 65 6c 70 66 75 6c 2e 20  d that helpful. 
2d110 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 22   The following "
2d120 5b 66 61 63 74 6f 72 65 64 2d 73 65 6c 65 63 74  [factored-select
2d130 2d 73 74 6d 74 5d 22 20 69 73 20 61 6e 20 61 6c  -stmt]" is an al
2d140 74 65 72 6e 61 74 69 76 65 0a 73 79 6e 74 61 78  ternative.syntax
2d150 20 64 69 61 67 72 61 6d 73 20 74 68 61 74 20 65   diagrams that e
2d160 78 70 72 65 73 73 65 73 20 74 68 65 20 73 61 6d  xpresses the sam
2d170 65 20 73 79 6e 74 61 78 20 62 75 74 20 74 72 69  e syntax but tri
2d180 65 73 20 74 6f 20 62 72 65 61 6b 20 74 68 65 20  es to break the 
2d190 73 79 6e 74 61 78 20 0a 64 6f 77 6e 20 69 6e 74  syntax .down int
2d1a0 6f 20 73 6d 61 6c 6c 65 72 20 63 68 75 6e 6b 73  o smaller chunks
2d1b0 2e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69  ...<tcl>.Recursi
2d1c0 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
2d1d0 2d 2d 69 6e 69 74 69 61 6c 6c 79 2d 68 69 64 64  --initially-hidd
2d1e0 65 6e 20 66 61 63 74 6f 72 65 64 2d 73 65 6c 65  en factored-sele
2d1f0 63 74 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63  ct-stmt select-c
2d200 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e  ore.</tcl>..<p>N
2d210 6f 74 65 20 74 68 61 74 20 74 68 65 72 65 20 61  ote that there a
2d220 72 65 20 70 61 74 68 73 20 74 68 72 6f 75 67 68  re paths through
2d230 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
2d240 72 61 6d 73 20 74 68 61 74 0a 61 72 65 20 6e 6f  rams that.are no
2d250 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20 70 72 61  t allowed in pra
2d260 63 74 69 63 65 2e 20 20 53 6f 6d 65 20 65 78 61  ctice.  Some exa
2d270 6d 70 6c 65 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  mples:.<ul>.<li>
2d280 41 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73  A [VALUES] claus
2d290 65 20 63 61 6e 20 62 65 20 74 68 65 20 66 69 72  e can be the fir
2d2a0 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 61 20  st element in a 
2d2b0 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
2d2c0 5d 0a 20 20 20 20 74 68 61 74 20 75 73 65 73 20  ].    that uses 
2d2d0 61 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2c  a [WITH] clause,
2d2e0 20 62 75 74 20 61 20 5b 73 69 6d 70 6c 65 20 53   but a [simple S
2d2f0 45 4c 45 43 54 5d 20 74 68 61 74 20 63 6f 6e 73  ELECT] that cons
2d300 69 73 74 73 20 6f 66 0a 20 20 20 20 6a 75 73 74  ists of.    just
2d310 20 61 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75   a [VALUES] clau
2d320 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65  se cannot be pre
2d330 63 65 64 65 64 20 62 79 20 61 20 5b 57 49 54 48  ceded by a [WITH
2d340 5d 20 63 6c 61 75 73 65 2e 0a 3c 6c 69 3e 54 68  ] clause..<li>Th
2d350 65 20 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 20  e [WITH] clause 
2d360 6d 75 73 74 20 6f 63 63 75 72 20 6f 6e 20 74 68  must occur on th
2d370 65 20 66 69 72 73 74 20 53 45 4c 45 43 54 20 6f  e first SELECT o
2d380 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  f a [compound SE
2d390 4c 45 43 54 5d 2e 0a 20 20 20 20 49 74 20 63 61  LECT]..    It ca
2d3a0 6e 6e 6f 74 20 66 6f 6c 6c 6f 77 20 61 20 5b 63  nnot follow a [c
2d3b0 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72  ompound-operator
2d3c0 5d 2e 0a 3c 2f 75 6c 3e 0a 54 68 65 73 65 20 61  ]..</ul>.These a
2d3d0 6e 64 20 6f 74 68 65 72 20 73 69 6d 69 6c 61 72  nd other similar
2d3e0 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63 74   syntax restrict
2d3f0 69 6f 6e 73 20 61 72 65 20 64 65 73 63 72 69 62  ions are describ
2d400 65 64 20 69 6e 20 74 68 65 20 74 65 78 74 2e 0a  ed in the text..
2d410 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73  .<p>The SELECT s
2d420 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20  tatement is the 
2d430 6d 6f 73 74 20 63 6f 6d 70 6c 69 63 61 74 65 64  most complicated
2d440 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20   command in the 
2d450 53 51 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 54 6f  SQL language..To
2d460 20 6d 61 6b 65 20 74 68 65 20 64 65 73 63 72 69   make the descri
2d470 70 74 69 6f 6e 20 65 61 73 69 65 72 20 74 6f 20  ption easier to 
2d480 66 6f 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f 66 20  follow, some of 
2d490 74 68 65 20 70 61 73 73 61 67 65 73 20 62 65 6c  the passages bel
2d4a0 6f 77 20 64 65 73 63 72 69 62 65 0a 74 68 65 20  ow describe.the 
2d4b0 77 61 79 20 74 68 65 20 64 61 74 61 20 72 65 74  way the data ret
2d4c0 75 72 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43  urned by a SELEC
2d4d0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64  T statement is d
2d4e0 65 74 65 72 6d 69 6e 65 64 20 61 73 20 61 20 73  etermined as a s
2d4f0 65 72 69 65 73 20 6f 66 0a 73 74 65 70 73 2e 20  eries of.steps. 
2d500 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
2d510 74 6f 20 6b 65 65 70 20 69 6e 20 6d 69 6e 64 20  to keep in mind 
2d520 74 68 61 74 20 74 68 69 73 20 69 73 20 70 75 72  that this is pur
2d530 65 6c 79 20 69 6c 6c 75 73 74 72 61 74 69 76 65  ely illustrative
2d540 20 2d 0a 69 6e 20 70 72 61 63 74 69 63 65 20 6e   -.in practice n
2d550 65 69 74 68 65 72 20 53 51 4c 69 74 65 20 6e 6f  either SQLite no
2d560 72 20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20  r any other SQL 
2d570 65 6e 67 69 6e 65 20 69 73 20 72 65 71 75 69 72  engine is requir
2d580 65 64 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a 74 68  ed to follow .th
2d590 69 73 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  is or any other 
2d5a0 73 70 65 63 69 66 69 63 20 70 72 6f 63 65 73 73  specific process
2d5b0 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
2d5c0 65 6e 74 20 73 69 6d 70 6c 65 73 65 6c 65 63 74  ent simpleselect
2d5d0 20 7b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 7d   {simple SELECT}
2d5e0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 53 69 6d 70 6c  </tcl>.<h3>Simpl
2d5f0 65 20 53 65 6c 65 63 74 20 50 72 6f 63 65 73 73  e Select Process
2d600 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ing</h3>..<p>The
2d610 20 63 6f 72 65 20 6f 66 20 61 20 53 45 4c 45 43   core of a SELEC
2d620 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  T statement is a
2d630 20 22 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 22   "simple SELECT"
2d640 20 73 68 6f 77 6e 20 62 79 20 74 68 65 0a 5b 73   shown by the.[s
2d650 65 6c 65 63 74 2d 63 6f 72 65 5d 20 61 6e 64 20  elect-core] and 
2d660 5b 73 69 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73  [simple-select-s
2d670 74 6d 74 5d 20 73 79 6e 74 61 78 20 64 69 61 67  tmt] syntax diag
2d680 72 61 6d 73 20 62 65 6c 6f 77 2e 20 20 0a 49 6e  rams below.  .In
2d690 20 70 72 61 63 74 69 63 65 2c 20 6d 6f 73 74 20   practice, most 
2d6a0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2d6b0 73 20 61 72 65 20 73 69 6d 70 6c 65 20 53 45 4c  s are simple SEL
2d6c0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ECT statements..
2d6d0 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65  .<tcl>.Recursive
2d6e0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69  BubbleDiagram si
2d6f0 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74  mple-select-stmt
2d700 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74   select-core.</t
2d710 63 6c 3e 0a 0a 3c 70 3e 47 65 6e 65 72 61 74 69  cl>..<p>Generati
2d720 6e 67 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ng the results o
2d730 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  f a simple SELEC
2d740 54 0a 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  T.statement is p
2d750 72 65 73 65 6e 74 65 64 20 61 73 20 61 20 66 6f  resented as a fo
2d760 75 72 20 73 74 65 70 20 70 72 6f 63 65 73 73 20  ur step process 
2d770 69 6e 20 74 68 65 20 64 65 73 63 72 69 70 74 69  in the descripti
2d780 6f 6e 20 62 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a  on below:..<ol>.
2d790 20 20 3c 6c 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20    <li> <p>[FROM 
2d7a0 63 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69  clause] processi
2d7b0 6e 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61  ng: The input da
2d7c0 74 61 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c  ta for the simpl
2d7d0 65 20 53 45 4c 45 43 54 20 69 73 0a 20 20 20 20  e SELECT is.    
2d7e0 20 20 20 64 65 74 65 72 6d 69 6e 65 64 2e 20 54     determined. T
2d7f0 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73  he input data is
2d800 20 65 69 74 68 65 72 20 69 6d 70 6c 69 63 69 74   either implicit
2d810 6c 79 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  ly a single row 
2d820 77 69 74 68 20 30 0a 20 20 20 20 20 20 20 63 6f  with 0.       co
2d830 6c 75 6d 6e 73 20 28 69 66 20 74 68 65 72 65 20  lumns (if there 
2d840 69 73 20 6e 6f 20 46 52 4f 4d 20 63 6c 61 75 73  is no FROM claus
2d850 65 29 20 6f 72 20 69 73 20 64 65 74 65 72 6d 69  e) or is determi
2d860 6e 65 64 20 62 79 20 74 68 65 20 46 52 4f 4d 0a  ned by the FROM.
2d870 20 20 20 20 20 20 20 63 6c 61 75 73 65 2e 0a 20         clause.. 
2d880 20 3c 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20   <li> <p>[WHERE 
2d890 63 6c 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69  clause] processi
2d8a0 6e 67 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61  ng: The input da
2d8b0 74 61 20 69 73 20 66 69 6c 74 65 72 65 64 20 75  ta is filtered u
2d8c0 73 69 6e 67 20 74 68 65 20 57 48 45 52 45 0a 20  sing the WHERE. 
2d8d0 20 20 20 20 20 20 63 6c 61 75 73 65 20 65 78 70        clause exp
2d8e0 72 65 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69  ression.  .  <li
2d8f0 3e 20 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47  > <p>[GROUP BY|G
2d900 52 4f 55 50 20 42 59 2c 20 48 41 56 49 4e 47 20  ROUP BY, HAVING 
2d910 61 6e 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d  and result-colum
2d920 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 20 70 72  n expression] pr
2d930 6f 63 65 73 73 69 6e 67 3a 20 0a 20 20 20 20 20  ocessing: .     
2d940 20 20 54 68 65 20 73 65 74 20 6f 66 20 72 65 73    The set of res
2d950 75 6c 74 20 72 6f 77 73 20 69 73 20 63 6f 6d 70  ult rows is comp
2d960 75 74 65 64 20 62 79 20 61 67 67 72 65 67 61 74  uted by aggregat
2d970 69 6e 67 20 74 68 65 20 64 61 74 61 20 61 63 63  ing the data acc
2d980 6f 72 64 69 6e 67 20 74 6f 0a 20 20 20 20 20 20  ording to.      
2d990 20 61 6e 79 20 47 52 4f 55 50 20 42 59 20 63 6c   any GROUP BY cl
2d9a0 61 75 73 65 20 61 6e 64 20 63 61 6c 63 75 6c 61  ause and calcula
2d9b0 74 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2d  ting the result-
2d9c0 73 65 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  set expressions 
2d9d0 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20 20 72  for the.       r
2d9e0 6f 77 73 20 6f 66 20 74 68 65 20 66 69 6c 74 65  ows of the filte
2d9f0 72 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65  red input datase
2da00 74 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b  t.  .  <li> <p>[
2da10 44 49 53 54 49 4e 43 54 7c 44 49 53 54 49 4e 43  DISTINCT|DISTINC
2da20 54 2f 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70  T/ALL keyword] p
2da30 72 6f 63 65 73 73 69 6e 67 3a 20 49 66 20 74 68  rocessing: If th
2da40 65 20 71 75 65 72 79 20 69 73 20 61 20 22 53 45  e query is a "SE
2da50 4c 45 43 54 0a 20 20 20 20 20 20 20 44 49 53 54  LECT.       DIST
2da60 49 4e 43 54 22 20 71 75 65 72 79 2c 20 64 75 70  INCT" query, dup
2da70 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72 65 20  licate rows are 
2da80 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  removed from the
2da90 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
2daa0 6f 77 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54  ows..</ol>..<p>T
2dab0 68 65 72 65 20 61 72 65 20 74 77 6f 20 74 79 70  here are two typ
2dac0 65 73 20 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c  es of simple SEL
2dad0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 2d 20  ECT statement - 
2dae0 61 67 67 72 65 67 61 74 65 20 61 6e 64 20 0a 6e  aggregate and .n
2daf0 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65  on-aggregate que
2db00 72 69 65 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20  ries. ^A simple 
2db10 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2db20 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74 65   is an aggregate
2db30 20 71 75 65 72 79 20 69 66 0a 69 74 20 63 6f 6e   query if.it con
2db40 74 61 69 6e 73 20 65 69 74 68 65 72 20 61 20 47  tains either a G
2db50 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 6f  ROUP BY clause o
2db60 72 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  r one or more ag
2db70 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
2db80 73 0a 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d  s.in the result-
2db90 73 65 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c  set. ^Otherwise,
2dba0 20 69 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c   if a simple SEL
2dbb0 45 43 54 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  ECT contains no 
2dbc0 61 67 67 72 65 67 61 74 65 0a 66 75 6e 63 74 69  aggregate.functi
2dbd0 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42  ons or a GROUP B
2dbe0 59 20 63 6c 61 75 73 65 2c 20 69 74 20 69 73 20  Y clause, it is 
2dbf0 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  a non-aggregate 
2dc00 71 75 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e  query...<p><b>1.
2dc10 20 44 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f   Determination o
2dc20 66 20 69 6e 70 75 74 20 64 61 74 61 20 28 46 52  f input data (FR
2dc30 4f 4d 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73  OM clause proces
2dc40 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  sing).</b>.<tcl>
2dc50 68 64 5f 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d  hd_fragment from
2dc60 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63  clause</tcl>.<tc
2dc70 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46  l>hd_keywords {F
2dc80 52 4f 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c  ROM clause}</tcl
2dc90 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 20  >..<p>The input 
2dca0 64 61 74 61 20 75 73 65 64 20 62 79 20 61 20 73  data used by a s
2dcb0 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65  imple SELECT que
2dcc0 72 79 20 69 73 20 61 20 73 65 74 20 6f 66 20 3c  ry is a set of <
2dcd0 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61  i>N</i> rows .ea
2dce0 63 68 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75  ch <i>M</i> colu
2dcf0 6d 6e 73 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28  mns wide...<p>^(
2dd00 49 66 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  If the FROM clau
2dd10 73 65 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  se is omitted fr
2dd20 6f 6d 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45  om a simple SELE
2dd30 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  CT statement, th
2dd40 65 6e 20 74 68 65 20 0a 69 6e 70 75 74 20 64 61  en the .input da
2dd50 74 61 20 69 73 20 69 6d 70 6c 69 63 69 74 6c 79  ta is implicitly
2dd60 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65   a single row ze
2dd70 72 6f 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29  ro columns wide)
2dd80 5e 20 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e  ^ (i.e. <i>N</i>
2dd90 3d 31 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d  =1 and.<i>M</i>=
2dda0 30 29 2e 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f  0)...<p>If a FRO
2ddb0 4d 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  M clause is spec
2ddc0 69 66 69 65 64 2c 20 74 68 65 20 64 61 74 61 20  ified, the data 
2ddd0 6f 6e 20 77 68 69 63 68 20 61 20 73 69 6d 70 6c  on which a simpl
2dde0 65 20 53 45 4c 45 43 54 20 71 75 65 72 79 0a 6f  e SELECT query.o
2ddf0 70 65 72 61 74 65 73 20 63 6f 6d 65 73 20 66 72  perates comes fr
2de00 6f 6d 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f  om the one or mo
2de10 72 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  re tables or sub
2de20 71 75 65 72 69 65 73 20 28 53 45 4c 45 43 54 20  queries (SELECT 
2de30 73 74 61 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61  statements.in pa
2de40 72 65 6e 74 68 65 73 69 73 29 20 73 70 65 63 69  renthesis) speci
2de50 66 69 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  fied following t
2de60 68 65 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e  he FROM keyword.
2de70 20 5e 41 20 73 75 62 71 75 65 72 79 20 73 70 65   ^A subquery spe
2de80 63 69 66 69 65 64 0a 69 6e 20 74 68 65 20 3c 79  cified.in the <y
2de90 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6f 72 2d 73  yterm>table-or-s
2dea0 75 62 71 75 65 72 79 3c 2f 79 79 74 65 72 6d 3e  ubquery</yyterm>
2deb0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46   following the F
2dec0 52 4f 4d 20 63 6c 61 75 73 65 20 69 6e 20 61 20  ROM clause in a 
2ded0 0a 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73  .simple SELECT s
2dee0 74 61 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e 64  tatement is.hand
2def0 6c 65 64 20 61 73 20 69 66 20 69 74 20 77 61 73  led as if it was
2df00 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e   a table contain
2df10 69 6e 67 20 74 68 65 20 64 61 74 61 20 72 65 74  ing the data ret
2df20 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69  urned by executi
2df30 6e 67 20 74 68 65 0a 73 75 62 71 75 65 72 79 20  ng the.subquery 
2df40 73 74 61 74 65 6d 65 6e 74 2e 20 5e 45 61 63 68  statement. ^Each
2df50 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 73   column of the s
2df60 75 62 71 75 65 72 79 20 68 61 73 20 74 68 65 0a  ubquery has the.
2df70 5b 63 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c 6c 61  [collation|colla
2df80 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 61  tion sequence] a
2df90 6e 64 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66  nd [affinity] of
2dfa0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2dfb0 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 6e  ng expression.in
2dfc0 20 74 68 65 20 73 75 62 71 75 65 72 79 20 73 74   the subquery st
2dfd0 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66  atement...<p>^If
2dfe0 20 74 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 61   there is only a
2dff0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72   single table or
2e000 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
2e010 20 46 52 4f 4d 0a 63 6c 61 75 73 65 2c 20 74 68   FROM.clause, th
2e020 65 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  en the input dat
2e030 61 20 75 73 65 64 20 62 79 20 74 68 65 20 53 45  a used by the SE
2e040 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
2e050 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  s the contents o
2e060 66 20 74 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c  f the.named tabl
2e070 65 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20  e. ^If there is 
2e080 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 61  more than one ta
2e090 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
2e0a0 69 6e 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 74  in FROM clause.t
2e0b0 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73  hen the contents
2e0c0 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 61   of all tables a
2e0d0 6e 64 2f 6f 72 20 73 75 62 71 75 65 72 69 65 73  nd/or subqueries
2e0e0 0a 61 72 65 20 6a 6f 69 6e 65 64 20 69 6e 74 6f  .are joined into
2e0f0 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 73 65   a single datase
2e100 74 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65  t for the simple
2e110 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2e120 74 20 74 6f 20 6f 70 65 72 61 74 65 20 6f 6e 2e  t to operate on.
2e130 0a 45 78 61 63 74 6c 79 20 68 6f 77 20 74 68 65  .Exactly how the
2e140 20 64 61 74 61 20 69 73 20 63 6f 6d 62 69 6e 65   data is combine
2e150 64 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  d depends on the
2e160 20 73 70 65 63 69 66 69 63 20 5b 6a 6f 69 6e 2d   specific [join-
2e170 6f 70 65 72 61 74 6f 72 5d 20 61 6e 64 0a 5b 6a  operator] and.[j
2e180 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20  oin-constraint] 
2e190 75 73 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20  used to connect 
2e1a0 74 68 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75  the tables or su
2e1b0 62 71 75 65 72 69 65 73 20 74 6f 67 65 74 68 65  bqueries togethe
2e1c0 72 2e 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73  r...<p>All joins
2e1d0 20 69 6e 20 53 51 4c 69 74 65 20 61 72 65 20 62   in SQLite are b
2e1e0 61 73 65 64 20 6f 6e 20 74 68 65 20 63 61 72 74  ased on the cart
2e1f0 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66  esian product of
2e200 20 74 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69   the left and.ri
2e210 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  ght-hand dataset
2e220 73 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 73 20  s. ^The columns 
2e230 6f 66 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  of the cartesian
2e240 20 70 72 6f 64 75 63 74 20 64 61 74 61 73 65 74   product dataset
2e250 20 61 72 65 2c 20 69 6e 20 0a 6f 72 64 65 72 2c   are, in .order,
2e260 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73   all the columns
2e270 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e   of the left-han
2e280 64 20 64 61 74 61 73 65 74 20 66 6f 6c 6c 6f 77  d dataset follow
2e290 65 64 20 62 79 20 61 6c 6c 20 74 68 65 20 63 6f  ed by all the co
2e2a0 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20 72 69 67  lumns.of the rig
2e2b0 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 2e  ht-hand dataset.
2e2c0 20 5e 54 68 65 72 65 20 69 73 20 61 20 72 6f 77   ^There is a row
2e2d0 20 69 6e 20 74 68 65 20 63 61 72 74 65 73 69 61   in the cartesia
2e2e0 6e 20 70 72 6f 64 75 63 74 20 64 61 74 61 73 65  n product datase
2e2f0 74 0a 66 6f 72 6d 65 64 20 62 79 20 63 6f 6d 62  t.formed by comb
2e300 69 6e 69 6e 67 20 65 61 63 68 20 75 6e 69 71 75  ining each uniqu
2e310 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
2e320 20 61 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20   a row from the 
2e330 6c 65 66 74 2d 68 61 6e 64 20 0a 61 6e 64 20 72  left-hand .and r
2e340 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65  ight-hand datase
2e350 74 73 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77  ts. ^(In other w
2e360 6f 72 64 73 2c 20 69 66 20 74 68 65 20 6c 65 66  ords, if the lef
2e370 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20 63  t-hand dataset c
2e380 6f 6e 73 69 73 74 73 20 6f 66 0a 3c 69 3e 4e 3c  onsists of.<i>N<
2e390 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c  sub><small>left<
2e3a0 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69  /small></sub></i
2e3b0 3e 20 72 6f 77 73 20 6f 66 20 0a 3c 69 3e 4d 3c  > rows of .<i>M<
2e3c0 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c  sub><small>left<
2e3d0 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69  /small></sub></i
2e3e0 3e 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74  > columns, and t
2e3f0 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61  he right-hand da
2e400 74 61 73 65 74 20 6f 66 0a 3c 69 3e 4e 3c 73 75  taset of.<i>N<su
2e410 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f  b><small>right</
2e420 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e  small></sub></i>
2e430 20 72 6f 77 73 20 6f 66 0a 3c 69 3e 4d 3c 73 75   rows of.<i>M<su
2e440 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f  b><small>right</
2e450 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e  small></sub></i>
2e460 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74   columns, then t
2e470 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
2e480 64 75 63 74 20 69 73 20 61 0a 64 61 74 61 73 65  duct is a.datase
2e490 74 20 6f 66 20 0a 3c 69 3e 4e 3c 73 75 62 3e 3c  t of .<i>N<sub><
2e4a0 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c  small>left</smal
2e4b0 6c 3e 3c 2f 73 75 62 3e 26 74 69 6d 65 73 3b 4e  l></sub>&times;N
2e4c0 3c 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68  <sub><small>righ
2e4d0 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c  t</small></sub><
2e4e0 2f 69 3e 0a 72 6f 77 73 2c 20 65 61 63 68 20 63  /i>.rows, each c
2e4f0 6f 6e 74 61 69 6e 69 6e 67 20 0a 3c 69 3e 4d 3c  ontaining .<i>M<
2e500 73 75 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c  sub><small>left<
2e510 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 2b 4d 3c  /small></sub>+M<
2e520 73 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74  sub><small>right
2e530 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f  </small></sub></
2e540 69 3e 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c  i> columns.)^..<
2e550 70 3e 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f  p>^If the join-o
2e560 70 65 72 61 74 6f 72 20 69 73 20 22 43 52 4f 53  perator is "CROS
2e570 53 20 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45 52 20  S JOIN", "INNER 
2e580 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 6f 72  JOIN", "JOIN" or
2e590 20 61 20 63 6f 6d 6d 61 0a 28 22 2c 22 29 20 61   a comma.(",") a
2e5a0 6e 64 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f  nd there is no O
2e5b0 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73  N or USING claus
2e5c0 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e, then the resu
2e5d0 6c 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 69  lt of the join i
2e5e0 73 0a 73 69 6d 70 6c 79 20 74 68 65 20 63 61 72  s.simply the car
2e5f0 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f  tesian product o
2e600 66 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  f the left and r
2e610 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65  ight-hand datase
2e620 74 73 2e 20 0a 49 66 20 6a 6f 69 6e 2d 6f 70 65  ts. .If join-ope
2e630 72 61 74 6f 72 20 64 6f 65 73 20 68 61 76 65 20  rator does have 
2e640 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75  ON or USING clau
2e650 73 65 73 2c 20 74 68 6f 73 65 20 61 72 65 20 68  ses, those are h
2e660 61 6e 64 6c 65 64 20 61 63 63 6f 72 64 69 6e 67  andled according
2e670 20 74 6f 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to.the followin
2e680 67 20 62 75 6c 6c 65 74 20 70 6f 69 6e 74 73 3a  g bullet points:
2e690 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70  ..<ul>.  <li> <p
2e6a0 3e 5e 28 49 66 20 74 68 65 72 65 20 69 73 20 61  >^(If there is a
2e6b0 6e 20 4f 4e 20 63 6c 61 75 73 65 20 74 68 65 6e  n ON clause then
2e6c0 20 74 68 65 20 4f 4e 20 65 78 70 72 65 73 73 69   the ON expressi
2e6d0 6f 6e 20 69 73 0a 20 20 20 20 20 20 20 65 76 61  on is.       eva
2e6e0 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  luated for each 
2e6f0 72 6f 77 20 6f 66 20 74 68 65 20 63 61 72 74 65  row of the carte
2e700 73 69 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20  sian product as 
2e710 61 20 0a 20 20 20 20 20 20 20 5b 62 6f 6f 6c 65  a .       [boole
2e720 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  an expression]. 
2e730 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68  Only rows for wh
2e740 69 63 68 20 74 68 65 20 65 78 70 72 65 73 73 69  ich the expressi
2e750 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
2e760 0a 20 20 20 20 20 20 20 74 72 75 65 20 61 72 65  .       true are
2e770 20 69 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74   included from t
2e780 68 65 20 64 61 74 61 73 65 74 2e 29 5e 0a 0a 20  he dataset.)^.. 
2e790 20 3c 6c 69 3e 20 3c 70 3e 5e 49 66 20 74 68 65   <li> <p>^If the
2e7a0 72 65 20 69 73 20 61 20 55 53 49 4e 47 20 63 6c  re is a USING cl
2e7b0 61 75 73 65 0a 20 20 20 20 20 20 20 74 68 65 6e  ause.       then
2e7c0 20 65 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c   each of the col
2e7d0 75 6d 6e 20 6e 61 6d 65 73 20 73 70 65 63 69 66  umn names specif
2e7e0 69 65 64 20 6d 75 73 74 20 65 78 69 73 74 20 69  ied must exist i
2e7f0 6e 20 74 68 65 20 64 61 74 61 73 65 74 73 20 74  n the datasets t
2e800 6f 20 0a 20 20 20 20 20 20 20 62 6f 74 68 20 74  o .       both t
2e810 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
2e820 74 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  t of the join-op
2e830 65 72 61 74 6f 72 2e 20 5e 28 46 6f 72 20 65 61  erator. ^(For ea
2e840 63 68 20 70 61 69 72 20 6f 66 20 6e 61 6d 65 64  ch pair of named
2e850 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 2c  .       columns,
2e860 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
2e870 22 6c 68 73 2e 58 20 3d 20 72 68 73 2e 58 22 20  "lhs.X = rhs.X" 
2e880 69 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  is evaluated for
2e890 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 20 20 20   each row of.   
2e8a0 20 20 20 20 74 68 65 20 63 61 72 74 65 73 69 61      the cartesia
2e8b0 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61 20 5b  n product as a [
2e8c0 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
2e8d0 6f 6e 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66  on]. Only rows f
2e8e0 6f 72 20 77 68 69 63 68 0a 20 20 20 20 20 20 20  or which.       
2e8f0 61 6c 6c 20 73 75 63 68 20 65 78 70 72 65 73 73  all such express
2e900 69 6f 6e 73 20 65 76 61 6c 75 61 74 65 73 20 74  ions evaluates t
2e910 6f 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75  o true are inclu
2e920 64 65 64 20 66 72 6f 6d 20 74 68 65 0a 20 20 20  ded from the.   
2e930 20 20 20 20 72 65 73 75 6c 74 20 73 65 74 2e 29      result set.)
2e940 5e 20 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e  ^ ^When comparin
2e950 67 20 76 61 6c 75 65 73 20 61 73 20 61 20 72 65  g values as a re
2e960 73 75 6c 74 20 6f 66 20 61 20 55 53 49 4e 47 20  sult of a USING 
2e970 63 6c 61 75 73 65 2c 20 74 68 65 0a 20 20 20 20  clause, the.    
2e980 20 20 20 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20     normal rules 
2e990 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 66 66  for handling aff
2e9a0 69 6e 69 74 69 65 73 2c 20 63 6f 6c 6c 61 74 69  inities, collati
2e9b0 6f 6e 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  on sequences and
2e9c0 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 76 61 6c   NULL.       val
2e9d0 75 65 73 20 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ues in compariso
2e9e0 6e 73 20 61 70 70 6c 79 2e 20 5e 54 68 65 20 63  ns apply. ^The c
2e9f0 6f 6c 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 64  olumn from the d
2ea00 61 74 61 73 65 74 20 6f 6e 20 74 68 65 0a 20 20  ataset on the.  
2ea10 20 20 20 20 20 6c 65 66 74 2d 68 61 6e 64 20 73       left-hand s
2ea20 69 64 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d  ide of the join-
2ea30 6f 70 65 72 61 74 6f 72 20 69 73 20 63 6f 6e 73  operator is cons
2ea40 69 64 65 72 65 64 20 74 6f 20 62 65 20 6f 6e 20  idered to be on 
2ea50 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 0a 20 20  the left-hand.  
2ea60 20 20 20 20 20 73 69 64 65 20 6f 66 20 74 68 65       side of the
2ea70 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
2ea80 61 74 6f 72 20 28 3d 29 20 66 6f 72 20 74 68 65  ator (=) for the
2ea90 20 70 75 72 70 6f 73 65 73 20 6f 66 20 63 6f 6c   purposes of col
2eaa0 6c 61 74 69 6f 6e 20 0a 20 20 20 20 20 20 20 73  lation .       s
2eab0 65 71 75 65 6e 63 65 20 61 6e 64 20 61 66 66 69  equence and affi
2eac0 6e 69 74 79 20 70 72 65 63 65 64 65 6e 63 65 2e  nity precedence.
2ead0 0a 0a 20 20 20 20 20 20 20 3c 70 3e 5e 46 6f 72  ..       <p>^For
2eae0 20 65 61 63 68 20 70 61 69 72 20 6f 66 20 63 6f   each pair of co
2eaf0 6c 75 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64  lumns identified
2eb00 20 62 79 20 61 20 55 53 49 4e 47 20 63 6c 61 75   by a USING clau
2eb10 73 65 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20  se, the column. 
2eb20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 72        from the r
2eb30 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65  ight-hand datase
2eb40 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
2eb50 6d 20 74 68 65 20 6a 6f 69 6e 65 64 20 64 61 74  m the joined dat
2eb60 61 73 65 74 2e 20 5e 54 68 69 73 20 0a 20 20 20  aset. ^This .   
2eb70 20 20 20 20 69 73 20 74 68 65 20 6f 6e 6c 79 20      is the only 
2eb80 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
2eb90 65 6e 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73  en a USING claus
2eba0 65 20 61 6e 64 20 69 74 73 20 65 71 75 69 76 61  e and its equiva
2ebb0 6c 65 6e 74 20 4f 4e 0a 20 20 20 20 20 20 20 63  lent ON.       c
2ebc0 6f 6e 73 74 72 61 69 6e 74 2e 0a 0a 20 20 3c 6c  onstraint...  <l
2ebd0 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 4e  i> <p>^(If the N
2ebe0 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 20 69  ATURAL keyword i
2ebf0 73 20 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  s in the join-op
2ec00 65 72 61 74 6f 72 20 74 68 65 6e 20 61 6e 0a 20  erator then an. 
2ec10 20 20 20 20 20 20 69 6d 70 6c 69 63 69 74 20 55        implicit U
2ec20 53 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61  SING clause is a
2ec30 64 64 65 64 20 74 6f 20 74 68 65 20 6a 6f 69 6e  dded to the join
2ec40 2d 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 54 68  -constraints. Th
2ec50 65 20 69 6d 70 6c 69 63 69 74 0a 20 20 20 20 20  e implicit.     
2ec60 20 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 63    USING clause c
2ec70 6f 6e 74 61 69 6e 73 20 65 61 63 68 20 6f 66 20  ontains each of 
2ec80 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  the column names
2ec90 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20   that appear in 
2eca0 62 6f 74 68 0a 20 20 20 20 20 20 20 74 68 65 20  both.       the 
2ecb0 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68  left and right-h
2ecc0 61 6e 64 20 69 6e 70 75 74 20 64 61 74 61 73 65  and input datase
2ecd0 74 73 2e 29 5e 20 5e 49 66 20 74 68 65 20 6c 65  ts.)^ ^If the le
2ece0 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
2ecf0 64 0a 20 20 20 20 20 20 20 69 6e 70 75 74 20 64  d.       input d
2ed00 61 74 61 73 65 74 73 20 66 65 61 74 75 72 65 20  atasets feature 
2ed10 6e 6f 20 63 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e  no common column
2ed20 20 6e 61 6d 65 73 2c 20 74 68 65 6e 20 74 68 65   names, then the
2ed30 20 4e 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64   NATURAL keyword
2ed40 0a 20 20 20 20 20 20 20 68 61 73 20 6e 6f 20 65  .       has no e
2ed50 66 66 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73  ffect on the res
2ed60 75 6c 74 73 20 6f 66 20 74 68 65 20 6a 6f 69 6e  ults of the join
2ed70 2e 20 5e 41 20 55 53 49 4e 47 20 6f 72 20 4f 4e  . ^A USING or ON
2ed80 20 63 6c 61 75 73 65 20 6d 61 79 0a 20 20 20 20   clause may.    
2ed90 20 20 20 6e 6f 74 20 62 65 20 61 64 64 65 64 20     not be added 
2eda0 74 6f 20 61 20 6a 6f 69 6e 20 74 68 61 74 20 73  to a join that s
2edb0 70 65 63 69 66 69 65 73 20 74 68 65 20 4e 41 54  pecifies the NAT
2edc0 55 52 41 4c 20 6b 65 79 77 6f 72 64 2e 0a 0a 20  URAL keyword... 
2edd0 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68   <li> <p>^(If th
2ede0 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20  e join-operator 
2edf0 69 73 20 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22  is a "LEFT JOIN"
2ee00 20 6f 72 20 22 4c 45 46 54 20 4f 55 54 45 52 20   or "LEFT OUTER 
2ee10 4a 4f 49 4e 22 2c 20 74 68 65 6e 0a 20 20 20 20  JOIN", then.    
2ee20 20 20 20 61 66 74 65 72 0a 20 20 20 20 20 20 20     after.       
2ee30 74 68 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20  the ON or USING 
2ee40 66 69 6c 74 65 72 69 6e 67 20 63 6c 61 75 73 65  filtering clause
2ee50 73 20 68 61 76 65 20 62 65 65 6e 20 61 70 70 6c  s have been appl
2ee60 69 65 64 2c 20 61 6e 20 65 78 74 72 61 20 72 6f  ied, an extra ro
2ee70 77 20 69 73 20 0a 20 20 20 20 20 20 20 61 64 64  w is .       add
2ee80 65 64 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74  ed to the output
2ee90 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
2eea0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65   the original le
2eeb0 66 74 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a 20  ft-hand input . 
2eec0 20 20 20 20 20 20 64 61 74 61 73 65 74 20 74 68        dataset th
2eed0 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
2eee0 6f 20 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c  o no rows at all
2eef0 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69 74   in the composit
2ef00 65 0a 20 20 20 20 20 20 20 64 61 74 61 73 65 74  e.       dataset
2ef10 20 28 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68   (if any).)^ ^Th
2ef20 65 20 61 64 64 65 64 20 72 6f 77 73 20 63 6f 6e  e added rows con
2ef30 74 61 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73  tain NULL values
2ef40 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a   in the columns.
2ef50 20 20 20 20 20 20 20 74 68 61 74 20 77 6f 75 6c         that woul
2ef60 64 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61  d normally conta
2ef70 69 6e 20 76 61 6c 75 65 73 20 63 6f 70 69 65 64  in values copied
2ef80 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d   from the right-
2ef90 68 61 6e 64 20 69 6e 70 75 74 0a 20 20 20 20 20  hand input.     
2efa0 20 20 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75    dataset.  .</u
2efb0 6c 3e 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f  l>..<p>^(When mo
2efc0 72 65 20 74 68 61 6e 20 74 77 6f 20 74 61 62 6c  re than two tabl
2efd0 65 73 20 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f  es are joined to
2efe0 67 65 74 68 65 72 20 61 73 20 70 61 72 74 20 6f  gether as part o
2eff0 66 20 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c  f a FROM clause,
2f000 0a 74 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74  .the join operat
2f010 69 6f 6e 73 20 61 72 65 20 70 72 6f 63 65 73 73  ions are process
2f020 65 64 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d  ed in order from
2f030 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20   left to right. 
2f040 49 6e 20 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c  In other .words,
2f050 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
2f060 20 28 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20   (A join-op-1 B 
2f070 6a 6f 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20  join-op-2 C) is 
2f080 63 6f 6d 70 75 74 65 64 20 61 73 20 0a 28 28 41  computed as .((A
2f090 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f   join-op-1 B) jo
2f0a0 69 6e 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 0a 3c  in-op-2 C).)^..<
2f0b0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2f0c0 63 72 6f 73 73 6a 6f 69 6e 20 7b 74 72 65 61 74  crossjoin {treat
2f0d0 73 20 74 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e  s the CROSS JOIN
2f0e0 20 6f 70 65 72 61 74 6f 72 20 73 70 65 63 69 61   operator specia
2f0f0 6c 6c 79 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62  lly}</tcl>.<p><b
2f100 3e 53 69 64 65 20 6e 6f 74 65 3a 20 53 70 65 63  >Side note: Spec
2f110 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20  ial handling of 
2f120 43 52 4f 53 53 20 4a 4f 49 4e 2e 3c 2f 62 3e 0a  CROSS JOIN.</b>.
2f130 5e 54 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66  ^There is no dif
2f140 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
2f150 74 68 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  the "INNER JOIN"
2f160 2c 20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22  , "JOIN" and ","
2f170 20 6a 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73 2e   join.operators.
2f180 20 54 68 65 79 20 61 72 65 20 63 6f 6d 70 6c 65   They are comple
2f190 74 65 6c 79 20 69 6e 74 65 72 63 68 61 6e 67 65  tely interchange
2f1a0 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 2e 0a  able in SQLite..
2f1b0 5e 28 54 68 65 20 22 43 52 4f 53 53 20 4a 4f 49  ^(The "CROSS JOI
2f1c0 4e 22 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f 72  N" join operator
2f1d0 20 70 72 6f 64 75 63 65 73 20 74 68 65 20 73 61   produces the sa
2f1e0 6d 65 20 72 65 73 75 6c 74 20 61 73 20 74 68 65  me result as the
2f1f0 20 0a 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20   ."INNER JOIN", 
2f200 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f  "JOIN" and "," o
2f210 70 65 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20  perators)^, but 
2f220 69 73 20 0a 5b 43 52 4f 53 53 20 4a 4f 49 4e 7c  is .[CROSS JOIN|
2f230 68 61 6e 64 6c 65 64 20 64 69 66 66 65 72 65 6e  handled differen
2f240 74 6c 79 20 62 79 20 74 68 65 20 71 75 65 72 79  tly by the query
2f250 20 6f 70 74 69 6d 69 7a 65 72 5d 0a 69 6e 20 74   optimizer].in t
2f260 68 61 74 20 69 74 20 70 72 65 76 65 6e 74 73 20  hat it prevents 
2f270 74 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69  the query optimi
2f280 7a 65 72 20 66 72 6f 6d 20 72 65 6f 72 64 65 72  zer from reorder
2f290 69 6e 67 0a 74 68 65 20 74 61 62 6c 65 73 20 69  ing.the tables i
2f2a0 6e 20 74 68 65 20 6a 6f 69 6e 2e 20 20 41 6e 20  n the join.  An 
2f2b0 61 70 70 6c 69 63 61 74 69 6f 6e 20 70 72 6f 67  application prog
2f2c0 72 61 6d 6d 65 72 20 63 61 6e 20 75 73 65 20 74  rammer can use t
2f2d0 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20 0a 6f  he CROSS JOIN .o
2f2e0 70 65 72 61 74 6f 72 20 74 6f 20 64 69 72 65 63  perator to direc
2f2f0 74 6c 79 20 69 6e 66 6c 75 65 6e 63 65 20 74 68  tly influence th
2f300 65 20 61 6c 67 6f 72 69 74 68 6d 20 74 68 61 74  e algorithm that
2f310 20 69 73 20 63 68 6f 73 65 6e 20 74 6f 20 69 6d   is chosen to im
2f320 70 6c 65 6d 65 6e 74 0a 74 68 65 20 53 45 4c 45  plement.the SELE
2f330 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41  CT statement.  A
2f340 76 6f 69 64 20 75 73 69 6e 67 20 43 52 4f 53 53  void using CROSS
2f350 20 4a 4f 49 4e 20 65 78 63 65 70 74 20 69 6e 20   JOIN except in 
2f360 73 70 65 63 69 66 69 63 20 73 69 74 75 61 74 69  specific situati
2f370 6f 6e 73 20 0a 77 68 65 72 65 20 6d 61 6e 75 61  ons .where manua
2f380 6c 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 65  l control of the
2f390 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
2f3a0 20 69 73 20 64 65 73 69 72 65 64 2e 20 20 41 76   is desired.  Av
2f3b0 6f 69 64 20 75 73 69 6e 67 0a 43 52 4f 53 53 20  oid using.CROSS 
2f3c0 4a 4f 49 4e 20 65 61 72 6c 79 20 69 6e 20 74 68  JOIN early in th
2f3d0 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f 66  e development of
2f3e0 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20   an application 
2f3f0 61 73 20 64 6f 69 6e 67 20 73 6f 20 69 73 0a 61  as doing so is.a
2f400 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f   <a href="http:/
2f410 2f 63 32 2e 63 6f 6d 2f 63 67 69 2f 77 69 6b 69  /c2.com/cgi/wiki
2f420 3f 50 72 65 6d 61 74 75 72 65 4f 70 74 69 6d 69  ?PrematureOptimi
2f430 7a 61 74 69 6f 6e 22 3e 70 72 65 6d 61 74 75 72  zation">prematur
2f440 65 0a 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f  e.optimization</
2f450 61 3e 2e 20 20 54 68 65 20 73 70 65 63 69 61 6c  a>.  The special
2f460 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f   handling of CRO
2f470 53 53 20 4a 4f 49 4e 20 69 73 20 61 6e 20 53 51  SS JOIN is an SQ
2f480 4c 69 74 65 2d 73 70 65 63 69 66 69 63 0a 66 65  Lite-specific.fe
2f490 61 74 75 72 65 20 61 6e 64 20 69 73 20 6e 6f 74  ature and is not
2f4a0 20 61 20 70 61 72 74 20 6f 66 20 73 74 61 6e 64   a part of stand
2f4b0 61 72 64 20 53 51 4c 2e 0a 20 20 20 20 20 20 20  ard SQL..       
2f4c0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
2f4d0 6e 74 20 77 68 65 72 65 63 6c 61 75 73 65 3c 2f  nt whereclause</
2f4e0 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79  tcl>.<tcl>hd_key
2f4f0 77 6f 72 64 73 20 7b 57 48 45 52 45 20 63 6c 61  words {WHERE cla
2f500 75 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62  use}</tcl>.<p><b
2f510 3e 32 2e 20 57 48 45 52 45 20 63 6c 61 75 73 65  >2. WHERE clause
2f520 20 66 69 6c 74 65 72 69 6e 67 2e 3c 2f 62 3e 0a   filtering.</b>.
2f530 0a 3c 70 3e 5e 28 49 66 20 61 20 57 48 45 52 45  .<p>^(If a WHERE
2f540 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69   clause is speci
2f550 66 69 65 64 2c 20 74 68 65 20 57 48 45 52 45 20  fied, the WHERE 
2f560 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76  expression is ev
2f570 61 6c 75 61 74 65 64 20 66 6f 72 20 0a 65 61 63  aluated for .eac
2f580 68 20 72 6f 77 20 69 6e 20 74 68 65 20 69 6e 70  h row in the inp
2f590 75 74 20 64 61 74 61 20 61 73 20 61 20 5b 62 6f  ut data as a [bo
2f5a0 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
2f5b0 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72  ]. Only rows for
2f5c0 20 77 68 69 63 68 20 74 68 65 0a 57 48 45 52 45   which the.WHERE
2f5d0 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
2f5e0 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
2f5f0 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65  true are include
2f600 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73  d from the datas
2f610 65 74 20 62 65 66 6f 72 65 0a 63 6f 6e 74 69 6e  et before.contin
2f620 75 69 6e 67 2e 29 5e 20 20 52 6f 77 73 20 61 72  uing.)^  Rows ar
2f630 65 20 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20  e excluded from 
2f640 74 68 65 20 72 65 73 75 6c 74 20 69 66 20 74 68  the result if th
2f650 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 0a 65  e WHERE clause.e
2f660 76 61 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68  valuates to eith
2f670 65 72 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c  er false or NULL
2f680 2e 0a 0a 3c 70 3e 46 6f 72 20 61 20 4a 4f 49 4e  ...<p>For a JOIN
2f690 20 6f 72 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 6f   or INNER JOIN o
2f6a0 72 20 43 52 4f 53 53 20 4a 4f 49 4e 2c 20 74 68  r CROSS JOIN, th
2f6b0 65 72 65 20 69 73 20 6e 6f 20 64 69 66 66 65 72  ere is no differ
2f6c0 65 6e 63 65 20 62 65 74 77 65 65 6e 20 0a 61 20  ence between .a 
2f6d0 63 6f 6e 73 74 72 61 69 6e 74 20 65 78 70 72 65  constraint expre
2f6e0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 57 48 45  ssion in the WHE
2f6f0 52 45 20 63 6c 61 75 73 65 20 61 6e 64 20 6f 6e  RE clause and on
2f700 65 20 69 6e 20 74 68 65 20 4f 4e 20 63 6c 61 75  e in the ON clau
2f710 73 65 2e 20 20 48 6f 77 65 76 65 72 2c 0a 66 6f  se.  However,.fo
2f720 72 20 61 20 4c 45 46 54 20 4a 4f 49 4e 20 6f 72  r a LEFT JOIN or
2f730 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e   LEFT OUTER JOIN
2f740 2c 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65  , the difference
2f750 20 69 73 20 76 65 72 79 20 69 6d 70 6f 72 74 61   is very importa
2f760 6e 74 2e 20 20 0a 49 6e 20 61 20 4c 45 46 54 20  nt.  .In a LEFT 
2f770 4a 4f 49 4e 2c 0a 74 68 65 20 65 78 74 72 61 20  JOIN,.the extra 
2f780 4e 55 4c 4c 20 72 6f 77 20 66 6f 72 20 74 68 65  NULL row for the
2f790 20 72 69 67 68 74 2d 68 61 6e 64 20 74 61 62 6c   right-hand tabl
2f7a0 65 20 69 73 20 61 64 64 65 64 20 61 66 74 65 72  e is added after
2f7b0 20 4f 4e 20 63 6c 61 75 73 65 20 70 72 6f 63 65   ON clause proce
2f7c0 73 73 69 6e 67 0a 62 75 74 20 62 65 66 6f 72 65  ssing.but before
2f7d0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 70 72   WHERE clause pr
2f7e0 6f 63 65 73 73 69 6e 67 2e 20 20 41 20 63 6f 6e  ocessing.  A con
2f7f0 73 74 72 61 69 6e 74 20 6f 66 20 74 68 65 20 66  straint of the f
2f800 6f 72 6d 20 22 6c 65 66 74 2e 78 3d 72 69 67 68  orm "left.x=righ
2f810 74 2e 79 22 0a 69 6e 20 61 6e 20 4f 4e 20 63 6c  t.y".in an ON cl
2f820 61 75 73 65 20 77 69 6c 6c 20 74 68 65 72 65 66  ause will theref
2f830 6f 72 65 20 61 6c 6c 6f 77 20 74 68 72 6f 75 67  ore allow throug
2f840 68 20 74 68 65 20 61 64 64 65 64 20 61 6c 6c 2d  h the added all-
2f850 4e 55 4c 4c 20 72 6f 77 73 20 6f 66 20 74 68 65  NULL rows of the
2f860 0a 72 69 67 68 74 20 74 61 62 6c 65 2e 20 20 42  .right table.  B
2f870 75 74 20 69 66 20 74 68 61 74 20 73 61 6d 65 20  ut if that same 
2f880 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 69 6e  constraint is in
2f890 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2f8a0 65 20 61 20 4e 55 4c 4c 20 69 6e 0a 22 72 69 67  e a NULL in."rig
2f8b0 68 74 2e 79 22 20 77 69 6c 6c 20 70 72 65 76 65  ht.y" will preve
2f8c0 6e 74 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  nt the expressio
2f8d0 6e 20 22 6c 65 66 74 2e 78 3d 72 69 67 68 74 2e  n "left.x=right.
2f8e0 79 22 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 72  y" from being tr
2f8f0 75 65 2c 20 61 6e 64 0a 74 68 75 73 20 65 78 63  ue, and.thus exc
2f900 6c 75 64 65 20 74 68 61 74 20 72 6f 77 20 66 72  lude that row fr
2f910 6f 6d 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 0a  om the output...
2f920 3c 70 3e 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74  <p><b>3. Generat
2f930 69 6f 6e 20 6f 66 20 74 68 65 20 73 65 74 20 6f  ion of the set o
2f940 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f  f result rows.</
2f950 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  b>.<tcl>hd_fragm
2f960 65 6e 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 74  ent resultset</t
2f970 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77  cl>.<tcl>hd_keyw
2f980 6f 72 64 73 20 7b 72 65 73 75 6c 74 2d 73 65 74  ords {result-set
2f990 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47   expressions} {G
2f9a0 52 4f 55 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a  ROUP BY}</tcl>..
2f9b0 3c 70 3e 4f 6e 63 65 20 74 68 65 20 69 6e 70 75  <p>Once the inpu
2f9c0 74 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20  t data from the 
2f9d0 46 52 4f 4d 20 63 6c 61 75 73 65 20 68 61 73 20  FROM clause has 
2f9e0 62 65 65 6e 20 66 69 6c 74 65 72 65 64 20 62 79  been filtered by
2f9f0 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73   the.WHERE claus
2fa00 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 69 66  e expression (if
2fa10 20 61 6e 79 29 2c 20 74 68 65 20 73 65 74 20 6f   any), the set o
2fa20 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f  f result rows fo
2fa30 72 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45  r the simple .SE
2fa40 4c 45 43 54 20 61 72 65 20 63 61 6c 63 75 6c 61  LECT are calcula
2fa50 74 65 64 2e 20 45 78 61 63 74 6c 79 20 68 6f 77  ted. Exactly how
2fa60 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20 64 65   this is done de
2fa70 70 65 6e 64 73 20 6f 6e 20 77 68 65 74 68 65 72  pends on whether
2fa80 20 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c   the simple .SEL
2fa90 45 43 54 20 69 73 20 61 6e 20 61 67 67 72 65 67  ECT is an aggreg
2faa0 61 74 65 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65  ate or non-aggre
2fab0 67 61 74 65 20 71 75 65 72 79 2c 20 61 6e 64 20  gate query, and 
2fac0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
2fad0 20 47 52 4f 55 50 0a 42 59 20 63 6c 61 75 73 65   GROUP.BY clause
2fae0 20 77 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a   was specified..
2faf0 0a 3c 70 3e 20 54 68 65 20 6c 69 73 74 20 6f 66  .<p> The list of
2fb00 20 65 78 70 72 65 73 73 69 6f 6e 73 20 62 65 74   expressions bet
2fb10 77 65 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20  ween the SELECT 
2fb20 61 6e 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64  and FROM keyword
2fb30 73 20 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68  s is known as.th
2fb40 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73  e result express
2fb50 69 6f 6e 20 6c 69 73 74 2e 20 20 5e 49 66 20 61  ion list.  ^If a
2fb60 20 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69   result expressi
2fb70 6f 6e 20 69 73 20 74 68 65 20 73 70 65 63 69 61  on is the specia
2fb80 6c 20 65 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22  l expression."*"
2fb90 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e   then all column
2fba0 73 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64  s in the input d
2fbb0 61 74 61 20 61 72 65 20 73 75 62 73 74 69 74 75  ata are substitu
2fbc0 74 65 64 20 66 6f 72 20 74 68 61 74 20 6f 6e 65  ted for that one
2fbd0 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49   expression..^(I
2fbe0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
2fbf0 20 69 73 20 74 68 65 20 61 6c 69 61 73 20 6f 66   is the alias of
2fc00 20 61 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71   a table or subq
2fc10 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
2fc20 20 63 6c 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64   clause.followed
2fc30 20 62 79 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c   by ".*" then al
2fc40 6c 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74  l columns from t
2fc50 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f  he named table o
2fc60 72 20 73 75 62 71 75 65 72 79 20 61 72 65 0a 73  r subquery are.s
2fc70 75 62 73 74 69 74 75 74 65 64 20 66 6f 72 20 74  ubstituted for t
2fc80 68 65 20 73 69 6e 67 6c 65 20 65 78 70 72 65 73  he single expres
2fc90 73 69 6f 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20  sion.)^ ^(It is 
2fca0 61 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20  an error to use 
2fcb0 61 20 22 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e  a "*" or."alias.
2fcc0 2a 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  *" expression in
2fcd0 20 61 6e 79 20 63 6f 6e 74 65 78 74 20 6f 74 68   any context oth
2fce0 65 72 20 74 68 61 6e 20 61 20 72 65 73 75 6c 74  er than a result
2fcf0 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
2fd00 2e 29 5e 0a 5e 28 49 74 20 69 73 20 61 6c 73 6f  .)^.^(It is also
2fd10 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65   an error to use
2fd20 20 61 20 22 2a 22 20 6f 72 20 22 61 6c 69 61 73   a "*" or "alias
2fd30 2e 2a 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .*" expression i
2fd40 6e 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  n a simple SELEC
2fd50 54 0a 71 75 65 72 79 20 74 68 61 74 20 64 6f 65  T.query that doe
2fd60 73 20 6e 6f 74 20 68 61 76 65 20 61 20 46 52 4f  s not have a FRO
2fd70 4d 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 70 3e  M clause.)^..<p>
2fd80 20 5e 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66   ^(The number of
2fd90 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
2fda0 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79  rows returned by
2fdb0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
2fdc0 20 73 74 61 74 65 6d 65 6e 74 0a 69 73 20 65 71   statement.is eq
2fdd0 75 61 6c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  ual to the numbe
2fde0 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
2fdf0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65   in the result e
2fe00 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 61  xpression list a
2fe10 66 74 65 72 0a 73 75 62 73 74 69 74 75 74 69 6f  fter.substitutio
2fe20 6e 20 6f 66 20 2a 20 61 6e 64 20 61 6c 69 61 73  n of * and alias
2fe30 2e 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 29  .* expressions.)
2fe40 5e 20 45 61 63 68 20 72 65 73 75 6c 74 20 72 6f  ^ Each result ro
2fe50 77 20 69 73 20 63 61 6c 63 75 6c 61 74 65 64 20  w is calculated 
2fe60 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by.evaluating th
2fe70 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  e expressions in
2fe80 20 74 68 65 20 72 65 73 75 6c 74 20 65 78 70 72   the result expr
2fe90 65 73 73 69 6f 6e 20 6c 69 73 74 20 77 69 74 68  ession list with
2fea0 20 72 65 73 70 65 63 74 20 74 6f 20 61 0a 73 69   respect to a.si
2feb0 6e 67 6c 65 20 72 6f 77 20 6f 66 20 69 6e 70 75  ngle row of inpu
2fec0 74 20 64 61 74 61 20 6f 72 2c 20 66 6f 72 20 61  t data or, for a
2fed0 67 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73  ggregate queries
2fee0 2c 20 77 69 74 68 20 72 65 73 70 65 63 74 20 74  , with respect t
2fef0 6f 20 61 20 67 72 6f 75 70 0a 6f 66 20 72 6f 77  o a group.of row
2ff00 73 2e 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c  s...<ul>.  <li><
2ff10 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54  p>^If the SELECT
2ff20 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62   statement is <b
2ff30 3e 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65  >a non-aggregate
2ff40 20 71 75 65 72 79 3c 2f 62 3e 2c 20 74 68 65 6e   query</b>, then
2ff50 20 0a 20 20 20 20 65 61 63 68 20 65 78 70 72 65   .    each expre
2ff60 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73  ssion in the res
2ff70 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
2ff80 69 73 74 20 69 73 20 65 76 61 6c 75 61 74 65 64  ist is evaluated
2ff90 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
2ffa0 0a 20 20 20 20 74 68 65 20 64 61 74 61 73 65 74  .    the dataset
2ffb0 20 66 69 6c 74 65 72 65 64 20 62 79 20 74 68 65   filtered by the
2ffc0 20 57 48 45 52 45 20 63 6c 61 75 73 65 2e 0a 0a   WHERE clause...
2ffd0 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65    <li><p>^If the
2ffe0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2fff0 74 20 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65  t is <b>an aggre
30000 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68 6f  gate query witho
30010 75 74 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42  ut a GROUP.    B
30020 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68  Y</b> clause, th
30030 65 6e 20 65 61 63 68 20 61 67 67 72 65 67 61 74  en each aggregat
30040 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  e expression in 
30050 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69  the result-set i
30060 73 20 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64  s .    evaluated
30070 20 6f 6e 63 65 20 61 63 72 6f 73 73 20 74 68 65   once across the
30080 20 65 6e 74 69 72 65 20 64 61 74 61 73 65 74 2e   entire dataset.
30090 20 5e 45 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65   ^Each non-aggre
300a0 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 0a  gate expression.
300b0 20 20 20 20 69 6e 20 74 68 65 20 72 65 73 75 6c      in the resul
300c0 74 2d 73 65 74 20 69 73 20 65 76 61 6c 75 61 74  t-set is evaluat
300d0 65 64 20 6f 6e 63 65 20 66 6f 72 20 61 6e 20 61  ed once for an a
300e0 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63  rbitrarily selec
300f0 74 65 64 20 72 6f 77 20 6f 66 0a 20 20 20 20 74  ted row of.    t
30100 68 65 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65  he dataset. ^The
30110 20 73 61 6d 65 20 61 72 62 69 74 72 61 72 69 6c   same arbitraril
30120 79 20 73 65 6c 65 63 74 65 64 20 72 6f 77 20 69  y selected row i
30130 73 20 75 73 65 64 20 66 6f 72 20 65 61 63 68 0a  s used for each.
30140 20 20 20 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74      non-aggregat
30150 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 4f  e expression. ^O
30160 72 2c 20 69 66 20 74 68 65 20 64 61 74 61 73 65  r, if the datase
30170 74 20 63 6f 6e 74 61 69 6e 73 20 7a 65 72 6f 20  t contains zero 
30180 72 6f 77 73 2c 20 74 68 65 6e 20 0a 20 20 20 20  rows, then .    
30190 65 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61  each non-aggrega
301a0 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  te expression is
301b0 20 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e   evaluated again
301c0 73 74 20 61 20 72 6f 77 20 63 6f 6e 73 69 73 74  st a row consist
301d0 69 6e 67 0a 20 20 20 20 65 6e 74 69 72 65 6c 79  ing.    entirely
301e0 20 6f 66 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e   of NULL values.
301f0 0a 0a 20 20 20 3c 70 3e 5e 54 68 65 20 73 69 6e  ..   <p>^The sin
30200 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
30210 74 2d 73 65 74 20 64 61 74 61 20 63 72 65 61 74  t-set data creat
30220 65 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67  ed by evaluating
30230 20 74 68 65 20 61 67 67 72 65 67 61 74 65 0a 20   the aggregate. 
30240 20 20 20 61 6e 64 20 6e 6f 6e 2d 61 67 67 72 65     and non-aggre
30250 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73  gate expressions
30260 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73   in the result-s
30270 65 74 20 66 6f 72 6d 73 20 74 68 65 20 72 65 73  et forms the res
30280 75 6c 74 20 6f 66 20 61 6e 0a 20 20 20 20 61 67  ult of an.    ag
30290 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69  gregate query wi
302a0 74 68 6f 75 74 20 61 20 47 52 4f 55 50 20 42 59  thout a GROUP BY
302b0 20 63 6c 61 75 73 65 2e 20 5e 41 6e 20 61 67 67   clause. ^An agg
302c0 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
302d0 68 6f 75 74 20 61 0a 20 20 20 20 47 52 4f 55 50  hout a.    GROUP
302e0 20 42 59 20 63 6c 61 75 73 65 20 61 6c 77 61 79   BY clause alway
302f0 73 20 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c  s returns exactl
30300 79 20 6f 6e 65 20 72 6f 77 20 6f 66 20 64 61 74  y one row of dat
30310 61 2c 20 65 76 65 6e 20 69 66 20 74 68 65 72 65  a, even if there
30320 20 61 72 65 0a 20 20 20 20 7a 65 72 6f 20 72 6f   are.    zero ro
30330 77 73 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61  ws of input data
30340 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28 49 66  ...  <li><p>^(If
30350 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
30360 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61  ement is <b>an a
30370 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20 77  ggregate query w
30380 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20  ith a GROUP.    
30390 42 59 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74  BY</b> clause, t
303a0 68 65 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20  hen each of the 
303b0 65 78 70 72 65 73 73 69 6f 6e 73 20 73 70 65 63  expressions spec
303c0 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
303d0 20 74 68 65 0a 20 20 20 20 47 52 4f 55 50 20 42   the.    GROUP B
303e0 59 20 63 6c 61 75 73 65 20 69 73 20 65 76 61 6c  Y clause is eval
303f0 75 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72  uated for each r
30400 6f 77 20 6f 66 20 74 68 65 20 64 61 74 61 73 65  ow of the datase
30410 74 2e 20 45 61 63 68 20 72 6f 77 0a 20 20 20 20  t. Each row.    
30420 69 73 20 74 68 65 6e 20 61 73 73 69 67 6e 65 64  is then assigned
30430 20 74 6f 20 61 20 22 67 72 6f 75 70 22 20 62 61   to a "group" ba
30440 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  sed on the resul
30450 74 73 3b 20 72 6f 77 73 20 66 6f 72 20 77 68 69  ts; rows for whi
30460 63 68 0a 20 20 20 20 74 68 65 20 72 65 73 75 6c  ch.    the resul
30470 74 73 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67  ts of evaluating
30480 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 65 78   the GROUP BY ex
30490 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 74 68  pressions are th
304a0 65 20 73 61 6d 65 20 67 65 74 0a 20 20 20 20 61  e same get.    a
304b0 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20 73  ssigned to the s
304c0 61 6d 65 20 67 72 6f 75 70 2e 29 5e 20 5e 46 6f  ame group.)^ ^Fo
304d0 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f  r the purposes o
304e0 66 20 67 72 6f 75 70 69 6e 67 20 72 6f 77 73 2c  f grouping rows,
304f0 20 4e 55 4c 4c 20 0a 20 20 20 20 76 61 6c 75 65   NULL .    value
30500 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
30510 20 65 71 75 61 6c 2e 20 5e 54 68 65 20 75 73 75   equal. ^The usu
30520 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 5b 63 6f  al rules for [co
30530 6c 6c 61 74 69 6f 6e 7c 73 65 6c 65 63 74 69 6e  llation|selectin
30540 67 20 61 0a 20 20 20 20 63 6f 6c 6c 61 74 69 6f  g a.    collatio
30550 6e 20 73 65 71 75 65 6e 63 65 5d 20 77 69 74 68  n sequence] with
30560 20 77 68 69 63 68 20 74 6f 20 63 6f 6d 70 61 72   which to compar
30570 65 20 74 65 78 74 20 76 61 6c 75 65 73 20 61 70  e text values ap
30580 70 6c 79 20 77 68 65 6e 20 65 76 61 6c 75 61 74  ply when evaluat
30590 69 6e 67 0a 20 20 20 20 65 78 70 72 65 73 73 69  ing.    expressi
305a0 6f 6e 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42  ons in a GROUP B
305b0 59 20 63 6c 61 75 73 65 2e 20 20 5e 54 68 65 20  Y clause.  ^The 
305c0 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74  expressions in t
305d0 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
305e0 73 65 0a 20 20 20 20 64 6f 20 3c 65 6d 3e 6e 6f  se.    do <em>no
305f0 74 3c 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62  t</em> have to b
30600 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68  e expressions th
30610 61 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  at appear in the
30620 20 72 65 73 75 6c 74 2e 20 5e 54 68 65 0a 20 20   result. ^The.  
30630 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e    expressions in
30640 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
30650 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 67  se may not be ag
30660 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69  gregate expressi
30670 6f 6e 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e 28 49  ons...    <p>^(I
30680 66 20 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73  f a HAVING claus
30690 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
306a0 69 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20  it is evaluated 
306b0 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 20 67 72  once for each gr
306c0 6f 75 70 20 0a 20 20 20 20 6f 66 20 72 6f 77 73  oup .    of rows
306d0 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65   as a [boolean e
306e0 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74  xpression]. If t
306f0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61  he result of eva
30700 6c 75 61 74 69 6e 67 20 74 68 65 0a 20 20 20 20  luating the.    
30710 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73  HAVING clause is
30720 20 66 61 6c 73 65 2c 20 74 68 65 20 67 72 6f 75   false, the grou
30730 70 20 69 73 20 64 69 73 63 61 72 64 65 64 2e 29  p is discarded.)
30740 5e 20 5e 49 66 20 74 68 65 20 48 41 56 49 4e 47  ^ ^If the HAVING
30750 20 63 6c 61 75 73 65 20 69 73 0a 20 20 20 20 61   clause is.    a
30760 6e 20 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n aggregate expr
30770 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76  ession, it is ev
30780 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20 61  aluated across a
30790 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67  ll rows in the g
307a0 72 6f 75 70 2e 20 5e 49 66 0a 20 20 20 20 61 20  roup. ^If.    a 
307b0 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73  HAVING clause is
307c0 20 61 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65   a non-aggregate
307d0 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20   expression, it 
307e0 69 73 20 65 76 61 6c 75 61 74 65 64 20 77 69 74  is evaluated wit
307f0 68 20 72 65 73 70 65 63 74 0a 20 20 20 20 74 6f  h respect.    to
30800 20 61 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20   an arbitrarily 
30810 73 65 6c 65 63 74 65 64 20 72 6f 77 20 66 72 6f  selected row fro
30820 6d 20 74 68 65 20 67 72 6f 75 70 2e 20 20 5e 54  m the group.  ^T
30830 68 65 20 48 41 56 49 4e 47 20 65 78 70 72 65 73  he HAVING expres
30840 73 69 6f 6e 20 6d 61 79 0a 20 20 20 20 72 65 66  sion may.    ref
30850 65 72 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76  er to values, ev
30860 65 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  en aggregate fun
30870 63 74 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65  ctions, that are
30880 20 6e 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75   not in the resu
30890 6c 74 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c 70 3e  lt.</p>..    <p>
308a0 5e 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e  ^Each expression
308b0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73   in the result-s
308c0 65 74 20 69 73 20 74 68 65 6e 20 65 76 61 6c 75  et is then evalu
308d0 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61  ated once for ea
308e0 63 68 0a 20 20 20 20 67 72 6f 75 70 20 6f 66 20  ch.    group of 
308f0 72 6f 77 73 2e 20 5e 49 66 20 74 68 65 20 65 78  rows. ^If the ex
30900 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61  pression is an a
30910 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73 73  ggregate express
30920 69 6f 6e 2c 20 69 74 20 69 73 20 0a 20 20 20 20  ion, it is .    
30930 65 76 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73  evaluated across
30940 20 61 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65   all rows in the
30950 20 67 72 6f 75 70 2e 20 5e 4f 74 68 65 72 77 69   group. ^Otherwi
30960 73 65 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61  se, it is evalua
30970 74 65 64 20 61 67 61 69 6e 73 74 0a 20 20 20 20  ted against.    
30980 61 20 73 69 6e 67 6c 65 20 61 72 62 69 74 72 61  a single arbitra
30990 72 69 6c 79 20 63 68 6f 73 65 6e 20 72 6f 77 20  rily chosen row 
309a0 66 72 6f 6d 20 77 69 74 68 69 6e 20 74 68 65 20  from within the 
309b0 67 72 6f 75 70 2e 20 5e 49 66 20 74 68 65 72 65  group. ^If there
309c0 20 69 73 20 6d 6f 72 65 0a 20 20 20 20 74 68 61   is more.    tha
309d0 6e 20 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72 65 67  n one non-aggreg
309e0 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ate expression i
309f0 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
30a00 2c 20 74 68 65 6e 20 61 6c 6c 20 73 75 63 68 0a  , then all such.
30a10 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20      expressions 
30a20 61 72 65 20 65 76 61 6c 75 61 74 65 64 20 66 6f  are evaluated fo
30a30 72 20 74 68 65 20 73 61 6d 65 20 72 6f 77 2e 0a  r the same row..
30a40 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68 20 67 72  .    <p>^Each gr
30a50 6f 75 70 20 6f 66 20 69 6e 70 75 74 20 64 61 74  oup of input dat
30a60 61 73 65 74 20 72 6f 77 73 20 63 6f 6e 74 72 69  aset rows contri
30a70 62 75 74 65 73 20 61 20 73 69 6e 67 6c 65 20 72  butes a single r
30a80 6f 77 20 74 6f 20 74 68 65 20 0a 20 20 20 20 73  ow to the .    s
30a90 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
30aa0 73 2e 20 5e 53 75 62 6a 65 63 74 20 74 6f 20 66  s. ^Subject to f
30ab0 69 6c 74 65 72 69 6e 67 20 61 73 73 6f 63 69 61  iltering associa
30ac0 74 65 64 20 77 69 74 68 20 74 68 65 20 44 49 53  ted with the DIS
30ad0 54 49 4e 43 54 0a 20 20 20 20 6b 65 79 77 6f 72  TINCT.    keywor
30ae0 64 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  d, the number of
30af0 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62   rows returned b
30b00 79 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  y an aggregate q
30b10 75 65 72 79 20 77 69 74 68 20 61 20 47 52 4f 55  uery with a GROU
30b20 50 0a 20 20 20 20 42 59 20 63 6c 61 75 73 65 20  P.    BY clause 
30b30 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  is the same as t
30b40 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 67 72 6f  he number of gro
30b50 75 70 73 20 6f 66 20 72 6f 77 73 20 70 72 6f 64  ups of rows prod
30b60 75 63 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67  uced by applying
30b70 0a 20 20 20 20 74 68 65 20 47 52 4f 55 50 20 42  .    the GROUP B
30b80 59 20 61 6e 64 20 48 41 56 49 4e 47 20 63 6c 61  Y and HAVING cla
30b90 75 73 65 73 20 74 6f 20 74 68 65 20 66 69 6c 74  uses to the filt
30ba0 65 72 65 64 20 69 6e 70 75 74 20 64 61 74 61 73  ered input datas
30bb0 65 74 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e  et..</ul>..<tcl>
30bc0 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 61 72 65  hd_fragment bare
30bd0 61 67 67 20 7b 62 61 72 65 20 61 67 67 72 65 67  agg {bare aggreg
30be0 61 74 65 20 74 65 72 6d 73 7d 3c 2f 74 63 6c 3e  ate terms}</tcl>
30bf0 0a 3c 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65  .<p><b>Side note
30c00 3a 20 42 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69  : Bare columns i
30c10 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  n an aggregate q
30c20 75 65 72 69 65 73 2e 3c 2f 62 3e 0a 54 68 65 20  ueries.</b>.The 
30c30 75 73 75 61 6c 20 63 61 73 65 20 69 73 20 74 68  usual case is th
30c40 61 74 20 61 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61  at all column na
30c50 6d 65 73 20 69 6e 20 61 6e 20 61 67 67 72 65 67  mes in an aggreg
30c60 61 74 65 20 71 75 65 72 79 20 61 72 65 20 65 69  ate query are ei
30c70 74 68 65 72 0a 61 72 67 75 6d 65 6e 74 73 20 74  ther.arguments t
30c80 6f 20 5b 61 67 67 66 75 6e 63 7c 61 67 67 72 65  o [aggfunc|aggre
30c90 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20  gate functions] 
30ca0 6f 72 20 65 6c 73 65 20 61 70 70 65 61 72 20 69  or else appear i
30cb0 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 63  n the GROUP BY c
30cc0 6c 61 75 73 65 2e 0a 41 20 72 65 73 75 6c 74 20  lause..A result 
30cd0 63 6f 6c 75 6d 6e 20 77 68 69 63 68 20 63 6f 6e  column which con
30ce0 74 61 69 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 6e  tains a column n
30cf0 61 6d 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  ame that is not 
30d00 77 69 74 68 69 6e 20 61 6e 0a 61 67 67 72 65 67  within an.aggreg
30d10 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  ate function and
30d20 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 61   that does not a
30d30 70 70 65 61 72 20 69 6e 20 74 68 65 20 47 52 4f  ppear in the GRO
30d40 55 50 20 42 59 20 63 6c 61 75 73 65 20 28 69 66  UP BY clause (if
30d50 0a 6f 6e 65 20 65 78 69 73 74 73 29 20 69 73 20  .one exists) is 
30d60 63 61 6c 6c 65 64 20 61 20 22 62 61 72 65 22 20  called a "bare" 
30d70 63 6f 6c 75 6d 6e 2e 0a 45 78 61 6d 70 6c 65 3a  column..Example:
30d80 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
30d90 65 3e 0a 53 45 4c 45 43 54 20 61 2c 20 62 2c 20  e>.SELECT a, b, 
30da0 73 75 6d 28 63 29 20 46 52 4f 4d 20 74 61 62 31  sum(c) FROM tab1
30db0 20 47 52 4f 55 50 20 42 59 20 61 3b 0a 3c 2f 70   GROUP BY a;.</p
30dc0 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
30dd0 0a 3c 70 3e 49 6e 20 74 68 65 20 71 75 65 72 79  .<p>In the query
30de0 20 61 62 6f 76 65 2c 20 74 68 65 20 22 61 22 20   above, the "a" 
30df0 63 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f  column is part o
30e00 66 20 74 68 65 20 47 52 4f 55 50 20 42 59 20 63  f the GROUP BY c
30e10 6c 61 75 73 65 0a 61 6e 64 20 73 6f 20 65 61 63  lause.and so eac
30e20 68 20 72 6f 77 20 6f 66 20 74 68 65 20 6f 75 74  h row of the out
30e30 70 75 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  put contains one
30e40 20 6f 66 20 74 68 65 20 64 69 73 74 69 6e 63 74   of the distinct
30e50 20 76 61 6c 75 65 73 20 66 6f 72 0a 22 61 22 2e   values for."a".
30e60 20 20 54 68 65 20 22 63 22 20 63 6f 6c 75 6d 6e    The "c" column
30e70 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 77 69   is contained wi
30e80 74 68 69 6e 20 74 68 65 20 5b 73 75 6d 28 29 5d  thin the [sum()]
30e90 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
30ea0 69 6f 6e 0a 61 6e 64 20 73 6f 20 74 68 61 74 20  ion.and so that 
30eb0 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 20 69 73  output column is
30ec0 20 74 68 65 20 73 75 6d 20 6f 66 20 61 6c 6c 20   the sum of all 
30ed0 22 63 22 20 76 61 6c 75 65 73 20 69 6e 20 72 6f  "c" values in ro
30ee0 77 73 20 74 68 61 74 0a 68 61 76 65 20 74 68 65  ws that.have the
30ef0 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20   same value for 
30f00 22 61 22 2e 20 20 42 75 74 20 77 68 61 74 20 69  "a".  But what i
30f10 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  s the result of 
30f20 74 68 65 20 62 61 72 65 20 0a 63 6f 6c 75 6d 6e  the bare .column
30f30 20 22 62 22 3f 20 54 68 65 20 61 6e 73 77 65 72   "b"? The answer
30f40 20 69 73 20 74 68 61 74 20 74 68 65 20 22 62 22   is that the "b"
30f50 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20   result will be 
30f60 74 68 65 0a 76 61 6c 75 65 20 66 6f 72 20 22 62  the.value for "b
30f70 22 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  " in one of the 
30f80 69 6e 70 75 74 20 72 6f 77 73 20 74 68 61 74 20  input rows that 
30f90 66 6f 72 6d 20 74 68 65 20 61 67 67 72 65 67 61  form the aggrega
30fa0 74 65 2e 0a 54 68 65 20 70 72 6f 62 6c 65 6d 20  te..The problem 
30fb0 69 73 20 74 68 61 74 20 79 6f 75 20 75 73 75 61  is that you usua
30fc0 6c 6c 79 20 64 6f 20 6e 6f 74 20 6b 6e 6f 77 20  lly do not know 
30fd0 77 68 69 63 68 20 69 6e 70 75 74 20 72 6f 77 20  which input row 
30fe0 69 73 20 75 73 65 64 0a 74 6f 20 63 6f 6d 70 75  is used.to compu
30ff0 74 65 20 22 62 22 2c 20 61 6e 64 20 73 6f 20 69  te "b", and so i
31000 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 74 68 65  n many cases the
31010 20 76 61 6c 75 65 20 66 6f 72 20 22 62 22 20 69   value for "b" i
31020 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f 70  s undefined..</p
31030 3e 0a 3c 70 3e 0a 53 70 65 63 69 61 6c 20 70 72  >.<p>.Special pr
31040 6f 63 65 73 73 69 6e 67 20 6f 63 63 75 72 73 20  ocessing occurs 
31050 6f 63 63 75 72 73 20 77 68 65 6e 20 74 68 65 20  occurs when the 
31060 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
31070 6f 6e 20 69 73 20 0a 65 69 74 68 65 72 20 5b 6d  on is .either [m
31080 61 78 41 67 67 46 75 6e 63 7c 6d 69 6e 28 29 5d  axAggFunc|min()]
31090 20 6f 72 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c   or [minAggFunc|
310a0 6d 61 78 28 29 5d 2e 20 20 45 78 61 6d 70 6c 65  max()].  Example
310b0 3a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  :.<blockquote><p
310c0 72 65 3e 0a 53 45 4c 45 43 54 20 61 2c 20 62 2c  re>.SELECT a, b,
310d0 20 6d 61 78 28 63 29 20 46 52 4f 4d 20 74 61 62   max(c) FROM tab
310e0 31 20 47 52 4f 55 50 20 42 59 20 61 3b 0a 3c 2f  1 GROUP BY a;.</
310f0 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
31100 3e 0a 57 68 65 6e 20 74 68 65 20 5b 6d 61 78 41  >.When the [maxA
31110 67 67 46 75 6e 63 7c 6d 69 6e 28 29 5d 20 6f 72  ggFunc|min()] or
31120 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 61 78   [minAggFunc|max
31130 28 29 5d 20 61 67 67 72 65 67 61 74 65 20 66 75  ()] aggregate fu
31140 6e 63 74 69 6f 6e 73 20 0a 61 72 65 20 75 73 65  nctions .are use
31150 64 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  d in an aggregat
31160 65 20 71 75 65 72 79 2c 20 61 6c 6c 20 62 61 72  e query, all bar
31170 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
31180 20 72 65 73 75 6c 74 20 73 65 74 20 0a 74 61 6b   result set .tak
31190 65 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68  e values from th
311a0 65 20 69 6e 70 75 74 0a 72 6f 77 20 77 68 69 63  e input.row whic
311b0 68 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  h also contains 
311c0 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 20 6d  the minimum or m
311d0 61 78 69 6d 75 6d 2e 20 20 53 6f 20 69 6e 20 74  aximum.  So in t
311e0 68 65 20 71 75 65 72 79 0a 61 62 6f 76 65 2c 20  he query.above, 
311f0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
31200 20 22 62 22 20 63 6f 6c 75 6d 6e 20 69 6e 20 74   "b" column in t
31210 68 65 20 6f 75 74 70 75 74 20 77 69 6c 6c 20 62  he output will b
31220 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 74  e the value of.t
31230 68 65 20 22 62 22 20 63 6f 6c 75 6d 6e 20 69 6e  he "b" column in
31240 20 74 68 65 20 69 6e 70 75 74 20 72 6f 77 20 74   the input row t
31250 68 61 74 20 68 61 73 20 74 68 65 20 6c 61 72 67  hat has the larg
31260 65 73 74 20 22 63 22 20 76 61 6c 75 65 2e 0a 54  est "c" value..T
31270 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 61 6e  here is still an
31280 20 61 6d 62 69 67 75 69 74 79 20 69 66 20 74 77   ambiguity if tw
31290 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
312a0 20 69 6e 70 75 74 20 72 6f 77 73 20 68 61 76 65   input rows have
312b0 20 74 68 65 0a 73 61 6d 65 20 6d 69 6e 69 6d 75   the.same minimu
312c0 6d 20 6f 72 20 6d 61 78 69 6d 75 6d 20 76 61 6c  m or maximum val
312d0 75 65 20 6f 72 20 69 66 20 74 68 65 20 71 75 65  ue or if the que
312e0 72 79 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65  ry contains more
312f0 20 74 68 61 6e 20 6f 6e 65 0a 6d 69 6e 28 29 20   than one.min() 
31300 61 6e 64 2f 6f 72 20 6d 61 78 28 29 20 61 67 67  and/or max() agg
31310 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e  regate function.
31320 20 4f 6e 6c 79 20 74 68 65 20 62 75 69 6c 74 2d   Only the built-
31330 69 6e 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c 6d  in [minAggFunc|m
31340 69 6e 28 29 5d 20 0a 61 6e 64 20 5b 6d 61 78 41  in()] .and [maxA
31350 67 67 46 75 6e 63 7c 6d 61 78 28 29 5d 20 66 75  ggFunc|max()] fu
31360 6e 63 74 69 6f 6e 73 20 77 6f 72 6b 20 74 68 69  nctions work thi
31370 73 20 77 61 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  s way..</p>..<p>
31380 3c 62 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66  <b>4. Removal of
31390 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
313a0 28 44 49 53 54 49 4e 43 54 20 70 72 6f 63 65 73  (DISTINCT proces
313b0 73 69 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e  sing).</b>.<tcl>
313c0 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 69 73 74  hd_fragment dist
313d0 69 6e 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  inct</tcl>.<tcl>
313e0 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49 53  hd_keywords {DIS
313f0 54 49 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  TINCT}</tcl>..<p
31400 3e 5e 4f 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c  >^One of the ALL
31410 20 6f 72 20 44 49 53 54 49 4e 43 54 20 6b 65 79   or DISTINCT key
31420 77 6f 72 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77  words may follow
31430 20 74 68 65 20 53 45 4c 45 43 54 20 6b 65 79 77   the SELECT keyw
31440 6f 72 64 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65  ord in a .simple
31450 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
31460 74 2e 20 5e 49 66 20 74 68 65 20 73 69 6d 70 6c  t. ^If the simpl
31470 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45  e SELECT is a SE
31480 4c 45 43 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74  LECT ALL, then t
31490 68 65 0a 65 6e 74 69 72 65 20 73 65 74 20 6f 66  he.entire set of
314a0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61 72 65   result rows are
314b0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
314c0 20 53 45 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69   SELECT. ^If nei
314d0 74 68 65 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54  ther ALL or.DIST
314e0 49 4e 43 54 20 61 72 65 20 70 72 65 73 65 6e 74  INCT are present
314f0 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  , then the behav
31500 69 6f 72 20 69 73 20 61 73 20 69 66 20 41 4c 4c  ior is as if ALL
31510 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64 2e   were specified.
31520 20 0a 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65   .^If the simple
31530 20 53 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c   SELECT is a SEL
31540 45 43 54 20 44 49 53 54 49 4e 43 54 2c 20 74 68  ECT DISTINCT, th
31550 65 6e 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77  en duplicate row
31560 73 20 61 72 65 20 72 65 6d 6f 76 65 64 0a 66 72  s are removed.fr
31570 6f 6d 20 74 68 65 20 73 65 74 20 6f 66 20 72 65  om the set of re
31580 73 75 6c 74 20 72 6f 77 73 20 62 65 66 6f 72 65  sult rows before
31590 20 69 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e   it is returned.
315a0 20 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73   ^For the purpos
315b0 65 73 20 6f 66 0a 64 65 74 65 63 74 69 6e 67 20  es of.detecting 
315c0 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 2c 20  duplicate rows, 
315d0 74 77 6f 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  two NULL values 
315e0 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74  are considered t
315f0 6f 20 62 65 20 65 71 75 61 6c 2e 20 5e 54 68 65  o be equal. ^The
31600 0a 5b 68 6f 77 20 63 6f 6c 6c 61 74 69 6f 6e 20  .[how collation 
31610 69 73 20 64 65 74 65 72 6d 69 6e 65 64 7c 75 73  is determined|us
31620 75 61 6c 20 72 75 6c 65 73 5d 20 61 70 70 6c 79  ual rules] apply
31630 20 66 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61   for selecting a
31640 20 63 6f 6c 6c 61 74 69 6f 6e 0a 73 65 71 75 65   collation.seque
31650 6e 63 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  nce to compare t
31660 65 78 74 20 76 61 6c 75 65 73 2e 0a 0a 3c 74 63  ext values...<tc
31670 6c 3e 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 63  l>.hd_fragment c
31680 6f 6d 70 6f 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e  ompound {compoun
31690 64 20 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f  d select} {compo
316a0 75 6e 64 20 71 75 65 72 79 7d 20 7b 63 6f 6d 70  und query} {comp
316b0 6f 75 6e 64 20 53 45 4c 45 43 54 7d 20 7b 63 6f  ound SELECT} {co
316c0 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 73 7d 0a  mpound SELECTs}.
316d0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f  </tcl>.<h3>Compo
316e0 75 6e 64 20 53 65 6c 65 63 74 20 53 74 61 74 65  und Select State
316f0 6d 65 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  ments</h3>..<p>T
31700 77 6f 20 6f 72 20 6d 6f 72 65 20 5b 73 69 6d 70  wo or more [simp
31710 6c 65 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65  le SELECT] state
31720 6d 65 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e  ments may be con
31730 6e 65 63 74 65 64 20 74 6f 67 65 74 68 65 72 20  nected together 
31740 74 6f 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75  to form.a compou
31750 6e 64 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20  nd SELECT using 
31760 74 68 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e  the UNION, UNION
31770 20 41 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20   ALL, INTERSECT 
31780 6f 72 20 45 58 43 45 50 54 20 6f 70 65 72 61 74  or EXCEPT operat
31790 6f 72 2c 0a 61 73 20 73 68 6f 77 6e 20 62 79 20  or,.as shown by 
317a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69  the following di
317b0 61 67 72 61 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65  agram:..<tcl>.Re
317c0 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61  cursiveBubbleDia
317d0 67 72 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 73 65  gram compound-se
317e0 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  lect-stmt.</tcl>
317f0 0a 0a 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f  ..<p>^In a compo
31800 75 6e 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20  und SELECT, all 
31810 74 68 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20  the constituent 
31820 53 45 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74  SELECTs must ret
31830 75 72 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75  urn the same .nu
31840 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63  mber of result c
31850 6f 6c 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20  olumns. ^As the 
31860 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20  components of a 
31870 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20  compound SELECT 
31880 6d 75 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53  must.be simple S
31890 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
318a0 2c 20 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63  , they may not c
318b0 6f 6e 74 61 69 6e 20 5b 4f 52 44 45 52 20 42 59  ontain [ORDER BY
318c0 5d 20 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61  ] or [LIMIT] cla
318d0 75 73 65 73 2e 0a 5e 5b 4f 52 44 45 52 20 42 59  uses..^[ORDER BY
318e0 5d 20 61 6e 64 20 5b 4c 49 4d 49 54 5d 20 63 6c  ] and [LIMIT] cl
318f0 61 75 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f  auses may only o
31900 63 63 75 72 20 61 74 20 74 68 65 20 65 6e 64 20  ccur at the end 
31910 6f 66 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f  of the entire co
31920 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54 2c 20 61  mpound.SELECT, a
31930 6e 64 20 74 68 65 6e 20 6f 6e 6c 79 20 69 66 20  nd then only if 
31940 74 68 65 20 66 69 6e 61 6c 20 65 6c 65 6d 65 6e  the final elemen
31950 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e  t of the compoun
31960 64 20 69 73 20 6e 6f 74 20 61 20 5b 56 41 4c 55  d is not a [VALU
31970 45 53 5d 20 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e  ES] clause...<p>
31980 5e 41 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  ^A compound SELE
31990 43 54 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  CT created using
319a0 20 55 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61   UNION ALL opera
319b0 74 6f 72 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  tor returns all 
319c0 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68  the rows.from th
319d0 65 20 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20  e SELECT to the 
319e0 6c 65 66 74 20 6f 66 20 74 68 65 20 55 4e 49 4f  left of the UNIO
319f0 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20  N ALL operator, 
31a00 61 6e 64 20 61 6c 6c 20 74 68 65 20 72 6f 77 73  and all the rows
31a10 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54  .from the SELECT
31a20 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66   to the right of
31a30 20 69 74 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20   it. ^The UNION 
31a40 6f 70 65 72 61 74 6f 72 20 77 6f 72 6b 73 20 74  operator works t
31a50 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 0a 55  he same way as.U
31a60 4e 49 4f 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74  NION ALL, except
31a70 20 74 68 61 74 20 64 75 70 6c 69 63 61 74 65 20   that duplicate 
31a80 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64  rows are removed
31a90 20 66 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20   from the final 
31aa0 72 65 73 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65  result set..^The
31ab0 20 49 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61   INTERSECT opera
31ac0 74 6f 72 20 72 65 74 75 72 6e 73 20 74 68 65 20  tor returns the 
31ad0 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20  intersection of 
31ae0 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
31af0 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68  he left and.righ
31b00 74 20 53 45 4c 45 43 54 73 2e 20 20 5e 54 68 65  t SELECTs.  ^The
31b10 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
31b20 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 75 62   returns the sub
31b30 73 65 74 20 6f 66 20 72 6f 77 73 20 72 65 74 75  set of rows retu
31b40 72 6e 65 64 20 62 79 20 74 68 65 0a 6c 65 66 74  rned by the.left
31b50 20 53 45 4c 45 43 54 20 74 68 61 74 20 61 72 65   SELECT that are
31b60 20 6e 6f 74 20 61 6c 73 6f 20 72 65 74 75 72 6e   not also return
31b70 65 64 20 62 79 20 74 68 65 20 72 69 67 68 74 2d  ed by the right-
31b80 68 61 6e 64 20 53 45 4c 45 43 54 2e 20 5e 44 75  hand SELECT. ^Du
31b90 70 6c 69 63 61 74 65 0a 72 6f 77 73 20 61 72 65  plicate.rows are
31ba0 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
31bb0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 49 4e 54  e results of INT
31bc0 45 52 53 45 43 54 20 61 6e 64 20 45 58 43 45 50  ERSECT and EXCEP
31bd0 54 20 6f 70 65 72 61 74 6f 72 73 20 62 65 66 6f  T operators befo
31be0 72 65 20 74 68 65 0a 72 65 73 75 6c 74 20 73 65  re the.result se
31bf0 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a  t is returned...
31c00 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70  <p>^For the purp
31c10 6f 73 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e  oses of determin
31c20 69 6e 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f  ing duplicate ro
31c30 77 73 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ws for the resul
31c40 74 73 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53  ts of compound.S
31c50 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 73 2c  ELECT operators,
31c60 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
31c70 20 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61   considered equa
31c80 6c 20 74 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20  l to other NULL 
31c90 76 61 6c 75 65 73 20 61 6e 64 0a 64 69 73 74 69  values and.disti
31ca0 6e 63 74 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e  nct from all non
31cb0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54  -NULL values. ^T
31cc0 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
31cd0 75 65 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f  uence used to co
31ce0 6d 70 61 72 65 20 0a 74 77 6f 20 74 65 78 74 20  mpare .two text 
31cf0 76 61 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d  values is determ
31d00 69 6e 65 64 20 61 73 20 69 66 20 74 68 65 20 63  ined as if the c
31d10 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65  olumns of the le
31d20 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
31d30 64 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  d.SELECT stateme
31d40 6e 74 73 20 77 65 72 65 20 74 68 65 20 6c 65 66  nts were the lef
31d50 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64  t and right-hand
31d60 20 6f 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65   operands of the
31d70 20 65 71 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72   equals (=).oper
31d80 61 74 6f 72 2c 20 65 78 63 65 70 74 20 74 68 61  ator, except tha
31d90 74 20 67 72 65 61 74 65 72 20 70 72 65 63 65 64  t greater preced
31da0 65 6e 63 65 20 69 73 20 6e 6f 74 20 61 73 73 69  ence is not assi
31db0 67 6e 65 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74  gned to a collat
31dc0 69 6f 6e 20 0a 73 65 71 75 65 6e 63 65 20 73 70  ion .sequence sp
31dd0 65 63 69 66 69 65 64 20 77 69 74 68 20 74 68 65  ecified with the
31de0 20 70 6f 73 74 66 69 78 20 43 4f 4c 4c 41 54 45   postfix COLLATE
31df0 20 6f 70 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61   operator. ^No a
31e00 66 66 69 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72  ffinity.transfor
31e10 6d 61 74 69 6f 6e 73 20 61 72 65 20 61 70 70 6c  mations are appl
31e20 69 65 64 20 74 6f 20 61 6e 79 20 76 61 6c 75 65  ied to any value
31e30 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
31e40 20 72 6f 77 73 20 61 73 20 70 61 72 74 20 6f 66   rows as part of
31e50 20 61 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45   a.compound SELE
31e60 43 54 2e 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20  CT. ..<p>^(When 
31e70 74 68 72 65 65 20 6f 72 20 6d 6f 72 65 20 73 69  three or more si
31e80 6d 70 6c 65 20 53 45 4c 45 43 54 73 20 61 72 65  mple SELECTs are
31e90 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20   connected into 
31ea0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
31eb0 54 2c 0a 74 68 65 79 20 67 72 6f 75 70 20 66 72  T,.they group fr
31ec0 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
31ed0 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  . In other words
31ee0 2c 20 69 66 20 22 41 22 2c 20 22 42 22 20 61 6e  , if "A", "B" an
31ef0 64 20 22 43 22 20 61 72 65 20 61 6c 6c 0a 73 69  d "C" are all.si
31f00 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
31f10 65 6d 65 6e 74 73 2c 20 28 41 20 6f 70 20 42 20  ements, (A op B 
31f20 6f 70 20 43 29 20 69 73 20 70 72 6f 63 65 73 73  op C) is process
31f30 65 64 20 61 73 20 28 28 41 20 6f 70 20 42 29 20  ed as ((A op B) 
31f40 6f 70 20 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a  op C).)^..</p>..
31f50 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
31f60 20 6f 72 64 65 72 62 79 20 7b 6f 72 64 65 72 20   orderby {order 
31f70 62 79 7d 20 7b 4f 52 44 45 52 20 42 59 7d 3c 2f  by} {ORDER BY}</
31f80 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4f 52 44  tcl>.<h3>The ORD
31f90 45 52 20 42 59 20 63 6c 61 75 73 65 3c 2f 68 33  ER BY clause</h3
31fa0 3e 0a 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43  >..<p>If a SELEC
31fb0 54 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  T statement that
31fc0 20 72 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68   returns more th
31fd0 61 6e 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20  an one row does 
31fe0 6e 6f 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45  not have an.ORDE
31ff0 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
32000 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20   order in which 
32010 74 68 65 20 72 6f 77 73 20 61 72 65 20 72 65 74  the rows are ret
32020 75 72 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e  urned is undefin
32030 65 64 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c  ed..Or, if a SEL
32040 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ECT statement do
32050 65 73 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52  es have an ORDER
32060 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
32070 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70   the list of.exp
32080 72 65 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65  ressions attache
32090 64 20 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42  d to the ORDER B
320a0 59 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  Y determine the 
320b0 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
320c0 6f 77 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64  ows.are returned
320d0 20 74 6f 20 74 68 65 20 75 73 65 72 2e 0a 0a 3c   to the user...<
320e0 70 3e 0a 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75  p>.^In a [compou
320f0 6e 64 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65  nd SELECT] state
32100 6d 65 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 6c  ment, only the l
32110 61 73 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73  ast or right-mos
32120 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  t [simple SELECT
32130 5d 0a 6d 61 79 20 68 61 76 65 20 61 6e 20 4f 52  ].may have an OR
32140 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 5e  DER BY clause. ^
32150 54 68 61 74 20 4f 52 44 45 52 20 42 59 20 63 6c  That ORDER BY cl
32160 61 75 73 65 20 77 69 6c 6c 20 61 70 70 6c 79 20  ause will apply 
32170 61 63 72 6f 73 73 20 61 6c 6c 20 65 6c 65 6d 65  across all eleme
32180 6e 74 73 20 6f 66 0a 74 68 65 20 63 6f 6d 70 6f  nts of.the compo
32190 75 6e 64 2e 20 5e 49 66 20 74 68 65 20 72 69 67  und. ^If the rig
321a0 68 74 2d 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 20  ht-most element 
321b0 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  of a [compound S
321c0 45 4c 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c  ELECT] is a [VAL
321d0 55 45 53 5d 20 63 6c 61 75 73 65 2c 0a 74 68 65  UES] clause,.the
321e0 6e 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c  n no ORDER BY cl
321f0 61 75 73 65 20 69 73 20 61 6c 6c 6f 77 65 64 20  ause is allowed 
32200 6f 6e 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e  on that statemen
32210 74 2e 0a 0a 0a 3c 70 3e 5e 52 6f 77 73 20 61 72  t....<p>^Rows ar
32220 65 20 66 69 72 73 74 20 73 6f 72 74 65 64 20 62  e first sorted b
32230 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75  ased on the resu
32240 6c 74 73 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e  lts of.evaluatin
32250 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  g the left-most 
32260 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
32270 65 20 4f 52 44 45 52 20 42 59 20 6c 69 73 74 2c  e ORDER BY list,
32280 20 74 68 65 6e 20 74 69 65 73 20 61 72 65 20 62   then ties are b
32290 72 6f 6b 65 6e 0a 62 79 20 65 76 61 6c 75 61 74  roken.by evaluat
322a0 69 6e 67 20 74 68 65 20 73 65 63 6f 6e 64 20 6c  ing the second l
322b0 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73  eft-most express
322c0 69 6f 6e 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54  ion and so on. T
322d0 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
322e0 68 0a 74 77 6f 20 72 6f 77 73 20 66 6f 72 20 77  h.two rows for w
322f0 68 69 63 68 20 61 6c 6c 20 4f 52 44 45 52 20 42  hich all ORDER B
32300 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  Y expressions ev
32310 61 6c 75 61 74 65 20 74 6f 20 65 71 75 61 6c 20  aluate to equal 
32320 76 61 6c 75 65 73 20 61 72 65 0a 72 65 74 75 72  values are.retur
32330 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
32340 2e 20 5e 45 61 63 68 20 4f 52 44 45 52 20 42 59  . ^Each ORDER BY
32350 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
32360 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  be optionally fo
32370 6c 6c 6f 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66  llowed.by one of
32380 20 74 68 65 20 6b 65 79 77 6f 72 64 73 20 41 53   the keywords AS
32390 43 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65  C (smaller value
323a0 73 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 66  s are returned f
323b0 69 72 73 74 29 20 6f 72 20 44 45 53 43 20 28 6c  irst) or DESC (l
323c0 61 72 67 65 72 0a 76 61 6c 75 65 73 20 61 72 65  arger.values are
323d0 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29   returned first)
323e0 2e 20 5e 49 66 20 6e 65 69 74 68 65 72 20 41 53  . ^If neither AS
323f0 43 20 6f 72 20 44 45 53 43 20 61 72 65 20 73 70  C or DESC are sp
32400 65 63 69 66 69 65 64 2c 20 72 6f 77 73 0a 61 72  ecified, rows.ar
32410 65 20 73 6f 72 74 65 64 20 69 6e 20 61 73 63 65  e sorted in asce
32420 6e 64 69 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76  nding (smaller v
32430 61 6c 75 65 73 20 66 69 72 73 74 29 20 6f 72 64  alues first) ord
32440 65 72 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a  er by default...
32450 3c 70 3e 45 61 63 68 20 4f 52 44 45 52 20 42 59  <p>Each ORDER BY
32460 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70   expression is p
32470 72 6f 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c  rocessed as foll
32480 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  ows:</p>..<ol>.<
32490 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52  li><p>^If the OR
324a0 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
324b0 6e 20 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  n is a constant 
324c0 69 6e 74 65 67 65 72 20 4b 20 74 68 65 6e 20 74  integer K then t
324d0 68 65 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he.expression is
324e0 20 63 6f 6e 73 69 64 65 72 65 64 20 61 6e 20 61   considered an a
324f0 6c 69 61 73 20 66 6f 72 20 74 68 65 20 4b 2d 74  lias for the K-t
32500 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
32510 72 65 73 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75  result set.(colu
32520 6d 6e 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64  mns are numbered
32530 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
32540 67 68 74 20 73 74 61 72 74 69 6e 67 20 77 69 74  ght starting wit
32550 68 20 31 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49  h 1)...<li><p>^I
32560 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65  f the ORDER BY e
32570 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
32580 69 64 65 6e 74 69 66 69 65 72 20 74 68 61 74 20  identifier that 
32590 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74  corresponds to.t
325a0 68 65 20 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20  he alias of one 
325b0 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 63 6f  of the output co
325c0 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20  lumns, then the 
325d0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f  expression is co
325e0 6e 73 69 64 65 72 65 64 0a 61 6e 20 61 6c 69 61  nsidered.an alia
325f0 73 20 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d  s for that colum
32600 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65  n...<li><p>^Othe
32610 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52  rwise, if the OR
32620 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
32630 6e 20 69 73 20 61 6e 79 20 6f 74 68 65 72 20 65  n is any other e
32640 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69  xpression, it .i
32650 73 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20  s evaluated and 
32660 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c  the returned val
32670 75 65 20 75 73 65 64 20 74 6f 20 6f 72 64 65 72  ue used to order
32680 20 74 68 65 20 6f 75 74 70 75 74 20 72 6f 77 73   the output rows
32690 2e 20 5e 49 66 0a 74 68 65 20 53 45 4c 45 43 54  . ^If.the SELECT
326a0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 20   statement is a 
326b0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 74  simple SELECT, t
326c0 68 65 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20  hen an ORDER BY 
326d0 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a  may contain any.
326e0 61 72 62 69 74 72 61 72 79 20 65 78 70 72 65 73  arbitrary expres
326f0 73 69 6f 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c  sions. ^However,
32700 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 20 69   if the SELECT i
32710 73 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  s a compound SEL
32720 45 43 54 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20  ECT, then.ORDER 
32730 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  BY expressions t
32740 68 61 74 20 61 72 65 20 6e 6f 74 20 61 6c 69 61  hat are not alia
32750 73 65 73 20 74 6f 20 6f 75 74 70 75 74 20 63 6f  ses to output co
32760 6c 75 6d 6e 73 20 6d 75 73 74 20 62 65 20 65 78  lumns must be ex
32770 61 63 74 6c 79 0a 74 68 65 20 73 61 6d 65 20 61  actly.the same a
32780 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s an expression 
32790 75 73 65 64 20 61 73 20 61 6e 20 6f 75 74 70 75  used as an outpu
327a0 74 20 63 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a  t column..</ol>.
327b0 0a 3c 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72  .<p>^For the pur
327c0 70 6f 73 65 73 20 6f 66 20 73 6f 72 74 69 6e 67  poses of sorting
327d0 20 72 6f 77 73 2c 20 76 61 6c 75 65 73 20 61 72   rows, values ar
327e0 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 74 68  e compared in th
327f0 65 20 73 61 6d 65 20 77 61 79 0a 61 73 20 66 6f  e same way.as fo
32800 72 20 5b 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78  r [comparison ex
32810 70 72 65 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20  pressions]. The 
32820 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
32830 63 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  ce used to compa
32840 72 65 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75  re.two text valu
32850 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  es is determined
32860 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f   as follows:..<o
32870 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20  l>.  <li><p>^If 
32880 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
32890 72 65 73 73 69 6f 6e 20 69 73 20 61 73 73 69 67  ression is assig
328a0 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ned a collation 
328b0 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67 0a 20  sequence using. 
328c0 20 74 68 65 20 70 6f 73 74 66 69 78 20 5b 43 4f   the postfix [CO
328d0 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c  LLATE operator],
328e0 20 74 68 65 6e 20 74 68 65 20 73 70 65 63 69 66   then the specif
328f0 69 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  ied collation se
32900 71 75 65 6e 63 65 20 69 73 0a 20 20 75 73 65 64  quence is.  used
32910 2e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65  ..  <li><p>^Othe
32920 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52  rwise, if the OR
32930 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f  DER BY expressio
32940 6e 20 69 73 20 61 6e 20 61 6c 69 61 73 20 74 6f  n is an alias to
32950 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a 20   an expression. 
32960 20 74 68 61 74 20 68 61 73 20 62 65 65 6e 20 61   that has been a
32970 73 73 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74  ssigned a collat
32980 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69  ion sequence usi
32990 6e 67 20 74 68 65 20 70 6f 73 74 66 69 78 20 0a  ng the postfix .
329a0 20 20 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61    [COLLATE opera
329b0 74 6f 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 63  tor], then the c
329c0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
329d0 65 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68  e assigned to th
329e0 65 20 61 6c 69 61 73 65 64 0a 20 20 65 78 70 72  e aliased.  expr
329f0 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  ession is used..
32a00 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77    <li><p>^Otherw
32a10 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45  ise, if the ORDE
32a20 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
32a30 69 73 20 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61  is a column or a
32a40 6e 20 61 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20  n alias of.  an 
32a50 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
32a60 69 73 20 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65  is a column, the
32a70 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f  n the default co
32a80 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
32a90 20 66 6f 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d   for.  the colum
32aa0 6e 20 69 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c  n is used. .  <l
32ab0 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c  i><p>^Otherwise,
32ac0 20 74 68 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f   the [BINARY] co
32ad0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
32ae0 20 69 73 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a   is used..</ol>.
32af0 0a 3c 70 3e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75  .<p>In a [compou
32b00 6e 64 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65  nd SELECT] state
32b10 6d 65 6e 74 2c 20 61 6c 6c 20 4f 52 44 45 52 20  ment, all ORDER 
32b20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  BY expressions a
32b30 72 65 20 68 61 6e 64 6c 65 64 0a 61 73 20 61 6c  re handled.as al
32b40 69 61 73 65 73 20 66 6f 72 20 6f 6e 65 20 6f 66  iases for one of
32b50 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
32b60 6d 6e 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f  mns of the compo
32b70 75 6e 64 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44  und..^(If an ORD
32b80 45 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e  ER BY expression
32b90 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
32ba0 65 72 20 61 6c 69 61 73 2c 20 74 68 65 6e 20 53  er alias, then S
32bb0 51 4c 69 74 65 20 73 65 61 72 63 68 65 73 0a 74  QLite searches.t
32bc0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c  he left-most SEL
32bd0 45 43 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f  ECT in the compo
32be0 75 6e 64 20 66 6f 72 20 61 20 72 65 73 75 6c 74  und for a result
32bf0 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74   column that mat
32c00 63 68 65 73 20 65 69 74 68 65 72 0a 74 68 65 20  ches either.the 
32c10 73 65 63 6f 6e 64 20 6f 72 20 74 68 69 72 64 20  second or third 
32c20 72 75 6c 65 73 20 61 62 6f 76 65 2e 20 49 66 20  rules above. If 
32c30 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
32c40 2c 20 74 68 65 20 73 65 61 72 63 68 20 73 74 6f  , the search sto
32c50 70 73 20 61 6e 64 0a 74 68 65 20 65 78 70 72 65  ps and.the expre
32c60 73 73 69 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64  ssion is handled
32c70 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72   as an alias for
32c80 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
32c90 6d 6e 20 74 68 61 74 20 69 74 20 68 61 73 20 62  mn that it has b
32ca0 65 65 6e 0a 6d 61 74 63 68 65 64 20 61 67 61 69  een.matched agai
32cb0 6e 73 74 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  nst. Otherwise, 
32cc0 74 68 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20  the next SELECT 
32cd0 74 6f 20 74 68 65 20 72 69 67 68 74 20 69 73 20  to the right is 
32ce0 74 72 69 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e  tried, and so on
32cf0 2e 29 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68  .)^.^If no match
32d00 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 63  ing expression c
32d10 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74  an be found in t
32d20 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
32d30 73 20 6f 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74  s of any.constit
32d40 75 65 6e 74 20 53 45 4c 45 43 54 2c 20 69 74 20  uent SELECT, it 
32d50 69 73 20 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61  is an error. ^Ea
32d60 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f  ch term of the O
32d70 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
32d80 73 0a 70 72 6f 63 65 73 73 65 64 20 73 65 70 61  s.processed sepa
32d90 72 61 74 65 6c 79 20 61 6e 64 20 6d 61 79 20 62  rately and may b
32da0 65 20 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73  e matched agains
32db0 74 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73  t result columns
32dc0 20 66 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a   from different.
32dd0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
32de0 73 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e  s in the compoun
32df0 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  d.</p>..<tcl>hd_
32e00 66 72 61 67 6d 65 6e 74 20 6c 69 6d 69 74 6f 66  fragment limitof
32e10 66 73 65 74 20 7b 4c 49 4d 49 54 7d 20 7b 4f 46  fset {LIMIT} {OF
32e20 46 53 45 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  FSET}</tcl>.<h3>
32e30 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  The LIMIT clause
32e40 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c  </h3>..<p>^The L
32e50 49 4d 49 54 20 63 6c 61 75 73 65 20 69 73 20 75  IMIT clause is u
32e60 73 65 64 20 74 6f 20 70 6c 61 63 65 20 61 6e 20  sed to place an 
32e70 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74  upper bound on t
32e80 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
32e90 73 0a 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s.returned by th
32ea0 65 20 65 6e 74 69 72 65 20 53 45 4c 45 43 54 20  e entire SELECT 
32eb0 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e  statement...<p>^
32ec0 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53  In a [compound S
32ed0 45 4c 45 43 54 5d 2c 20 6f 6e 6c 79 20 74 68 65  ELECT], only the
32ee0 0a 6c 61 73 74 20 6f 72 20 72 69 67 68 74 2d 6d  .last or right-m
32ef0 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45  ost [simple SELE
32f00 43 54 5d 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  CT] may contain 
32f10 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20  a LIMIT clause. 
32f20 20 0a 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e   .^In a [compoun
32f30 64 20 53 45 4c 45 43 54 5d 2c 20 0a 74 68 65 20  d SELECT], .the 
32f40 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61 70 70  LIMIT clause app
32f50 6c 69 65 73 20 74 6f 20 74 68 65 20 65 6e 74 69  lies to the enti
32f60 72 65 20 63 6f 6d 70 6f 75 6e 64 2c 20 6e 6f 74  re compound, not
32f70 20 6a 75 73 74 20 74 68 65 20 66 69 6e 61 6c 20   just the final 
32f80 53 45 4c 45 43 54 2e 0a 5e 49 66 20 74 68 65 20  SELECT..^If the 
32f90 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70  right-most [simp
32fa0 6c 65 20 53 45 4c 45 43 54 5d 20 69 73 20 61 20  le SELECT] is a 
32fb0 5b 56 41 4c 55 45 53 20 63 6c 61 75 73 65 5d 20  [VALUES clause] 
32fc0 74 68 65 6e 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  then no LIMIT cl
32fd0 61 75 73 65 0a 69 73 20 61 6c 6c 6f 77 65 64 2e  ause.is allowed.
32fe0 0a 0a 3c 70 3e 5e 41 6e 79 20 73 63 61 6c 61 72  ..<p>^Any scalar
32ff0 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
33000 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 0a  be used in the .
33010 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 73 6f  LIMIT clause, so
33020 20 6c 6f 6e 67 20 61 73 20 69 74 20 65 76 61 6c   long as it eval
33030 75 61 74 65 73 20 74 6f 20 61 6e 20 69 6e 74 65  uates to an inte
33040 67 65 72 20 6f 72 20 61 20 76 61 6c 75 65 20 74  ger or a value t
33050 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c  hat can be.lossl
33060 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20  essly converted 
33070 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e  to an integer. ^
33080 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
33090 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  n evaluates to a
330a0 20 4e 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72 20   NULL .value or 
330b0 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20  any other value 
330c0 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c  that cannot be l
330d0 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
330e0 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  ted to an intege
330f0 72 2c 20 61 6e 0a 65 72 72 6f 72 20 69 73 20 72  r, an.error is r
33100 65 74 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65  eturned. ^If the
33110 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
33120 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61  n evaluates to a
33130 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c   negative value,
33140 0a 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e  .then there is n
33150 6f 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e  o upper bound on
33160 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
33170 6f 77 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 4f  ows returned. ^O
33180 74 68 65 72 77 69 73 65 2c 20 74 68 65 0a 53 45  therwise, the.SE
33190 4c 45 43 54 20 72 65 74 75 72 6e 73 20 74 68 65  LECT returns the
331a0 20 66 69 72 73 74 20 4e 20 72 6f 77 73 20 6f 66   first N rows of
331b0 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
331c0 6f 6e 6c 79 2c 20 77 68 65 72 65 20 4e 20 69 73  only, where N is
331d0 20 74 68 65 20 76 61 6c 75 65 0a 74 68 61 74 20   the value.that 
331e0 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
331f0 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
33200 6f 2e 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53  o. ^Or, if the S
33210 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
33220 77 6f 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65 73  would.return les
33230 73 20 74 68 61 6e 20 4e 20 72 6f 77 73 20 77 69  s than N rows wi
33240 74 68 6f 75 74 20 61 20 4c 49 4d 49 54 20 63 6c  thout a LIMIT cl
33250 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 65  ause, then the e
33260 6e 74 69 72 65 20 72 65 73 75 6c 74 20 73 65 74  ntire result set
33270 20 69 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a 0a   is.returned. ..
33280 3c 70 3e 5e 54 68 65 20 65 78 70 72 65 73 73 69  <p>^The expressi
33290 6f 6e 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  on attached to t
332a0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53  he optional OFFS
332b0 45 54 20 63 6c 61 75 73 65 20 74 68 61 74 20 6d  ET clause that m
332c0 61 79 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49  ay follow a.LIMI
332d0 54 20 63 6c 61 75 73 65 20 6d 75 73 74 20 61 6c  T clause must al
332e0 73 6f 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61  so evaluate to a
332f0 6e 20 69 6e 74 65 67 65 72 2c 20 6f 72 20 61 20  n integer, or a 
33300 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62  value that can b
33310 65 0a 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e  e.losslessly con
33320 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
33330 65 67 65 72 2e 20 5e 49 66 20 61 6e 20 65 78 70  eger. ^If an exp
33340 72 65 73 73 69 6f 6e 20 68 61 73 20 61 6e 20 4f  ression has an O
33350 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68  FFSET clause,.th
33360 65 6e 20 74 68 65 20 66 69 72 73 74 20 4d 20 72  en the first M r
33370 6f 77 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20  ows are omitted 
33380 66 72 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20  from the result 
33390 73 65 74 20 72 65 74 75 72 6e 65 64 20 62 79 20  set returned by 
333a0 74 68 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65  the SELECT.state
333b0 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 78  ment and the nex
333c0 74 20 4e 20 72 6f 77 73 20 61 72 65 20 72 65 74  t N rows are ret
333d0 75 72 6e 65 64 2c 20 77 68 65 72 65 20 4d 20 61  urned, where M a
333e0 6e 64 20 4e 20 61 72 65 20 74 68 65 20 76 61 6c  nd N are the val
333f0 75 65 73 20 74 68 61 74 0a 74 68 65 20 4f 46 46  ues that.the OFF
33400 53 45 54 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c  SET and LIMIT cl
33410 61 75 73 65 73 20 65 76 61 6c 75 61 74 65 20 74  auses evaluate t
33420 6f 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  o, respectively.
33430 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c   ^Or, if the SEL
33440 45 43 54 0a 77 6f 75 6c 64 20 72 65 74 75 72 6e  ECT.would return
33450 20 6c 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20 72   less than M+N r
33460 6f 77 73 20 69 66 20 69 74 20 64 69 64 20 6e 6f  ows if it did no
33470 74 20 68 61 76 65 20 61 20 4c 49 4d 49 54 20 63  t have a LIMIT c
33480 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a  lause, then the.
33490 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65  first M rows are
334a0 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65   skipped and the
334b0 20 72 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20   remaining rows 
334c0 28 69 66 20 61 6e 79 29 20 61 72 65 20 72 65 74  (if any) are ret
334d0 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a 4f  urned. ^If the.O
334e0 46 46 53 45 54 20 63 6c 61 75 73 65 20 65 76 61  FFSET clause eva
334f0 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61  luates to a nega
33500 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68 65 20  tive value, the 
33510 72 65 73 75 6c 74 73 20 61 72 65 20 74 68 65 20  results are the 
33520 73 61 6d 65 20 61 73 20 69 66 20 69 74 0a 68 61  same as if it.ha
33530 64 20 65 76 61 6c 75 61 74 65 64 20 74 6f 20 7a  d evaluated to z
33540 65 72 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61  ero...<p>^Instea
33550 64 20 6f 66 20 61 20 73 65 70 61 72 61 74 65 20  d of a separate 
33560 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74  OFFSET clause, t
33570 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
33580 6d 61 79 20 73 70 65 63 69 66 79 20 74 77 6f 0a  may specify two.
33590 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
335a0 6e 73 20 73 65 70 61 72 61 74 65 64 20 62 79 20  ns separated by 
335b0 61 20 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68 69  a comma. ^In thi
335c0 73 20 63 61 73 65 2c 20 74 68 65 20 66 69 72 73  s case, the firs
335d0 74 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 73 20  t expression.is 
335e0 75 73 65 64 20 61 73 20 74 68 65 20 4f 46 46 53  used as the OFFS
335f0 45 54 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  ET expression an
33600 64 20 74 68 65 20 73 65 63 6f 6e 64 20 61 73 20  d the second as 
33610 74 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73  the LIMIT expres
33620 73 69 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63 6f  sion..This is co
33630 75 6e 74 65 72 2d 69 6e 74 75 69 74 69 76 65 2c  unter-intuitive,
33640 20 61 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74   as when using t
33650 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
33660 20 74 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a 74   the second of.t
33670 68 65 20 74 77 6f 20 65 78 70 72 65 73 73 69 6f  he two expressio
33680 6e 73 20 69 73 20 74 68 65 20 4f 46 46 53 45 54  ns is the OFFSET
33690 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 20 74   and the first t
336a0 68 65 20 4c 49 4d 49 54 2e 20 0a 54 68 69 73 20  he LIMIT. .This 
336b0 72 65 76 65 72 73 61 6c 20 6f 66 20 74 68 65 20  reversal of the 
336c0 6f 66 66 73 65 74 20 61 6e 64 20 6c 69 6d 69 74  offset and limit
336d0 20 69 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a   is intentional.
336e0 2d 20 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63  - it maximizes c
336f0 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 77 69 74  ompatibility wit
33700 68 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61  h other SQL data
33710 62 61 73 65 20 73 79 73 74 65 6d 73 2e 0a 48 6f  base systems..Ho
33720 77 65 76 65 72 2c 20 74 6f 20 61 76 6f 69 64 20  wever, to avoid 
33730 63 6f 6e 66 75 73 69 6f 6e 2c 20 70 72 6f 67 72  confusion, progr
33740 61 6d 6d 65 72 73 20 61 72 65 20 73 74 72 6f 6e  ammers are stron
33750 67 6c 79 20 65 6e 63 6f 75 72 61 67 65 64 20 74  gly encouraged t
33760 6f 20 75 73 65 0a 74 68 65 20 66 6f 72 6d 20 6f  o use.the form o
33770 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  f the LIMIT clau
33780 73 65 20 74 68 61 74 20 75 73 65 73 20 74 68 65  se that uses the
33790 20 22 4f 46 46 53 45 54 22 20 6b 65 79 77 6f 72   "OFFSET" keywor
337a0 64 20 61 6e 64 20 61 76 6f 69 64 0a 75 73 69 6e  d and avoid.usin
337b0 67 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  g a LIMIT clause
337c0 20 77 69 74 68 20 61 20 63 6f 6d 6d 61 2d 73 65   with a comma-se
337d0 70 61 72 61 74 65 64 20 6f 66 66 73 65 74 2e 0a  parated offset..
337e0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
337f0 74 20 76 61 6c 75 65 73 20 7b 56 41 4c 55 45 53  t values {VALUES
33800 20 63 6c 61 75 73 65 7d 20 56 41 4c 55 45 53 3c   clause} VALUES<
33810 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 56 41  /tcl>.<h3>The VA
33820 4c 55 45 53 20 63 6c 61 75 73 65 3c 2f 68 33 3e  LUES clause</h3>
33830 0a 0a 3c 70 3e 5e 28 54 68 65 20 70 68 72 61 73  ..<p>^(The phras
33840 65 20 22 56 41 4c 55 45 53 28 3c 69 3e 65 78 70  e "VALUES(<i>exp
33850 72 2d 6c 69 73 74 3c 2f 69 3e 29 22 20 6d 65 61  r-list</i>)" mea
33860 6e 73 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ns the same thin
33870 67 0a 61 73 20 22 53 45 4c 45 43 54 20 3c 69 3e  g.as "SELECT <i>
33880 65 78 70 72 2d 6c 69 73 74 3c 2f 69 3e 22 2e 29  expr-list</i>".)
33890 5e 20 20 5e 28 54 68 65 20 70 68 72 61 73 65 0a  ^  ^(The phrase.
338a0 22 56 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d  "VALUES(<i>expr-
338b0 6c 69 73 74 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c  list-1</i>),...,
338c0 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e 3c  (<i>expr-list-N<
338d0 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68 65 20  /i>)" means the 
338e0 73 61 6d 65 0a 74 68 69 6e 67 20 61 73 20 22 53  same.thing as "S
338f0 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69  ELECT <i>expr-li
33900 73 74 2d 31 3c 2f 69 3e 20 55 4e 49 4f 4e 20 41  st-1</i> UNION A
33910 4c 4c 20 2e 2e 2e 20 55 4e 49 4f 4e 20 41 4c 4c  LL ... UNION ALL
33920 0a 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d  .SELECT <i>expr-
33930 6c 69 73 74 2d 4e 3c 2f 69 3e 22 2e 29 5e 20 20  list-N</i>".)^  
33940 42 6f 74 68 20 66 6f 72 6d 73 20 61 72 65 20 74  Both forms are t
33950 68 65 20 73 61 6d 65 2c 20 65 78 63 65 70 74 20  he same, except 
33960 74 68 61 74 0a 74 68 65 20 6e 75 6d 62 65 72 20  that.the number 
33970 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
33980 65 6e 74 73 20 69 6e 20 61 20 63 6f 6d 70 6f 75  ents in a compou
33990 6e 64 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79  nd is limited by
339a0 0a 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43  .[SQLITE_LIMIT_C
339b0 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 5d 20  OMPOUND_SELECT] 
339c0 77 68 65 72 65 61 73 20 74 68 65 20 6e 75 6d 62  whereas the numb
339d0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
339e0 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 68 61  VALUES clause ha
339f0 73 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c  s no arbitrary l
33a00 69 6d 69 74 2e 0a 0a 3c 70 3e 54 68 65 72 65 20  imit...<p>There 
33a10 61 72 65 20 73 6f 6d 65 20 72 65 73 74 72 69 63  are some restric
33a20 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 75 73 65  tions on the use
33a30 20 6f 66 20 61 20 56 41 4c 55 45 53 20 63 6c 61   of a VALUES cla
33a40 75 73 65 20 74 68 61 74 20 61 72 65 0a 6e 6f 74  use that are.not
33a50 20 73 68 6f 77 6e 20 6f 6e 20 74 68 65 20 73 79   shown on the sy
33a60 6e 74 61 78 20 64 69 61 67 72 61 6d 73 3a 0a 0a  ntax diagrams:..
33a70 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20  <ul>.<li><p>.^A 
33a80 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 63 61  VALUES clause ca
33a90 6e 6e 6f 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  nnot be followed
33aa0 20 62 79 20 5b 4f 52 44 45 52 20 42 59 5d 2e 0a   by [ORDER BY]..
33ab0 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55  .<li><p>.^A VALU
33ac0 45 53 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74  ES clause cannot
33ad0 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
33ae0 5b 4c 49 4d 49 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a  [LIMIT]..</ul>..
33af0 0a 3c 68 33 3e 54 68 65 20 57 49 54 48 20 43 6c  .<h3>The WITH Cl
33b00 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 53  ause</h3>..<p>^S
33b10 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
33b20 20 6d 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c   may be optional
33b30 6c 79 20 70 72 65 63 65 64 65 64 20 62 79 20 61  ly preceded by a
33b40 20 73 69 6e 67 6c 65 0a 5b 57 49 54 48 20 63 6c   single.[WITH cl
33b50 61 75 73 65 5d 20 74 68 61 74 20 64 65 66 69 6e  ause] that defin
33b60 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b  es one or more [
33b70 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
33b80 72 65 73 73 69 6f 6e 73 5d 0a 66 6f 72 20 75 73  ressions].for us
33b90 65 20 77 69 74 68 69 6e 20 74 68 65 20 53 45 4c  e within the SEL
33ba0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  ECT statement...
33bb0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
33bc0 20 74 61 62 66 75 6e 63 31 20 7b 74 61 62 6c 65   tabfunc1 {table
33bd0 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e  -valued function
33be0 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  s in the FROM cl
33bf0 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ause}</tcl>.<h3>
33c00 54 61 62 6c 65 2d 76 61 6c 75 65 64 20 46 75 6e  Table-valued Fun
33c10 63 74 69 6f 6e 73 20 49 6e 20 54 68 65 20 46 52  ctions In The FR
33c20 4f 4d 20 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a  OM Clause</h3>..
33c30 3c 70 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61  <p>A [virtual ta
33c40 62 6c 65 5d 20 74 68 61 74 20 63 6f 6e 74 61 69  ble] that contai
33c50 6e 73 20 5b 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ns [hidden colum
33c60 6e 73 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20  ns] can be used 
33c70 6c 69 6b 65 0a 61 20 5b 74 61 62 6c 65 2d 76 61  like.a [table-va
33c80 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 5d 20 69  lued function] i
33c90 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
33ca0 65 2e 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74  e.  The argument
33cb0 73 20 74 6f 20 74 68 65 0a 74 61 62 6c 65 2d 76  s to the.table-v
33cc0 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 20 62  alued function b
33cd0 65 63 6f 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74  ecome constraint
33ce0 73 20 6f 6e 20 74 68 65 20 48 49 44 44 45 4e 20  s on the HIDDEN 
33cf0 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74 68 65 20 76  columns of.the v
33d00 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 41  irtual table.  A
33d10 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
33d20 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75  ation can be fou
33d30 6e 64 20 69 6e 20 74 68 65 0a 5b 74 61 62 6c 65  nd in the.[table
33d40 2d 76 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e  -valued function
33d50 73 7c 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  s|virtual table 
33d60 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 5d 2e 0a  documentation]..
33d70 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
33d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33d90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33dc0 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 55 50  #####.Section UP
33dd0 44 41 54 45 20 75 70 64 61 74 65 20 7b 55 50 44  DATE update {UPD
33de0 41 54 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a 52  ATE *UPDATEs}..R
33df0 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
33e00 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
33e10 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e  t.</tcl>..<p>^An
33e20 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
33e30 74 20 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64  t is used to mod
33e40 69 66 79 20 61 20 73 75 62 73 65 74 20 6f 66 20  ify a subset of 
33e50 74 68 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65  the values store
33e60 64 20 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f  d in .zero or mo
33e70 72 65 20 72 6f 77 73 20 6f 66 20 74 68 65 20 64  re rows of the d
33e80 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 64  atabase table id
33e90 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 20  entified by the 
33ea0 0a 5b 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c  .[qualified-tabl
33eb0 65 2d 6e 61 6d 65 5d 20 73 70 65 63 69 66 69 65  e-name] specifie
33ec0 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
33ed0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
33ee0 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55  t...<p>^If the U
33ef0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
33f00 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20  does not have a 
33f10 57 48 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c  WHERE clause, al
33f20 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 0a 74 61  l rows in the.ta
33f30 62 6c 65 20 61 72 65 20 6d 6f 64 69 66 69 65 64  ble are modified
33f40 20 62 79 20 74 68 65 20 55 50 44 41 54 45 2e 20   by the UPDATE. 
33f50 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20  ^Otherwise, the 
33f60 55 50 44 41 54 45 20 61 66 66 65 63 74 73 20 6f  UPDATE affects o
33f70 6e 6c 79 20 74 68 6f 73 65 0a 72 6f 77 73 20 66  nly those.rows f
33f80 6f 72 20 77 68 69 63 68 20 74 68 65 20 57 48 45  or which the WHE
33f90 52 45 20 63 6c 61 75 73 65 0a 5b 62 6f 6f 6c 65  RE clause.[boole
33fa0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f  an expression|bo
33fb0 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
33fc0 20 69 73 20 74 72 75 65 5d 2e 20 5e 49 74 20 69   is true]. ^It i
33fd0 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 69  s not an error i
33fe0 66 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75  f the.WHERE clau
33ff0 73 65 20 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c  se does not eval
34000 75 61 74 65 20 74 6f 20 74 72 75 65 20 66 6f 72  uate to true for
34010 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 20   any row in the 
34020 74 61 62 6c 65 20 2d 20 74 68 69 73 20 6a 75 73  table - this jus
34030 74 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t.means that the
34040 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
34050 74 20 61 66 66 65 63 74 73 20 7a 65 72 6f 20 72  t affects zero r
34060 6f 77 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64  ows...<p>The mod
34070 69 66 69 63 61 74 69 6f 6e 73 20 6d 61 64 65 20  ifications made 
34080 74 6f 20 65 61 63 68 20 72 6f 77 20 61 66 66 65  to each row affe
34090 63 74 65 64 20 62 79 20 61 6e 20 55 50 44 41 54  cted by an UPDAT
340a0 45 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65 0a  E statement are.
340b0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
340c0 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e  e list of assign
340d0 6d 65 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ments following 
340e0 74 68 65 20 53 45 54 20 6b 65 79 77 6f 72 64 2e  the SET keyword.
340f0 20 45 61 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74   Each.assignment
34100 20 73 70 65 63 69 66 69 65 73 20 61 20 3c 79 79   specifies a <yy
34110 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  term>column-name
34120 3c 2f 79 79 74 65 72 6d 3e 20 74 6f 20 74 68 65  </yyterm> to the
34130 20 6c 65 66 74 20 6f 66 20 74 68 65 20 0a 65 71   left of the .eq
34140 75 61 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 20  uals sign and a 
34150 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
34160 6e 20 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20  n to the right. 
34170 0a 5e 46 6f 72 20 65 61 63 68 20 61 66 66 65 63  .^For each affec
34180 74 65 64 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d  ted row, the nam
34190 65 64 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73  ed columns.are s
341a0 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 73  et to the values
341b0 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61   found by evalua
341c0 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ting the corresp
341d0 6f 6e 64 69 6e 67 20 73 63 61 6c 61 72 20 0a 65  onding scalar .e
341e0 78 70 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20  xpressions. ^If 
341f0 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d  a single column-
34200 6e 61 6d 65 20 61 70 70 65 61 72 73 20 6d 6f 72  name appears mor
34210 65 20 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74  e than once in t
34220 68 65 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67  he list of.assig
34230 6e 6d 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  nment expression
34240 73 2c 20 61 6c 6c 20 62 75 74 20 74 68 65 20 72  s, all but the r
34250 69 67 68 74 6d 6f 73 74 20 6f 63 63 75 72 72 65  ightmost occurre
34260 6e 63 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 20  nce is ignored. 
34270 5e 43 6f 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f  ^Columns.that do
34280 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74   not appear in t
34290 68 65 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67  he list of assig
342a0 6e 6d 65 6e 74 73 20 61 72 65 20 6c 65 66 74 20  nments are left 
342b0 75 6e 6d 6f 64 69 66 69 65 64 2e 20 5e 54 68 65  unmodified. ^The
342c0 20 73 63 61 6c 61 72 0a 65 78 70 72 65 73 73 69   scalar.expressi
342d0 6f 6e 73 20 6d 61 79 20 72 65 66 65 72 20 74 6f  ons may refer to
342e0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
342f0 72 6f 77 20 62 65 69 6e 67 20 75 70 64 61 74 65  row being update
34300 64 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  d. ^In this case
34310 20 61 6c 6c 0a 73 63 61 6c 61 72 20 65 78 70 72   all.scalar expr
34320 65 73 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c  essions are eval
34330 75 61 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79  uated before any
34340 20 61 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65   assignments are
34350 20 6d 61 64 65 2e 0a 0a 3c 70 3e 42 65 67 69 6e   made...<p>Begin
34360 6e 69 6e 67 20 69 6e 20 53 51 4c 69 74 65 20 5b  ning in SQLite [
34370 76 65 72 73 69 6f 6e 20 33 2e 31 35 2e 30 5d 20  version 3.15.0] 
34380 28 5b 64 61 74 65 6f 66 3a 33 2e 31 35 2e 30 5d  ([dateof:3.15.0]
34390 29 2c 20 61 6e 20 61 73 73 69 67 6e 6d 65 6e 74  ), an assignment
343a0 20 69 6e 0a 74 68 65 20 53 45 54 20 63 6c 61 75   in.the SET clau
343b0 73 65 20 63 61 6e 20 62 65 20 61 20 0a 5b 63 6f  se can be a .[co
343c0 6c 75 6d 6e 2d 6e 61 6d 65 2d 6c 69 73 74 7c 70  lumn-name-list|p
343d0 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73  arenthesized lis
343e0 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  t of column name
343f0 73 5d 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 61  s] on the left a
34400 6e 64 20 61 0a 5b 72 6f 77 20 76 61 6c 75 65 5d  nd a.[row value]
34410 20 6f 66 20 74 68 65 20 73 61 6d 65 20 73 69 7a   of the same siz
34420 65 20 6f 6e 20 74 68 65 20 72 69 67 68 74 2e 0a  e on the right..
34430 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e  ..<p>^The option
34440 61 6c 20 22 4f 52 20 3c 69 3e 61 63 74 69 6f 6e  al "OR <i>action
34450 3c 2f 69 3e 22 20 63 6f 6e 66 6c 69 63 74 20 63  </i>" conflict c
34460 6c 61 75 73 65 20 74 68 61 74 20 66 6f 6c 6c 6f  lause that follo
34470 77 73 20 74 68 65 0a 55 50 44 41 54 45 20 6b 65  ws the.UPDATE ke
34480 79 77 6f 72 64 20 61 6c 6c 6f 77 73 20 74 68 65  yword allows the
34490 20 75 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74   user to nominat
344a0 65 20 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e  e a specific.con
344b0 73 74 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74  straint conflict
344c0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f   resolution algo
344d0 72 69 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72  rithm to use dur
344e0 69 6e 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44  ing this one UPD
344f0 41 54 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66  ATE command..Ref
34500 65 72 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f  er to the sectio
34510 6e 20 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43  n entitled [ON C
34520 4f 4e 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64  ONFLICT] for add
34530 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
34540 69 6f 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69  ion...<h3>Restri
34550 63 74 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45  ctions on UPDATE
34560 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68   Statements With
34570 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47 45  in CREATE TRIGGE
34580 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66  R</h3>..<p>The f
34590 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f  ollowing additio
345a0 6e 61 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72  nal syntax restr
345b0 69 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f  ictions apply to
345c0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
345d0 74 73 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69  ts that.occur wi
345e0 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
345f0 20 61 20 5b 43 52 45 41 54 45 20 54 52 49 47 47   a [CREATE TRIGG
34600 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ER] statement.  
34610 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
34620 5e 54 68 65 20 3c 79 79 74 65 72 6d 3e 74 61 62  ^The <yyterm>tab
34630 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
34640 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
34650 72 74 20 6f 66 20 61 6e 20 55 50 44 41 54 45 20  rt of an UPDATE 
34660 0a 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74  .      statement
34670 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20   within.      a 
34680 74 72 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73  trigger body mus
34690 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64  t be unqualified
346a0 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72  . ^(In other wor
346b0 64 73 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69  ds, the.      <i
346c0 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e  >schema-name</i>
346d0 3c 62 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20  <b>.</b> prefix 
346e0 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  on the table nam
346f0 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20  e of the UPDATE 
34700 69 73 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c  is.      not all
34710 6f 77 65 64 20 77 69 74 68 69 6e 20 74 72 69 67  owed within trig
34720 67 65 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20  gers.)^ ^Unless 
34730 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69  the table to whi
34740 63 68 20 74 68 65 20 74 72 69 67 67 65 72 0a 20  ch the trigger. 
34750 20 20 20 20 20 69 73 20 61 74 74 61 63 68 65 64       is attached
34760 20 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20   is in the TEMP 
34770 64 61 74 61 62 61 73 65 2c 20 74 68 65 20 74 61  database, the ta
34780 62 6c 65 20 62 65 69 6e 67 20 75 70 64 61 74 65  ble being update
34790 64 20 62 79 20 74 68 65 0a 20 20 20 20 20 20 74  d by the.      t
347a0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 6d  rigger program m
347b0 75 73 74 20 72 65 73 69 64 65 20 69 6e 20 74 68  ust reside in th
347c0 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
347d0 61 73 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74  as it. ^If the t
347e0 61 62 6c 65 0a 20 20 20 20 20 20 74 6f 20 77 68  able.      to wh
347f0 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
34800 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69  is attached is i
34810 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  n the TEMP datab
34820 61 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ase, then the.  
34830 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20      unqualified 
34840 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
34850 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20  e being updated 
34860 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74  is resolved in t
34870 68 65 20 73 61 6d 65 20 77 61 79 0a 20 20 20 20  he same way.    
34880 20 20 61 73 20 69 74 20 69 73 20 66 6f 72 20 61    as it is for a
34890 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
348a0 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69  ment (by searchi
348b0 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d  ng first the TEM
348c0 50 20 64 61 74 61 62 61 73 65 2c 0a 20 20 20 20  P database,.    
348d0 20 20 74 68 65 6e 20 74 68 65 20 6d 61 69 6e 20    then the main 
348e0 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61  database, then a
348f0 6e 79 20 6f 74 68 65 72 20 64 61 74 61 62 61 73  ny other databas
34900 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  es in the order 
34910 74 68 65 79 20 77 65 72 65 0a 20 20 20 20 20 20  they were.      
34920 61 74 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c  attached)...  <l
34930 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  i><p>^The INDEXE
34940 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
34950 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
34960 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20   not allowed on 
34970 55 50 44 41 54 45 0a 20 20 20 20 20 20 73 74 61  UPDATE.      sta
34980 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
34990 72 69 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20  riggers.</p>..  
349a0 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49  <li><p>^The LIMI
349b0 54 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63  T and ORDER BY c
349c0 6c 61 75 73 65 73 20 66 6f 72 20 55 50 44 41 54  lauses for UPDAT
349d0 45 20 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65  E are unsupporte
349e0 64 20 77 69 74 68 69 6e 0a 20 20 20 20 20 20 74  d within.      t
349f0 72 69 67 67 65 72 73 2c 20 72 65 67 61 72 64 6c  riggers, regardl
34a00 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ess of the compi
34a10 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75  lation options u
34a20 73 65 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c  sed to build SQL
34a30 69 74 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e  ite..</ul>..<h3>
34a40 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61  Optional LIMIT a
34a50 6e 64 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75  nd ORDER BY Clau
34a60 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49  ses</h3>..<p>^(I
34a70 66 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c  f SQLite is buil
34a80 74 20 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49  t with the [SQLI
34a90 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
34aa0 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63  _DELETE_LIMIT].c
34ab0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
34ac0 6f 6e 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74  on then the synt
34ad0 61 78 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  ax of the UPDATE
34ae0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
34af0 74 65 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69  tended.with opti
34b00 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e  onal ORDER BY an
34b10 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29  d LIMIT clauses)
34b20 5e 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  ^ as follows:</p
34b30 3e 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69  >..<tcl>BubbleDi
34b40 61 67 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d  agram update-stm
34b50 74 2d 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a  t-limited</tcl>.
34b60 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54  .<p>^If an UPDAT
34b70 45 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  E statement has 
34b80 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
34b90 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
34ba0 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a  er of rows that.
34bb0 77 69 6c 6c 20 62 65 20 75 70 64 61 74 65 64 20  will be updated 
34bc0 69 73 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c  is found by eval
34bd0 75 61 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d  uating the accom
34be0 70 61 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69  panying expressi
34bf0 6f 6e 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69  on and casting.i
34c00 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
34c10 76 61 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74 69  value. ^A negati
34c20 76 65 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65  ve value is inte
34c30 72 70 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c  rpreted as "no l
34c40 69 6d 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74  imit"...<p>^If t
34c50 68 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  he LIMIT express
34c60 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
34c70 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61   non-negative va
34c80 6c 75 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64  lue <i>N</i> and
34c90 20 74 68 65 0a 55 50 44 41 54 45 20 73 74 61 74   the.UPDATE stat
34ca0 65 6d 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44  ement has an ORD
34cb0 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68  ER BY clause, th
34cc0 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74  en all rows that
34cd0 20 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65   would be update
34ce0 64 20 69 6e 0a 74 68 65 20 61 62 73 65 6e 63 65  d in.the absence
34cf0 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c   of the LIMIT cl
34d00 61 75 73 65 20 61 72 65 20 73 6f 72 74 65 64 20  ause are sorted 
34d10 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
34d20 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 74 68   ORDER BY and th
34d30 65 0a 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e  e.first <i>N</i>
34d40 20 75 70 64 61 74 65 64 2e 20 5e 28 49 66 20 74   updated. ^(If t
34d50 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
34d60 65 6e 74 20 61 6c 73 6f 20 68 61 73 20 61 6e 20  ent also has an 
34d70 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74  OFFSET clause,.t
34d80 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61  hen it is simila
34d90 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e  rly evaluated an
34da0 64 20 63 61 73 74 20 74 6f 20 61 6e 20 69 6e 74  d cast to an int
34db0 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74  eger value. If t
34dc0 68 65 20 4f 46 46 53 45 54 0a 65 78 70 72 65 73  he OFFSET.expres
34dd0 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74  sion evaluates t
34de0 6f 20 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  o a non-negative
34df0 20 76 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c   value <i>M</i>,
34e00 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20   then the first 
34e10 3c 69 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72  <i>M</i>.rows ar
34e20 65 20 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68  e skipped and th
34e30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e  e following <i>N
34e40 3c 2f 69 3e 20 72 6f 77 73 20 75 70 64 61 74 65  </i> rows update
34e50 64 20 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70  d instead.)^..<p
34e60 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45 20  >^If the UPDATE 
34e70 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f  statement has no
34e80 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
34e90 2c 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20  , then all rows 
34ea0 74 68 61 74 0a 77 6f 75 6c 64 20 62 65 20 75 70  that.would be up
34eb0 64 61 74 65 64 20 69 6e 20 74 68 65 20 61 62 73  dated in the abs
34ec0 65 6e 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49  ence of the LIMI
34ed0 54 20 63 6c 61 75 73 65 20 61 72 65 20 61 73 73  T clause are ass
34ee0 65 6d 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62  embled in an.arb
34ef0 69 74 72 61 72 79 20 6f 72 64 65 72 20 62 65 66  itrary order bef
34f00 6f 72 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65  ore applying the
34f10 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
34f20 54 20 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74  T clauses to det
34f30 65 72 6d 69 6e 65 20 0a 77 68 69 63 68 20 61 72  ermine .which ar
34f40 65 20 61 63 74 75 61 6c 6c 79 20 75 70 64 61 74  e actually updat
34f50 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52  ed...<p>^(The OR
34f60 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
34f70 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
34f80 6d 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c  ment is used onl
34f90 79 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  y to determine w
34fa0 68 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77  hich.rows fall w
34fb0 69 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e  ithin the LIMIT.
34fc0 20 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   The order in wh
34fd0 69 63 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64  ich rows are mod
34fe0 69 66 69 65 64 20 69 73 20 61 72 62 69 74 72 61  ified is arbitra
34ff0 72 79 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e  ry.and is not in
35000 66 6c 75 65 6e 63 65 64 20 62 79 20 74 68 65 20  fluenced by the 
35010 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
35020 29 5e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23  )^..<tcl>.######
35030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35070 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e  ########.Section
35080 20 56 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56   VACUUM vacuum V
35090 41 43 55 55 4d 0a 0a 52 65 63 75 72 73 69 76 65  ACUUM..Recursive
350a0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61  BubbleDiagram va
350b0 63 75 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  cuum-stmt.</tcl>
350c0 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55  ..<p>.  The VACU
350d0 55 4d 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69  UM command rebui
350e0 6c 64 73 20 74 68 65 20 64 61 74 61 62 61 73 65  lds the database
350f0 20 66 69 6c 65 2c 20 72 65 70 61 63 6b 69 6e 67   file, repacking
35100 20 69 74 20 69 6e 74 6f 20 61 20 6d 69 6e 69 6d   it into a minim
35110 61 6c 0a 20 20 61 6d 6f 75 6e 74 20 6f 66 20 64  al.  amount of d
35120 69 73 6b 20 73 70 61 63 65 2e 20 54 68 65 72 65  isk space. There
35130 20 61 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20   are several .  
35140 72 65 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69  reasons an appli
35150 63 61 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20  cation might do 
35160 74 68 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c  this:..<ul>.  <l
35170 69 3e 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53  i> <p> ^Unless S
35180 51 4c 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67  QLite is running
35190 20 69 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d   in "auto_vacuum
351a0 3d 46 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65  =FULL" mode, whe
351b0 6e 20 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61  n a large.     a
351c0 6d 6f 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73  mount of data is
351d0 20 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68   deleted from th
351e0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
351f0 69 74 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64  it leaves behind
35200 20 65 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63   empty.     spac
35210 65 2c 20 6f 72 20 22 66 72 65 65 22 20 64 61 74  e, or "free" dat
35220 61 62 61 73 65 20 70 61 67 65 73 2e 20 54 68 69  abase pages. Thi
35230 73 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  s means the data
35240 62 61 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a  base file might.
35250 20 20 20 20 20 62 65 20 6c 61 72 67 65 72 20 74       be larger t
35260 68 61 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63  han strictly nec
35270 65 73 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67  essary. ^Running
35280 20 56 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69   VACUUM to rebui
35290 6c 64 20 74 68 65 20 0a 20 20 20 20 20 64 61 74  ld the .     dat
352a0 61 62 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74  abase reclaims t
352b0 68 69 73 20 73 70 61 63 65 20 61 6e 64 20 72 65  his space and re
352c0 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f  duces the size o
352d0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
352e0 69 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e  ile...  <li> <p>
352f0 20 5e 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72   ^Frequent inser
35300 74 73 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64  ts, updates, and
35310 20 64 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75   deletes can cau
35320 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  se the database 
35330 66 69 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63  file.     to bec
35340 6f 6d 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d  ome fragmented -
35350 20 77 68 65 72 65 20 64 61 74 61 20 66 6f 72 20   where data for 
35360 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f  a single table o
35370 72 20 69 6e 64 65 78 20 69 73 20 73 63 61 74 74  r index is scatt
35380 65 72 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e  ered .     aroun
35390 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  d the database f
353a0 69 6c 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41  ile. ^Running VA
353b0 43 55 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61  CUUM ensures tha
353c0 74 20 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64  t each table and
353d0 0a 20 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c  .     index is l
353e0 61 72 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f  argely stored co
353f0 6e 74 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69  ntiguously withi
35400 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
35410 69 6c 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20  ile. ^In some.  
35420 20 20 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d     cases, VACUUM
35430 20 6d 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65   may also reduce
35440 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
35450 61 72 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20  artially filled 
35460 70 61 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68  pages in.     th
35470 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 64 75  e database, redu
35480 63 69 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66  cing the size of
35490 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
354a0 6c 65 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c  le further...  <
354b0 6c 69 3e 20 3c 70 3e 20 57 68 65 6e 20 63 6f 6e  li> <p> When con
354c0 74 65 6e 74 20 69 73 20 64 65 6c 65 74 65 64 20  tent is deleted 
354d0 66 72 6f 6d 20 61 6e 20 53 51 4c 69 74 65 20 64  from an SQLite d
354e0 61 74 61 62 61 73 65 2c 20 74 68 65 20 63 6f 6e  atabase, the con
354f0 74 65 6e 74 20 69 73 20 6e 6f 74 0a 20 20 20 20  tent is not.    
35500 20 75 73 75 61 6c 6c 79 20 65 72 61 73 65 64 20   usually erased 
35510 62 75 74 20 72 61 74 68 65 72 20 74 68 65 20 73  but rather the s
35520 70 61 63 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  pace used to hol
35530 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73  d the content is
35540 20 6d 61 72 6b 65 64 20 61 73 0a 20 20 20 20 20   marked as.     
35550 62 65 69 6e 67 20 61 76 61 69 6c 61 62 6c 65 20  being available 
35560 66 6f 72 20 72 65 75 73 65 2e 20 20 54 68 69 73  for reuse.  This
35570 20 63 61 6e 20 61 6c 6c 6f 77 20 64 65 6c 65 74   can allow delet
35580 65 64 20 63 6f 6e 74 65 6e 74 20 74 6f 20 62 65  ed content to be
35590 20 72 65 63 6f 76 65 72 65 64 0a 20 20 20 20 20   recovered.     
355a0 62 79 20 61 20 68 61 63 6b 65 72 20 6f 72 20 62  by a hacker or b
355b0 79 20 66 6f 72 65 6e 73 69 63 20 61 6e 61 6c 79  y forensic analy
355c0 73 69 73 2e 20 20 52 75 6e 6e 69 6e 67 20 56 41  sis.  Running VA
355d0 43 55 55 4d 20 77 69 6c 6c 20 63 6c 65 61 6e 20  CUUM will clean 
355e0 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
355f0 20 20 6f 66 20 61 6c 6c 20 74 72 61 63 65 73 20    of all traces 
35600 6f 66 20 64 65 6c 65 74 65 64 20 63 6f 6e 74 65  of deleted conte
35610 6e 74 2c 20 74 68 75 73 20 70 72 65 76 65 6e 74  nt, thus prevent
35620 69 6e 67 20 61 6e 20 61 64 76 65 72 73 61 72 79  ing an adversary
35630 20 66 72 6f 6d 20 72 65 63 6f 76 65 72 69 6e 67   from recovering
35640 0a 20 20 20 20 20 64 65 6c 65 74 65 64 20 63 6f  .     deleted co
35650 6e 74 65 6e 74 2e 20 20 55 73 69 6e 67 20 56 41  ntent.  Using VA
35660 43 55 55 4d 20 69 6e 20 74 68 69 73 20 77 61 79  CUUM in this way
35670 20 69 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69   is an alternati
35680 76 65 20 74 6f 20 73 65 74 74 69 6e 67 0a 20 20  ve to setting.  
35690 20 20 20 5b 50 52 41 47 4d 41 20 73 65 63 75 72     [PRAGMA secur
356a0 65 5f 64 65 6c 65 74 65 3d 4f 4e 5d 2e 20 0a 0a  e_delete=ON]. ..
356b0 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 4e 6f 72 6d    <li> <p> ^Norm
356c0 61 6c 6c 79 2c 20 74 68 65 20 64 61 74 61 62 61  ally, the databa
356d0 73 65 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61  se [page_size] a
356e0 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  nd whether or no
356f0 74 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  t the database. 
35700 20 20 20 20 73 75 70 70 6f 72 74 73 20 5b 61 75      supports [au
35710 74 6f 5f 76 61 63 75 75 6d 5d 20 6d 75 73 74 20  to_vacuum] must 
35720 62 65 20 63 6f 6e 66 69 67 75 72 65 64 20 62 65  be configured be
35730 66 6f 72 65 20 74 68 65 20 64 61 74 61 62 61 73  fore the databas
35740 65 20 66 69 6c 65 20 69 73 0a 20 20 20 20 20 61  e file is.     a
35750 63 74 75 61 6c 6c 79 20 63 72 65 61 74 65 64 2e  ctually created.
35760 20 5e 48 6f 77 65 76 65 72 2c 20 77 68 65 6e 20   ^However, when 
35770 6e 6f 74 20 69 6e 20 5b 77 72 69 74 65 2d 61 68  not in [write-ah
35780 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 74  ead log] mode, t
35790 68 65 20 0a 20 20 20 20 20 5b 70 61 67 65 5f 73  he .     [page_s
357a0 69 7a 65 5d 20 61 6e 64 2f 6f 72 20 5b 61 75 74  ize] and/or [aut
357b0 6f 5f 76 61 63 75 75 6d 5d 20 70 72 6f 70 65 72  o_vacuum] proper
357c0 74 69 65 73 20 6f 66 20 61 6e 20 65 78 69 73 74  ties of an exist
357d0 69 6e 67 20 64 61 74 61 62 61 73 65 20 6d 61 79  ing database may
357e0 20 62 65 0a 20 20 20 20 20 63 68 61 6e 67 65 64   be.     changed
357f0 20 62 79 20 75 73 69 6e 67 20 74 68 65 20 5b 70   by using the [p
35800 61 67 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 7c  age_size pragma|
35810 70 61 67 65 5f 73 69 7a 65 5d 20 20 61 6e 64 2f  page_size]  and/
35820 6f 72 20 0a 20 20 20 20 20 5b 61 75 74 6f 5f 76  or .     [auto_v
35830 61 63 75 75 6d 7c 70 72 61 67 6d 61 20 61 75 74  acuum|pragma aut
35840 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d 61  o_vacuum] pragma
35850 73 20 61 6e 64 20 74 68 65 6e 20 69 6d 6d 65 64  s and then immed
35860 69 61 74 65 6c 79 20 56 41 43 55 55 4d 69 6e 67  iately VACUUMing
35870 0a 20 20 20 20 20 74 68 65 20 64 61 74 61 62 61  .     the databa
35880 73 65 2e 20 5e 57 68 65 6e 20 69 6e 20 5b 77 72  se. ^When in [wr
35890 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 20 6d  ite-ahead log] m
358a0 6f 64 65 2c 20 6f 6e 6c 79 20 74 68 65 20 5b 61  ode, only the [a
358b0 75 74 6f 5f 76 61 63 75 75 6d 5d 0a 20 20 20 20  uto_vacuum].    
358c0 20 73 75 70 70 6f 72 74 20 70 72 6f 70 65 72 74   support propert
358d0 79 20 63 61 6e 20 62 65 20 63 68 61 6e 67 65 64  y can be changed
358e0 20 75 73 69 6e 67 20 56 41 43 55 55 4d 2e 0a 3c   using VACUUM..<
358f0 2f 75 6c 3e 0a 0a 3c 70 3e 5e 42 79 20 64 65 66  /ul>..<p>^By def
35900 61 75 6c 74 2c 20 56 41 43 55 55 4d 20 6f 6e 6c  ault, VACUUM onl
35910 79 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 6f 6e 20  y works only on 
35920 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
35930 65 2e 0a 5e 5b 41 54 54 41 43 48 7c 41 74 74 61  e..^[ATTACH|Atta
35940 63 68 65 64 20 64 61 74 61 62 61 73 65 73 5d 20  ched databases] 
35950 63 61 6e 20 62 65 20 76 61 63 75 75 6d 65 64 20  can be vacuumed 
35960 62 79 20 61 70 70 65 6e 64 69 6e 67 20 74 68 65  by appending the
35970 20 61 70 70 72 6f 70 72 69 61 74 65 0a 3c 79 79   appropriate.<yy
35980 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
35990 3c 2f 79 79 74 65 72 6d 3e 20 74 6f 20 74 68 65  </yyterm> to the
359a0 20 56 41 43 55 55 4d 20 73 74 61 74 65 6d 65 6e   VACUUM statemen
359b0 74 2e 0a 0a 3c 70 3e 3c 62 3e 43 6f 6d 70 61 74  t...<p><b>Compat
359c0 69 62 69 6c 69 74 79 20 57 61 72 6e 69 6e 67 3a  ibility Warning:
359d0 3c 2f 62 3e 20 54 68 65 20 61 62 69 6c 69 74 79  </b> The ability
359e0 20 74 6f 20 76 61 63 75 75 6d 20 61 74 74 61 63   to vacuum attac
359f0 68 65 64 20 64 61 74 61 62 61 73 65 73 20 77 61  hed databases wa
35a00 73 0a 61 64 64 65 64 20 69 6e 20 5b 76 65 72 73  s.added in [vers
35a10 69 6f 6e 20 33 2e 31 35 2e 30 5d 20 28 5b 64 61  ion 3.15.0] ([da
35a20 74 65 6f 66 3a 33 2e 31 35 2e 30 5d 29 2e 20 20  teof:3.15.0]).  
35a30 50 72 69 6f 72 20 74 6f 20 74 68 61 74 2c 20 61  Prior to that, a
35a40 20 0a 3c 79 79 74 65 72 6d 3e 73 63 68 65 6d 61   .<yyterm>schema
35a50 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 61  -name</yyterm> a
35a60 64 64 65 64 20 74 6f 20 74 68 65 0a 56 41 43 55  dded to the.VACU
35a70 55 4d 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  UM statement wou
35a80 6c 64 20 62 65 20 73 69 6c 65 6e 74 6c 79 20 69  ld be silently i
35a90 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 22  gnored and the "
35aa0 6d 61 69 6e 22 20 73 63 68 65 6d 61 20 77 6f 75  main" schema wou
35ab0 6c 64 20 62 65 0a 76 61 63 75 75 6d 65 64 2e 3c  ld be.vacuumed.<
35ac0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
35ad0 67 6d 65 6e 74 20 76 61 63 75 75 6d 69 6e 74 6f  gment vacuuminto
35ae0 20 7b 56 41 43 55 55 4d 20 49 4e 54 4f 7d 3c 2f   {VACUUM INTO}</
35af0 74 63 6c 3e 0a 3c 68 33 3e 56 41 43 55 55 4d 20  tcl>.<h3>VACUUM 
35b00 77 69 74 68 20 61 6e 20 49 4e 54 4f 20 63 6c 61  with an INTO cla
35b10 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 49 66  use</h3>..<p>^If
35b20 20 74 68 65 20 49 4e 54 4f 20 63 6c 61 75 73 65   the INTO clause
35b30 20 69 73 20 69 6e 63 6c 75 64 65 64 2c 20 74 68   is included, th
35b40 65 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  en the original 
35b50 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
35b60 0a 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 61  .unchanged and a
35b70 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 69 73   new database is
35b80 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20   created in the 
35b90 66 69 6c 65 6e 61 6d 65 20 67 69 76 65 6e 20 62  filename given b
35ba0 79 20 74 68 65 0a 61 72 67 75 6d 65 6e 74 20 74  y the.argument t
35bb0 6f 20 74 68 65 20 49 4e 54 4f 20 63 6c 61 75 73  o the INTO claus
35bc0 65 2e 20 20 54 68 65 20 6e 65 77 20 64 61 74 61  e.  The new data
35bd0 62 61 73 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69  base will contai
35be0 6e 20 74 68 65 20 73 61 6d 65 0a 6c 6f 67 69 63  n the same.logic
35bf0 61 6c 20 63 6f 6e 74 65 6e 74 20 61 73 20 74 68  al content as th
35c00 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61 62  e original datab
35c10 61 73 65 2c 20 66 75 6c 6c 79 20 76 61 63 75 75  ase, fully vacuu
35c20 6d 65 64 2e 0a 0a 3c 70 3e 0a 54 68 65 20 56 41  med...<p>.The VA
35c30 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 77 69 74  CUUM command wit
35c40 68 20 61 6e 20 49 4e 54 4f 20 63 6c 61 75 73 65  h an INTO clause
35c50 20 69 73 20 61 6e 20 61 6c 74 65 72 6e 61 74 69   is an alternati
35c60 76 65 20 74 6f 20 74 68 65 0a 5b 62 61 63 6b 75  ve to the.[backu
35c70 70 20 41 50 49 5d 20 66 6f 72 20 67 65 6e 65 72  p API] for gener
35c80 61 74 69 6e 67 20 62 61 63 6b 75 70 20 63 6f 70  ating backup cop
35c90 69 65 73 20 6f 66 20 61 20 6c 69 76 65 20 64 61  ies of a live da
35ca0 74 61 62 61 73 65 2e 0a 54 68 65 20 61 64 76 61  tabase..The adva
35cb0 6e 74 61 67 65 20 6f 66 20 75 73 69 6e 67 20 56  ntage of using V
35cc0 41 43 55 55 4d 20 49 4e 54 4f 20 69 73 20 74 68  ACUUM INTO is th
35cd0 61 74 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67  at the resulting
35ce0 20 62 61 63 6b 75 70 0a 64 61 74 61 62 61 73 65   backup.database
35cf0 20 69 73 20 6d 69 6e 69 6d 61 6c 20 69 6e 20 73   is minimal in s
35d00 69 7a 65 20 61 6e 64 20 68 65 6e 63 65 20 74 68  ize and hence th
35d10 65 20 61 6d 6f 75 6e 74 20 6f 66 20 66 69 6c 65  e amount of file
35d20 73 79 73 74 65 6d 0a 49 2f 4f 20 6d 61 79 20 62  system.I/O may b
35d30 65 20 72 65 64 75 63 65 64 2e 20 20 41 6c 73 6f  e reduced.  Also
35d40 2c 20 61 6c 6c 20 64 65 6c 65 74 65 64 20 63 6f  , all deleted co
35d50 6e 74 65 6e 74 20 69 73 20 70 75 72 67 65 64 20  ntent is purged 
35d60 66 72 6f 6d 20 74 68 65 0a 62 61 63 6b 75 70 2c  from the.backup,
35d70 20 6c 65 61 76 69 6e 67 20 62 65 68 69 6e 64 20   leaving behind 
35d80 6e 6f 20 66 6f 72 65 6e 73 69 63 20 74 72 61 63  no forensic trac
35d90 65 73 2e 20 20 4f 6e 20 74 68 65 20 6f 74 68 65  es.  On the othe
35da0 72 20 68 61 6e 64 2c 0a 74 68 65 20 5b 62 61 63  r hand,.the [bac
35db0 6b 75 70 20 41 50 49 5d 20 75 73 65 73 20 66 65  kup API] uses fe
35dc0 77 65 72 20 43 50 55 20 63 79 63 6c 65 73 20 61  wer CPU cycles a
35dd0 6e 64 20 63 61 6e 20 62 65 20 65 78 65 63 75 74  nd can be execut
35de0 65 64 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 6c 79  ed.incrementally
35df0 2e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 66 69 6c 65  ...<p>.^The file
35e00 6e 61 6d 65 20 69 6e 20 74 68 65 20 49 4e 54 4f  name in the INTO
35e10 20 63 6c 61 75 73 65 20 63 61 6e 20 62 65 20 61   clause can be a
35e20 6e 20 61 72 62 69 74 72 61 72 79 20 53 51 4c 20  n arbitrary SQL 
35e30 65 78 70 72 65 73 73 69 6f 6e 0a 74 68 61 74 20  expression.that 
35e40 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 73  evaluates to a s
35e50 74 72 69 6e 67 2e 0a 5e 54 68 65 20 66 69 6c 65  tring..^The file
35e60 20 6e 61 6d 65 64 20 62 79 20 74 68 65 20 49 4e   named by the IN
35e70 54 4f 20 63 6c 61 75 73 65 20 6d 75 73 74 20 6e  TO clause must n
35e80 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 65 78  ot previously ex
35e90 69 73 74 2c 20 6f 72 0a 65 6c 73 65 20 69 74 20  ist, or.else it 
35ea0 6d 75 73 74 20 62 65 20 61 6e 20 65 6d 70 74 79  must be an empty
35eb0 20 66 69 6c 65 2c 20 6f 72 20 74 68 65 20 56 41   file, or the VA
35ec0 43 55 55 4d 20 49 4e 54 4f 20 63 6f 6d 6d 61 6e  CUUM INTO comman
35ed0 64 20 77 69 6c 6c 0a 66 61 69 6c 20 77 69 74 68  d will.fail with
35ee0 20 61 6e 20 65 72 72 6f 72 2e 0a 0a 3c 70 3e 0a   an error...<p>.
35ef0 5e 54 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  ^The argument to
35f00 20 49 4e 54 4f 20 63 61 6e 20 62 65 20 61 20 5b   INTO can be a [
35f10 55 52 49 20 66 69 6c 65 6e 61 6d 65 5d 20 69 66  URI filename] if
35f20 20 55 52 49 20 66 69 6c 65 6e 61 6d 65 73 0a 61   URI filenames.a
35f30 72 65 20 65 6e 61 62 6c 65 64 2e 0a 55 52 4c 20  re enabled..URL 
35f40 66 69 6c 65 6e 61 6d 65 73 20 61 72 65 20 65 6e  filenames are en
35f50 61 62 6c 65 64 20 69 66 20 61 6e 79 20 6f 66 20  abled if any of 
35f60 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  the following ar
35f70 65 20 74 72 75 65 3a 0a 3c 75 6c 3e 0a 3c 6c 69  e true:.<ul>.<li
35f80 3e 20 54 68 65 20 53 51 4c 69 74 65 20 6c 69 62  > The SQLite lib
35f90 72 61 72 79 20 77 61 73 20 63 6f 6d 70 69 6c 65  rary was compile
35fa0 64 20 77 69 74 68 20 5b 2d 44 53 51 4c 49 54 45  d with [-DSQLITE
35fb0 5f 55 53 45 5f 55 52 49 3d 31 5d 2e 0a 3c 6c 69  _USE_URI=1]..<li
35fc0 3e 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  > The [sqlite3_c
35fd0 6f 6e 66 69 67 5d 28 5b 53 51 4c 49 54 45 5f 43  onfig]([SQLITE_C
35fe0 4f 4e 46 49 47 5f 55 52 49 5d 2c 31 29 20 69 6e  ONFIG_URI],1) in
35ff0 74 65 72 66 61 63 65 73 20 77 61 73 0a 20 20 20  terfaces was.   
36000 20 20 69 6e 76 6f 6b 65 64 20 61 74 20 73 74 61    invoked at sta
36010 72 74 2d 74 69 6d 65 2e 0a 3c 6c 69 3e 20 54 68  rt-time..<li> Th
36020 65 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  e [database conn
36030 65 63 74 69 6f 6e 5d 20 74 68 61 74 20 69 73 20  ection] that is 
36040 72 75 6e 6e 69 6e 67 20 74 68 65 20 56 41 43 55  running the VACU
36050 55 4d 20 49 4e 54 4f 0a 20 20 20 20 20 73 74 61  UM INTO.     sta
36060 74 65 6d 65 6e 74 20 77 61 73 20 6f 72 69 67 69  tement was origi
36070 6e 61 6c 6c 79 20 6f 70 65 6e 65 64 20 75 73 69  nally opened usi
36080 6e 67 20 74 68 65 0a 20 20 20 20 20 5b 53 51 4c  ng the.     [SQL
36090 49 54 45 5f 4f 50 45 4e 5f 55 52 49 5d 20 66 6c  ITE_OPEN_URI] fl
360a0 61 67 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 0a 54  ag..</ul>..<p>.T
360b0 68 65 20 56 41 43 55 55 4d 20 49 4e 54 4f 20 63  he VACUUM INTO c
360c0 6f 6d 6d 61 6e 64 20 69 73 20 74 72 61 6e 73 61  ommand is transa
360d0 63 74 69 6f 6e 61 6c 20 69 6e 20 74 68 65 20 73  ctional in the s
360e0 65 6e 73 65 20 74 68 61 74 0a 74 68 65 20 67 65  ense that.the ge
360f0 6e 65 72 61 74 65 64 20 6f 75 74 70 75 74 20 64  nerated output d
36100 61 74 61 62 61 73 65 20 69 73 20 61 20 63 6f 6e  atabase is a con
36110 73 69 73 74 65 6e 74 20 73 6e 61 70 73 68 6f 74  sistent snapshot
36120 20 6f 66 20 74 68 65 0a 6f 72 69 67 69 6e 61 6c   of the.original
36130 20 64 61 74 61 62 61 73 65 2e 20 20 48 6f 77 65   database.  Howe
36140 76 65 72 2c 20 69 66 20 74 68 65 20 56 41 43 55  ver, if the VACU
36150 55 4d 20 49 4e 54 4f 20 63 6f 6d 6d 61 6e 64 20  UM INTO command 
36160 69 73 0a 69 6e 74 65 72 72 75 70 74 65 64 20 62  is.interrupted b
36170 79 20 61 20 75 6e 70 6c 61 6e 6e 65 64 20 73 68  y a unplanned sh
36180 75 74 64 6f 77 6e 20 6f 72 20 70 6f 77 65 72 20  utdown or power 
36190 6c 6f 73 65 2c 20 74 68 65 6e 0a 74 68 65 20 67  lose, then.the g
361a0 65 6e 65 72 61 74 65 64 20 6f 75 74 70 75 74 20  enerated output 
361b0 64 61 74 61 62 61 73 65 20 6d 69 67 68 74 20 62  database might b
361c0 65 20 69 6e 63 6f 6d 70 6c 65 74 65 20 61 6e 64  e incomplete and
361d0 20 63 6f 72 72 75 70 74 2e 0a 41 6c 73 6f 2c 20   corrupt..Also, 
361e0 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20  SQLite does not 
361f0 69 6e 76 6f 6b 65 20 66 73 79 6e 63 28 29 20 6f  invoke fsync() o
36200 72 20 46 6c 75 73 68 46 69 6c 65 42 75 66 66 65  r FlushFileBuffe
36210 72 73 28 29 0a 6f 6e 20 74 68 65 20 67 65 6e 65  rs().on the gene
36220 72 61 74 65 64 20 64 61 74 61 62 61 73 65 20 74  rated database t
36230 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 69 74  o ensure that it
36240 20 68 61 73 20 72 65 61 63 68 65 64 0a 6e 6f 6e   has reached.non
36250 2d 76 6f 6c 61 74 69 6c 65 20 73 74 6f 72 61 67  -volatile storag
36260 65 20 62 65 66 6f 72 65 20 63 6f 6d 70 6c 65 74  e before complet
36270 69 6e 67 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ing....<tcl>hd_f
36280 72 61 67 6d 65 6e 74 20 68 6f 77 76 61 63 75 75  ragment howvacuu
36290 6d 77 6f 72 6b 73 20 7b 68 6f 77 20 76 61 63 75  mworks {how vacu
362a0 75 6d 20 77 6f 72 6b 73 7d 3c 2f 74 63 6c 3e 0a  um works}</tcl>.
362b0 3c 68 33 3e 48 6f 77 20 56 41 43 55 55 4d 20 77  <h3>How VACUUM w
362c0 6f 72 6b 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54  orks</h3>..<p>^T
362d0 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d 61 6e  he VACUUM comman
362e0 64 20 77 6f 72 6b 73 20 62 79 20 63 6f 70 79 69  d works by copyi
362f0 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  ng the contents 
36300 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
36310 69 6e 74 6f 0a 61 20 74 65 6d 70 6f 72 61 72 79  into.a temporary
36320 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
36330 6e 64 20 74 68 65 6e 20 6f 76 65 72 77 72 69 74  nd then overwrit
36340 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  ing the original
36350 20 77 69 74 68 20 74 68 65 20 0a 63 6f 6e 74 65   with the .conte
36360 6e 74 73 20 6f 66 20 74 68 65 20 74 65 6d 70 6f  nts of the tempo
36370 72 61 72 79 20 66 69 6c 65 2e 20 5e 57 68 65 6e  rary file. ^When
36380 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74 68 65   overwriting the
36390 20 6f 72 69 67 69 6e 61 6c 2c 20 61 20 72 6f 6c   original, a rol
363a0 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72  lback.journal or
363b0 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f   [write-ahead lo
363c0 67 5d 20 57 41 4c 20 66 69 6c 65 20 69 73 20 75  g] WAL file is u
363d0 73 65 64 20 6a 75 73 74 20 61 73 20 69 74 20 77  sed just as it w
363e0 6f 75 6c 64 20 62 65 20 66 6f 72 20 61 6e 79 0a  ould be for any.
363f0 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20 74  other database t
36400 72 61 6e 73 61 63 74 69 6f 6e 2e 20 5e 54 68 69  ransaction. ^Thi
36410 73 20 6d 65 61 6e 73 20 74 68 61 74 20 77 68 65  s means that whe
36420 6e 20 56 41 43 55 55 4d 69 6e 67 20 61 20 64 61  n VACUUMing a da
36430 74 61 62 61 73 65 2c 20 0a 61 73 20 6d 75 63 68  tabase, .as much
36440 20 61 73 20 74 77 69 63 65 20 74 68 65 20 73 69   as twice the si
36450 7a 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e  ze of the origin
36460 61 6c 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  al database file
36470 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20   is required in 
36480 66 72 65 65 0a 64 69 73 6b 20 73 70 61 63 65 2e  free.disk space.
36490 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d  ..<p>^The VACUUM
364a0 20 49 4e 54 4f 20 63 6f 6d 6d 61 6e 64 20 77 6f   INTO command wo
364b0 72 6b 73 20 74 68 65 20 73 61 6d 65 20 77 61 79  rks the same way
364c0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
364d0 75 73 65 73 20 74 68 65 20 66 69 6c 65 0a 6e 61  uses the file.na
364e0 6d 65 64 20 6f 6e 20 74 68 65 20 49 4e 54 4f 20  med on the INTO 
364f0 63 6c 61 75 73 65 20 69 6e 20 70 6c 61 63 65 20  clause in place 
36500 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
36510 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 6f 6d   database and om
36520 69 74 73 20 74 68 65 0a 73 74 65 70 20 6f 66 20  its the.step of 
36530 63 6f 70 79 69 6e 67 20 74 68 65 20 76 61 63 75  copying the vacu
36540 75 6d 65 64 20 64 61 74 61 62 61 73 65 20 62 61  umed database ba
36550 63 6b 20 6f 76 65 72 20 74 6f 70 20 6f 66 20 74  ck over top of t
36560 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 61  he original data
36570 62 61 73 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56  base...<p>^The V
36580 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61  ACUUM command ma
36590 79 20 63 68 61 6e 67 65 20 74 68 65 20 5b 52 4f  y change the [RO
365a0 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66  WID | ROWIDs] of
365b0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e 79 0a   entries in any.
365c0 74 61 62 6c 65 73 20 74 68 61 74 20 64 6f 20 6e  tables that do n
365d0 6f 74 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69  ot have an expli
365e0 63 69 74 20 5b 49 4e 54 45 47 45 52 20 50 52 49  cit [INTEGER PRI
365f0 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a  MARY KEY]..</p>.
36600 0a 3c 70 3e 5e 41 20 56 41 43 55 55 4d 20 77 69  .<p>^A VACUUM wi
36610 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72 65  ll fail if there
36620 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 72 61 6e   is an open tran
36630 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  saction on the d
36640 61 74 61 62 61 73 65 0a 63 6f 6e 6e 65 63 74 69  atabase.connecti
36650 6f 6e 20 74 68 61 74 20 69 73 20 61 74 74 65 6d  on that is attem
36660 70 74 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65  pting to run the
36670 20 56 41 43 55 55 4d 2e 20 20 5e 55 6e 66 69 6e   VACUUM.  ^Unfin
36680 61 6c 69 7a 65 64 20 53 51 4c 0a 73 74 61 74 65  alized SQL.state
36690 6d 65 6e 74 73 20 74 79 70 69 63 61 6c 6c 79 20  ments typically 
366a0 68 6f 6c 64 20 61 20 72 65 61 64 20 74 72 61 6e  hold a read tran
366b0 73 61 63 74 69 6f 6e 20 6f 70 65 6e 2c 20 73 6f  saction open, so
366c0 20 74 68 65 20 56 41 43 55 55 4d 0a 6d 69 67 68   the VACUUM.migh
366d0 74 20 66 61 69 6c 20 69 66 20 74 68 65 72 65 20  t fail if there 
366e0 61 72 65 20 75 6e 66 69 6e 61 6c 69 7a 65 64 20  are unfinalized 
366f0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 6f  SQL statements o
36700 6e 20 74 68 65 20 73 61 6d 65 20 63 6f 6e 6e 65  n the same conne
36710 63 74 69 6f 6e 2e 0a 5e 56 41 43 55 55 4d 20 28  ction..^VACUUM (
36720 62 75 74 20 6e 6f 74 20 56 41 43 55 55 4d 20 49  but not VACUUM I
36730 4e 54 4f 29 20 69 73 20 61 20 77 72 69 74 65 20  NTO) is a write 
36740 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 73 6f  operation and so
36750 20 69 66 20 61 6e 6f 74 68 65 72 0a 64 61 74 61   if another.data
36760 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
36770 69 73 20 68 6f 6c 64 69 6e 67 20 61 20 6c 6f 63  is holding a loc
36780 6b 20 74 68 61 74 20 70 72 65 76 65 6e 74 73 20  k that prevents 
36790 77 72 69 74 65 73 2c 20 74 68 65 6e 0a 74 68 65  writes, then.the
367a0 20 56 41 43 55 55 4d 20 77 69 6c 6c 20 66 61 69   VACUUM will fai
367b0 6c 2e 0a 0a 3c 70 3e 5e 28 41 6e 20 61 6c 74 65  l...<p>^(An alte
367c0 72 6e 61 74 69 76 65 20 74 6f 20 75 73 69 6e 67  rnative to using
367d0 20 74 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d   the VACUUM comm
367e0 61 6e 64 20 74 6f 0a 72 65 63 6c 61 69 6d 20 73  and to.reclaim s
367f0 70 61 63 65 20 61 66 74 65 72 20 64 61 74 61 20  pace after data 
36800 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64  has been deleted
36810 20 69 73 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   is auto-vacuum 
36820 6d 6f 64 65 2c 20 65 6e 61 62 6c 65 64 20 75 73  mode, enabled us
36830 69 6e 67 0a 74 68 65 20 5b 61 75 74 6f 5f 76 61  ing.the [auto_va
36840 63 75 75 6d 5d 20 70 72 61 67 6d 61 2e 29 5e 20  cuum] pragma.)^ 
36850 5e 57 68 65 6e 20 5b 61 75 74 6f 5f 76 61 63 75  ^When [auto_vacu
36860 75 6d 5d 20 69 73 20 65 6e 61 62 6c 65 64 20 66  um] is enabled f
36870 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 66 72  or a database.fr
36880 65 65 20 70 61 67 65 73 20 6d 61 79 20 62 65 20  ee pages may be 
36890 72 65 63 6c 61 69 6d 65 64 20 61 66 74 65 72 20  reclaimed after 
368a0 64 65 6c 65 74 69 6e 67 20 64 61 74 61 2c 20 63  deleting data, c
368b0 61 75 73 69 6e 67 20 74 68 65 20 66 69 6c 65 20  ausing the file 
368c0 74 6f 20 73 68 72 69 6e 6b 2c 0a 77 69 74 68 6f  to shrink,.witho
368d0 75 74 20 72 65 62 75 69 6c 64 69 6e 67 20 74 68  ut rebuilding th
368e0 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  e entire databas
368f0 65 20 75 73 69 6e 67 20 56 41 43 55 55 4d 2e 20  e using VACUUM. 
36900 20 5e 48 6f 77 65 76 65 72 2c 20 75 73 69 6e 67   ^However, using
36910 0a 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 63  .[auto_vacuum] c
36920 61 6e 20 6c 65 61 64 20 74 6f 20 65 78 74 72 61  an lead to extra
36930 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
36940 72 61 67 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 5e  ragmentation.  ^
36950 41 6e 64 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  And [auto_vacuum
36960 5d 0a 64 6f 65 73 20 6e 6f 74 20 63 6f 6d 70 61  ].does not compa
36970 63 74 20 70 61 72 74 69 61 6c 6c 79 20 66 69 6c  ct partially fil
36980 6c 65 64 20 70 61 67 65 73 20 6f 66 20 74 68 65  led pages of the
36990 20 64 61 74 61 62 61 73 65 20 61 73 20 56 41 43   database as VAC
369a0 55 55 4d 20 64 6f 65 73 2e 0a 0a 3c 2f 70 3e 0a  UUM does...</p>.
369b0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
369c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
369d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
369e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
369f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36a00 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
36a10 49 4e 44 45 58 45 44 20 42 59 7d 20 69 6e 64 65  INDEXED BY} inde
36a20 78 65 64 62 79 20 7b 7b 49 4e 44 45 58 45 44 20  xedby {{INDEXED 
36a30 42 59 7d 20 7b 4e 4f 54 20 49 4e 44 45 58 45 44  BY} {NOT INDEXED
36a40 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54  }}..</tcl>.<p>^T
36a50 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
36a60 72 61 73 65 20 66 6f 72 63 65 73 20 74 68 65 20  rase forces the 
36a70 5b 53 51 4c 69 74 65 20 71 75 65 72 79 20 70 6c  [SQLite query pl
36a80 61 6e 6e 65 72 5d 20 74 6f 20 75 73 65 20 61 0a  anner] to use a.
36a90 70 61 72 74 69 63 75 6c 61 72 20 6e 61 6d 65 64  particular named
36aa0 20 69 6e 64 65 78 20 6f 6e 20 61 20 5b 44 45 4c   index on a [DEL
36ab0 45 54 45 5d 2c 20 5b 53 45 4c 45 43 54 5d 2c 20  ETE], [SELECT], 
36ac0 6f 72 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74  or [UPDATE] stat
36ad0 65 6d 65 6e 74 2e 0a 54 68 65 20 49 4e 44 45 58  ement..The INDEX
36ae0 45 44 20 42 59 20 70 68 72 61 73 65 20 69 73 20  ED BY phrase is 
36af0 61 6e 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73  an SQLite extens
36b00 69 6f 6e 20 61 6e 64 0a 69 73 20 6e 6f 74 20 70  ion and.is not p
36b10 6f 72 74 61 62 6c 65 20 74 6f 20 6f 74 68 65 72  ortable to other
36b20 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65 6e   SQL database en
36b30 67 69 6e 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  gines.</p>..<tcl
36b40 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  >.RecursiveBubbl
36b50 65 44 69 61 67 72 61 6d 20 71 75 61 6c 69 66 69  eDiagram qualifi
36b60 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 0a 3c 2f  ed-table-name.</
36b70 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 22 49  tcl>..<p>^The "I
36b80 4e 44 45 58 45 44 20 42 59 20 3c 79 79 74 65 72  NDEXED BY <yyter
36b90 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79  m>index-name</yy
36ba0 74 65 72 6d 3e 22 20 70 68 72 61 73 65 20 73 70  term>" phrase sp
36bb0 65 63 69 66 69 65 73 20 0a 74 68 61 74 20 74 68  ecifies .that th
36bc0 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 0a 6d 75  e named index.mu
36bd0 73 74 20 62 65 20 75 73 65 64 20 69 6e 20 6f 72  st be used in or
36be0 64 65 72 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 76  der to look up v
36bf0 61 6c 75 65 73 20 6f 6e 20 74 68 65 20 70 72 65  alues on the pre
36c00 63 65 64 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 49  ceding table..^I
36c10 66 20 3c 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d  f <yyterm>index-
36c20 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 64 6f  name</yyterm> do
36c30 65 73 20 6e 6f 74 20 65 78 69 73 74 20 6f 72 20  es not exist or 
36c40 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 0a  cannot be used .
36c50 66 6f 72 20 74 68 65 20 71 75 65 72 79 2c 20 74  for the query, t
36c60 68 65 6e 20 74 68 65 20 70 72 65 70 61 72 61 74  hen the preparat
36c70 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 20 73  ion of the SQL s
36c80 74 61 74 65 6d 65 6e 74 20 66 61 69 6c 73 2e 0a  tatement fails..
36c90 5e 28 54 68 65 20 22 4e 4f 54 20 49 4e 44 45 58  ^(The "NOT INDEX
36ca0 45 44 22 20 63 6c 61 75 73 65 20 73 70 65 63 69  ED" clause speci
36cb0 66 69 65 73 20 74 68 61 74 20 6e 6f 20 69 6e 64  fies that no ind
36cc0 65 78 20 73 68 61 6c 6c 20 62 65 20 75 73 65 64  ex shall be used
36cd0 20 77 68 65 6e 0a 61 63 63 65 73 73 69 6e 67 20   when.accessing 
36ce0 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74 61  the preceding ta
36cf0 62 6c 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69  ble, including i
36d00 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73 20 63  mplied indices c
36d10 72 65 61 74 65 20 62 79 0a 55 4e 49 51 55 45 20  reate by.UNIQUE 
36d20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20  and PRIMARY KEY 
36d30 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 48 6f  constraints.  Ho
36d40 77 65 76 65 72 2c 20 74 68 65 20 5b 72 6f 77 69  wever, the [rowi
36d50 64 5d 0a 63 61 6e 20 73 74 69 6c 6c 20 62 65 20  d].can still be 
36d60 75 73 65 64 20 74 6f 20 6c 6f 6f 6b 20 75 70 20  used to look up 
36d70 65 6e 74 72 69 65 73 20 65 76 65 6e 20 77 68 65  entries even whe
36d80 6e 20 22 4e 4f 54 20 49 4e 44 45 58 45 44 22 20  n "NOT INDEXED" 
36d90 69 73 20 73 70 65 63 69 66 69 65 64 2e 29 5e 3c  is specified.)^<
36da0 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d 65 20 53 51 4c  /p>..<p>Some SQL
36db0 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
36dc0 73 20 70 72 6f 76 69 64 65 20 6e 6f 6e 2d 73 74  s provide non-st
36dd0 61 6e 64 61 72 64 20 22 68 69 6e 74 22 20 6d 65  andard "hint" me
36de0 63 68 61 6e 69 73 6d 73 20 77 68 69 63 68 0a 63  chanisms which.c
36df0 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 67 69  an be used to gi
36e00 76 65 20 74 68 65 20 71 75 65 72 79 20 6f 70 74  ve the query opt
36e10 69 6d 69 7a 65 72 20 63 6c 75 65 73 20 61 62 6f  imizer clues abo
36e20 75 74 20 77 68 61 74 20 69 6e 64 69 63 65 73 20  ut what indices 
36e30 69 74 20 73 68 6f 75 6c 64 0a 75 73 65 20 66 6f  it should.use fo
36e40 72 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 73  r a particular s
36e50 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 20 49  tatement.  The I
36e60 4e 44 45 58 20 42 59 20 63 6c 61 75 73 65 20 6f  NDEX BY clause o
36e70 66 20 53 51 4c 69 74 65 20 69 73 20 0a 3c 65 6d  f SQLite is .<em
36e80 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 20 68 69 6e 74  >not</em> a hint
36e90 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 20 61 6e  ing mechanism an
36ea0 64 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20  d it should not 
36eb0 62 65 20 75 73 65 64 20 61 73 20 73 75 63 68 2e  be used as such.
36ec0 0a 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59  .^The INDEXED BY
36ed0 20 63 6c 61 75 73 65 20 64 6f 65 73 20 6e 6f 74   clause does not
36ee0 20 67 69 76 65 20 74 68 65 20 6f 70 74 69 6d 69   give the optimi
36ef0 7a 65 72 20 68 69 6e 74 73 20 61 62 6f 75 74 20  zer hints about 
36f00 77 68 69 63 68 20 69 6e 64 65 78 0a 74 6f 20 75  which index.to u
36f10 73 65 3b 20 69 74 20 67 69 76 65 73 20 74 68 65  se; it gives the
36f20 20 6f 70 74 69 6d 69 7a 65 72 20 61 20 72 65 71   optimizer a req
36f30 75 69 72 65 6d 65 6e 74 20 6f 66 20 77 68 69 63  uirement of whic
36f40 68 20 69 6e 64 65 78 20 74 6f 20 75 73 65 2e 0a  h index to use..
36f50 5e 49 66 20 74 68 65 20 71 75 65 72 79 20 6f 70  ^If the query op
36f60 74 69 6d 69 7a 65 72 20 69 73 20 75 6e 61 62 6c  timizer is unabl
36f70 65 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 64  e to use the ind
36f80 65 78 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ex specified by 
36f90 74 68 65 0a 49 4e 44 45 58 20 42 59 20 63 6c 61  the.INDEX BY cla
36fa0 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20 71 75  use, then the qu
36fb0 65 72 79 20 77 69 6c 6c 20 66 61 69 6c 20 77 69  ery will fail wi
36fc0 74 68 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e  th an error.</p>
36fd0 0a 0a 3c 70 3e 54 68 65 20 49 4e 44 45 58 45 44  ..<p>The INDEXED
36fe0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 3c 65   BY clause is <e
36ff0 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 69 6e 74 65 6e  m>not</em> inten
37000 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 20 74  ded for use in t
37010 75 6e 69 6e 67 0a 74 68 65 20 70 65 72 66 6f 72  uning.the perfor
37020 6d 61 6e 63 65 20 6f 66 20 61 20 71 75 65 72 79  mance of a query
37030 2e 20 20 54 68 65 20 69 6e 74 65 6e 74 20 6f 66  .  The intent of
37040 20 74 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   the INDEXED BY 
37050 63 6c 61 75 73 65 20 69 73 0a 74 6f 20 72 61 69  clause is.to rai
37060 73 65 20 61 20 72 75 6e 2d 74 69 6d 65 20 65 72  se a run-time er
37070 72 6f 72 20 69 66 20 61 20 73 63 68 65 6d 61 20  ror if a schema 
37080 63 68 61 6e 67 65 2c 20 73 75 63 68 20 61 73 20  change, such as 
37090 64 72 6f 70 70 69 6e 67 20 6f 72 0a 63 72 65 61  dropping or.crea
370a0 74 69 6e 67 20 61 6e 20 69 6e 64 65 78 2c 20 63  ting an index, c
370b0 61 75 73 65 73 20 74 68 65 20 71 75 65 72 79 20  auses the query 
370c0 70 6c 61 6e 20 66 6f 72 20 61 20 74 69 6d 65 2d  plan for a time-
370d0 73 65 6e 73 69 74 69 76 65 20 71 75 65 72 79 0a  sensitive query.
370e0 74 6f 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20  to change.  The 
370f0 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73  INDEXED BY claus
37100 65 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f  e is designed to
37110 20 68 65 6c 70 20 64 65 74 65 63 74 0a 75 6e 64   help detect.und
37120 65 73 69 72 61 62 6c 65 20 71 75 65 72 79 20 70  esirable query p
37130 6c 61 6e 20 63 68 61 6e 67 65 73 20 64 75 72 69  lan changes duri
37140 6e 67 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ng regression te
37150 73 74 69 6e 67 2e 0a 41 70 70 6c 69 63 61 74 69  sting..Applicati
37160 6f 6e 20 0a 64 65 76 65 6c 6f 70 65 72 73 20 61  on .developers a
37170 72 65 20 61 64 6d 6f 6e 69 73 68 65 64 20 74 6f  re admonished to
37180 20 6f 6d 69 74 20 61 6c 6c 20 75 73 65 20 6f 66   omit all use of
37190 20 49 4e 44 45 58 45 44 20 42 59 20 64 75 72 69   INDEXED BY duri
371a0 6e 67 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  ng.application d
371b0 65 73 69 67 6e 2c 20 69 6d 70 6c 65 6d 65 6e 74  esign, implement
371c0 61 74 69 6f 6e 2c 20 74 65 73 74 69 6e 67 2c 20  ation, testing, 
371d0 61 6e 64 20 74 75 6e 69 6e 67 2e 20 20 49 66 0a  and tuning.  If.
371e0 49 4e 44 45 58 45 44 20 42 59 20 69 73 20 74 6f  INDEXED BY is to
371f0 20 62 65 20 75 73 65 64 20 61 74 20 61 6c 6c 2c   be used at all,
37200 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20 69 6e   it should be in
37210 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76 65  serted at the ve
37220 72 79 0a 65 6e 64 20 6f 66 20 74 68 65 20 64 65  ry.end of the de
37230 76 65 6c 6f 70 6d 65 6e 74 20 70 72 6f 63 65 73  velopment proces
37240 73 20 77 68 65 6e 20 22 6c 6f 63 6b 69 6e 67 20  s when "locking 
37250 64 6f 77 6e 22 20 61 20 64 65 73 69 67 6e 2e 3c  down" a design.<
37260 2f 70 3e 0a 0a 3c 68 33 3e 53 65 65 20 41 6c 73  /p>..<h3>See Als
37270 6f 3a 3c 2f 68 33 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  o:</h3>..<ol>.<l
37280 69 3e 3c 70 3e 54 68 65 20 5b 71 75 65 72 79 20  i><p>The [query 
37290 70 6c 61 6e 6e 65 72 20 63 68 65 63 6b 6c 69 73  planner checklis
372a0 74 5d 20 64 65 73 63 72 69 62 65 73 20 73 74 65  t] describes ste
372b0 70 73 20 74 68 61 74 20 61 70 70 6c 69 63 61 74  ps that applicat
372c0 69 6f 6e 0a 64 65 76 65 6c 6f 70 65 72 73 20 73  ion.developers s
372d0 68 6f 75 6c 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  hould following 
372e0 74 6f 20 68 65 6c 70 20 72 65 73 6f 6c 76 65 20  to help resolve 
372f0 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 70 72  query planner pr
37300 6f 62 6c 65 6d 73 2e 0a 4e 6f 74 69 63 65 20 74  oblems..Notice t
37310 68 65 20 74 68 61 74 20 74 68 65 20 75 73 65 20  he that the use 
37320 6f 66 20 49 4e 44 45 58 45 44 20 42 59 20 69 73  of INDEXED BY is
37330 20 61 20 6c 61 73 74 20 72 65 73 6f 72 74 2c 20   a last resort, 
37340 74 6f 20 62 65 20 75 73 65 64 20 6f 6e 6c 79 0a  to be used only.
37350 77 68 65 6e 20 61 6c 6c 20 6f 74 68 65 72 20 6d  when all other m
37360 65 61 73 75 72 65 73 20 66 61 69 6c 2e 3c 2f 70  easures fail.</p
37370 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5b 75 70 6c 75 73  >..<li><p>[uplus
37380 63 6f 6e 74 72 6f 6c 7c 54 68 65 20 75 6e 61 72  control|The unar
37390 79 20 22 2b 22 20 6f 70 65 72 61 74 6f 72 5d 0a  y "+" operator].
373a0 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64  can be used to d
373b0 69 73 71 75 61 6c 69 66 79 20 74 65 72 6d 73 20  isqualify terms 
373c0 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  in the WHERE cla
373d0 75 73 65 20 66 72 6f 6d 20 75 73 65 20 62 79 20  use from use by 
373e0 69 6e 64 69 63 65 73 2e 0a 43 61 72 65 66 75 6c  indices..Careful
373f0 20 75 73 65 20 6f 66 20 75 6e 61 72 79 20 2b 20   use of unary + 
37400 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 68 65  can sometimes he
37410 6c 70 20 70 72 65 76 65 6e 74 20 74 68 65 20 71  lp prevent the q
37420 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 66 72 6f  uery planner fro
37430 6d 0a 63 68 6f 6f 73 69 6e 67 20 61 20 70 6f 6f  m.choosing a poo
37440 72 20 69 6e 64 65 78 20 77 69 74 68 6f 75 74 20  r index without 
37450 72 65 73 74 72 69 63 74 69 6e 67 20 69 74 20 74  restricting it t
37460 6f 20 75 73 69 6e 67 20 6f 6e 65 20 73 70 65 63  o using one spec
37470 69 66 69 63 20 69 6e 64 65 78 2e 0a 43 61 72 65  ific index..Care
37480 66 75 6c 20 70 6c 61 63 65 6d 65 6e 74 20 6f 66  ful placement of
37490 20 75 6e 61 72 79 20 2b 20 6f 70 65 72 61 74 6f   unary + operato
374a0 72 73 20 69 73 20 61 20 62 65 74 74 65 72 20 6d  rs is a better m
374b0 65 74 68 6f 64 20 66 6f 72 20 63 6f 6e 74 72 6f  ethod for contro
374c0 6c 6c 69 6e 67 20 0a 77 68 69 63 68 20 69 6e 64  lling .which ind
374d0 69 63 65 73 20 61 72 65 20 75 73 65 64 20 62 79  ices are used by
374e0 20 61 20 71 75 65 72 79 2e 3c 2f 70 3e 0a 0a 3c   a query.</p>..<
374f0 6c 69 3e 3c 70 3e 54 68 65 20 5b 73 71 6c 69 74  li><p>The [sqlit
37500 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29  e3_stmt_status()
37510 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  ] C/C++ interfac
37520 65 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  e together with 
37530 74 68 65 0a 5b 53 51 4c 49 54 45 5f 53 54 4d 54  the.[SQLITE_STMT
37540 53 54 41 54 55 53 5f 46 55 4c 4c 53 43 41 4e 5f  STATUS_FULLSCAN_
37550 53 54 45 50 5d 20 61 6e 64 20 5b 53 51 4c 49 54  STEP] and [SQLIT
37560 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
37570 54 5d 20 76 65 72 62 73 0a 63 61 6e 20 62 65 20  T] verbs.can be 
37580 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 61  used to detect a
37590 74 20 72 75 6e 2d 74 69 6d 65 20 77 68 65 6e 20  t run-time when 
375a0 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  an SQL statement
375b0 20 69 73 20 6e 6f 74 0a 6d 61 6b 69 6e 67 20 65   is not.making e
375c0 66 66 65 63 74 69 76 65 20 75 73 65 20 6f 66 20  ffective use of 
375d0 69 6e 64 69 63 65 73 2e 20 20 4d 61 6e 79 20 61  indices.  Many a
375e0 70 70 6c 69 63 61 74 69 6f 6e 73 20 6d 61 79 20  pplications may 
375f0 70 72 65 66 65 72 20 74 6f 0a 75 73 65 20 74 68  prefer to.use th
37600 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  e [sqlite3_stmt_
37610 73 74 61 74 75 73 28 29 5d 20 69 6e 74 65 72 66  status()] interf
37620 61 63 65 20 74 6f 20 64 65 74 65 63 74 20 69 6e  ace to detect in
37630 64 65 78 20 6d 69 73 75 73 65 0a 72 61 74 68 65  dex misuse.rathe
37640 72 20 74 68 61 6e 20 74 68 65 20 49 4e 44 45 58  r than the INDEX
37650 45 44 20 42 59 20 70 68 72 61 73 65 20 64 65 73  ED BY phrase des
37660 63 72 69 62 65 64 20 68 65 72 65 2e 3c 2f 70 3e  cribed here.</p>
37670 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63 6c 3e 0a 73 65  .</ol>..<tcl>.se
37680 74 20 6b 65 79 77 6f 72 64 5f 6c 69 73 74 20 5b  t keyword_list [
37690 6c 73 6f 72 74 20 7b 0a 20 20 20 41 42 4f 52 54  lsort {.   ABORT
376a0 0a 20 20 20 41 43 54 49 4f 4e 0a 20 20 20 41 44  .   ACTION.   AD
376b0 44 0a 20 20 20 41 46 54 45 52 0a 20 20 20 41 4c  D.   AFTER.   AL
376c0 4c 0a 20 20 20 41 4c 54 45 52 0a 20 20 20 41 4e  L.   ALTER.   AN
376d0 41 4c 59 5a 45 0a 20 20 20 41 4e 44 0a 20 20 20  ALYZE.   AND.   
376e0 41 53 0a 20 20 20 41 53 43 0a 20 20 20 41 54 54  AS.   ASC.   ATT
376f0 41 43 48 0a 20 20 20 41 55 54 4f 49 4e 43 52 45  ACH.   AUTOINCRE
37700 4d 45 4e 54 0a 20 20 20 42 45 46 4f 52 45 0a 20  MENT.   BEFORE. 
37710 20 20 42 45 47 49 4e 0a 20 20 20 42 45 54 57 45    BEGIN.   BETWE
37720 45 4e 0a 20 20 20 42 59 0a 20 20 20 43 41 53 43  EN.   BY.   CASC
37730 41 44 45 0a 20 20 20 43 41 53 45 0a 20 20 20 43  ADE.   CASE.   C
37740 41 53 54 0a 20 20 20 43 48 45 43 4b 0a 20 20 20  AST.   CHECK.   
37750 43 4f 4c 4c 41 54 45 0a 20 20 20 43 4f 4c 55 4d  COLLATE.   COLUM
37760 4e 0a 20 20 20 43 4f 4d 4d 49 54 0a 20 20 20 43  N.   COMMIT.   C
37770 4f 4e 46 4c 49 43 54 0a 20 20 20 43 4f 4e 53 54  ONFLICT.   CONST
37780 52 41 49 4e 54 0a 20 20 20 43 52 45 41 54 45 0a  RAINT.   CREATE.
37790 20 20 20 43 52 4f 53 53 0a 20 20 20 43 55 52 52     CROSS.   CURR
377a0 45 4e 54 0a 20 20 20 43 55 52 52 45 4e 54 5f 44  ENT.   CURRENT_D
377b0 41 54 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54  ATE.   CURRENT_T
377c0 49 4d 45 0a 20 20 20 43 55 52 52 45 4e 54 5f 54  IME.   CURRENT_T
377d0 49 4d 45 53 54 41 4d 50 0a 20 20 20 44 41 54 41  IMESTAMP.   DATA
377e0 42 41 53 45 0a 20 20 20 44 45 46 41 55 4c 54 0a  BASE.   DEFAULT.
377f0 20 20 20 44 45 46 45 52 52 45 44 0a 20 20 20 44     DEFERRED.   D
37800 45 46 45 52 52 41 42 4c 45 0a 20 20 20 44 45 4c  EFERRABLE.   DEL
37810 45 54 45 0a 20 20 20 44 45 53 43 0a 20 20 20 44  ETE.   DESC.   D
37820 45 54 41 43 48 0a 20 20 20 44 49 53 54 49 4e 43  ETACH.   DISTINC
37830 54 0a 20 20 20 44 4f 0a 20 20 20 44 52 4f 50 0a  T.   DO.   DROP.
37840 20 20 20 45 4e 44 0a 20 20 20 45 41 43 48 0a 20     END.   EACH. 
37850 20 20 45 4c 53 45 0a 20 20 20 45 53 43 41 50 45    ELSE.   ESCAPE
37860 0a 20 20 20 45 58 43 45 50 54 0a 20 20 20 45 58  .   EXCEPT.   EX
37870 43 4c 55 53 49 56 45 0a 20 20 20 45 58 43 4c 55  CLUSIVE.   EXCLU
37880 44 45 0a 20 20 20 45 58 49 53 54 53 0a 20 20 20  DE.   EXISTS.   
37890 45 58 50 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a  EXPLAIN.   FAIL.
378a0 20 20 20 46 49 4c 54 45 52 0a 20 20 20 46 4f 4c     FILTER.   FOL
378b0 4c 4f 57 49 4e 47 0a 20 20 20 46 4f 52 0a 20 20  LOWING.   FOR.  
378c0 20 46 4f 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d   FOREIGN.   FROM
378d0 0a 20 20 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42  .   FULL.   GLOB
378e0 0a 20 20 20 47 52 4f 55 50 0a 20 20 20 47 52 4f  .   GROUP.   GRO
378f0 55 50 53 0a 20 20 20 48 41 56 49 4e 47 0a 20 20  UPS.   HAVING.  
37900 20 49 46 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20   IF.   IGNORE.  
37910 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 20 49 4e   IMMEDIATE.   IN
37920 0a 20 20 20 49 4e 44 45 58 0a 20 20 20 49 4e 44  .   INDEX.   IND
37930 45 58 45 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c  EXED.   INITIALL
37940 59 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e  Y.   INNER.   IN
37950 53 45 52 54 0a 20 20 20 49 4e 53 54 45 41 44 0a  SERT.   INSTEAD.
37960 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20     INTERSECT.   
37970 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53  INTO.   IS.   IS
37980 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20  NULL.   JOIN.   
37990 4b 45 59 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c  KEY.   LEFT.   L
379a0 49 4b 45 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20  IKE.   LIMIT.   
379b0 4d 41 54 43 48 0a 20 20 20 4e 41 54 55 52 41 4c  MATCH.   NATURAL
379c0 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20  .   NO.   NOT.  
379d0 20 4e 4f 54 48 49 4e 47 0a 20 20 20 4e 4f 54 4e   NOTHING.   NOTN
379e0 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f  ULL.   NULL.   O
379f0 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20 20 4f  F.   OFFSET.   O
37a00 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45 52  N.   OR.   ORDER
37a10 0a 20 20 20 4f 54 48 45 52 53 0a 20 20 20 4f 55  .   OTHERS.   OU
37a20 54 45 52 0a 20 20 20 4f 56 45 52 0a 20 20 20 50  TER.   OVER.   P
37a30 41 52 54 49 54 49 4f 4e 0a 20 20 20 50 4c 41 4e  ARTITION.   PLAN
37a40 0a 20 20 20 50 52 41 47 4d 41 0a 20 20 20 50 52  .   PRAGMA.   PR
37a50 45 43 45 44 49 4e 47 0a 20 20 20 50 52 49 4d 41  ECEDING.   PRIMA
37a60 52 59 0a 20 20 20 51 55 45 52 59 0a 20 20 20 52  RY.   QUERY.   R
37a70 41 49 53 45 0a 20 20 20 52 41 4e 47 45 0a 20 20  AISE.   RANGE.  
37a80 20 52 45 43 55 52 53 49 56 45 0a 20 20 20 52 45   RECURSIVE.   RE
37a90 46 45 52 45 4e 43 45 53 0a 20 20 20 52 45 47 45  FERENCES.   REGE
37aa0 58 50 0a 20 20 20 52 45 49 4e 44 45 58 0a 20 20  XP.   REINDEX.  
37ab0 20 52 45 4c 45 41 53 45 0a 20 20 20 52 45 4e 41