Documentation Source Text

Hex Artifact Content
Login

Artifact 2422440590b8d713a250e3c57d92eb1385d61ab0d822bd37508ba9872746eba4:


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 70 3e 20  ing table...<p> 
0ec0: 5e 28 54 68 65 20 52 45 4e 41 4d 45 20 54 4f 20  ^(The RENAME TO 
0ed0: 73 79 6e 74 61 78 20 63 68 61 6e 67 65 73 20 74  syntax changes t
0ee0: 68 65 20 6e 61 6d 65 20 6f 66 20 3c 79 79 74 65  he name of <yyte
0ef0: 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 79  rm>table-name</y
0f00: 79 74 65 72 6d 3e 0a 74 6f 20 3c 79 79 74 65 72  yterm>.to <yyter
0f10: 6d 3e 6e 65 77 2d 74 61 62 6c 65 2d 6e 61 6d 65  m>new-table-name
0f20: 3c 2f 79 79 74 65 72 6d 3e 2e 29 5e 0a 54 68 69  </yyterm>.)^.Thi
0f30: 73 20 63 6f 6d 6d 61 6e 64 20 0a 63 61 6e 6e 6f  s command .canno
0f40: 74 20 62 65 20 75 73 65 64 20 74 6f 20 6d 6f 76  t be used to mov
0f50: 65 20 61 20 74 61 62 6c 65 20 62 65 74 77 65 65  e a table betwee
0f60: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
0f70: 61 73 65 73 2c 20 6f 6e 6c 79 20 74 6f 20 72 65  ases, only to re
0f80: 6e 61 6d 65 20 0a 61 20 74 61 62 6c 65 20 77 69  name .a table wi
0f90: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61  thin the same da
0fa0: 74 61 62 61 73 65 2e 0a 5e 49 66 20 74 68 65 20  tabase..^If the 
0fb0: 74 61 62 6c 65 20 62 65 69 6e 67 20 72 65 6e 61  table being rena
0fc0: 6d 65 64 20 68 61 73 20 74 72 69 67 67 65 72 73  med has triggers
0fd0: 20 6f 72 20 69 6e 64 69 63 65 73 2c 20 74 68 65   or indices, the
0fe0: 6e 20 74 68 65 73 65 20 72 65 6d 61 69 6e 0a 61  n these remain.a
0ff0: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 74  ttached to the t
1000: 61 62 6c 65 20 61 66 74 65 72 20 69 74 20 68 61  able after it ha
1010: 73 20 62 65 65 6e 20 72 65 6e 61 6d 65 64 2e 20  s been renamed. 
1020: 20 0a 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68   .Beginning with
1030: 20 72 65 6c 65 61 73 65 20 33 2e 32 35 2e 30 20   release 3.25.0 
1040: 28 5b 64 61 74 65 6f 66 3a 33 2e 32 35 2e 30 5d  ([dateof:3.25.0]
1050: 29 2c 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  ), references to
1060: 20 74 68 65 20 74 61 62 6c 65 0a 77 69 74 68 69   the table.withi
1070: 6e 20 74 72 69 67 67 65 72 20 62 6f 64 69 65 73  n trigger bodies
1080: 20 61 6e 64 20 76 69 65 77 20 64 65 66 69 6e 69   and view defini
1090: 74 69 6f 6e 73 20 61 72 65 20 61 6c 73 6f 20 72  tions are also r
10a0: 65 6e 61 6d 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70  enamed..</p>..<p
10b0: 3e 20 54 68 65 20 52 45 4e 41 4d 45 20 43 4f 4c  > The RENAME COL
10c0: 55 4d 4e 20 54 4f 20 73 79 6e 74 61 78 20 63 68  UMN TO syntax ch
10d0: 61 6e 67 65 73 20 74 68 65 0a 3c 79 79 74 65 72  anges the.<yyter
10e0: 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79  m>column-name</y
10f0: 79 74 65 72 6d 3e 20 6f 66 20 74 61 62 6c 65 20  yterm> of table 
1100: 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61  <yyterm>table-na
1110: 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 69 6e 74 6f  me</yyterm>.into
1120: 20 3c 79 79 74 65 72 6d 3e 6e 65 77 2d 63 6f 6c   <yyterm>new-col
1130: 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  umn-name</yyterm
1140: 3e 2e 20 20 54 68 65 20 63 6f 6c 75 6d 6e 20 6e  >.  The column n
1150: 61 6d 65 20 69 73 20 63 68 61 6e 67 65 64 20 62  ame is changed b
1160: 6f 74 68 0a 77 69 74 68 69 6e 20 74 68 65 20 74  oth.within the t
1170: 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 20  able definition 
1180: 69 74 73 65 6c 66 20 61 6e 64 20 61 6c 73 6f 20  itself and also 
1190: 77 69 74 68 69 6e 20 61 6c 6c 20 69 6e 64 65 78  within all index
11a0: 65 73 2c 20 74 72 69 67 67 65 72 73 2c 0a 61 6e  es, triggers,.an
11b0: 64 20 76 69 65 77 73 20 74 68 61 74 20 72 65 66  d views that ref
11c0: 65 72 65 6e 63 65 20 74 68 65 20 63 6f 6c 75 6d  erence the colum
11d0: 6e 2e 20 20 49 66 20 74 68 65 20 63 6f 6c 75 6d  n.  If the colum
11e0: 6e 20 6e 61 6d 65 20 63 68 61 6e 67 65 20 77 6f  n name change wo
11f0: 75 6c 64 0a 72 65 73 75 6c 74 20 69 6e 20 61 20  uld.result in a 
1200: 73 65 6d 61 6e 74 69 63 20 61 6d 62 69 67 75 69  semantic ambigui
1210: 74 79 20 69 6e 20 61 20 74 72 69 67 67 65 72 20  ty in a trigger 
1220: 6f 72 20 76 69 65 77 2c 20 74 68 65 6e 20 74 68  or view, then th
1230: 65 20 52 45 4e 41 4d 45 0a 43 4f 4c 55 4d 4e 20  e RENAME.COLUMN 
1240: 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20 65 72  fails with an er
1250: 72 6f 72 20 61 6e 64 20 6e 6f 20 63 68 61 6e 67  ror and no chang
1260: 65 73 20 61 72 65 20 61 70 70 6c 69 65 64 2e 0a  es are applied..
1270: 0a 3c 70 3e 20 5e 54 68 65 20 41 44 44 20 43 4f  .<p> ^The ADD CO
1280: 4c 55 4d 4e 20 73 79 6e 74 61 78 0a 69 73 20 75  LUMN syntax.is u
1290: 73 65 64 20 74 6f 20 61 64 64 20 61 20 6e 65 77  sed to add a new
12a0: 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 6e 20 65 78   column to an ex
12b0: 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 54  isting table..^T
12c0: 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 69 73  he new column is
12d0: 20 61 6c 77 61 79 73 20 61 70 70 65 6e 64 65 64   always appended
12e0: 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74   to the end of t
12f0: 68 65 20 6c 69 73 74 20 6f 66 20 65 78 69 73 74  he list of exist
1300: 69 6e 67 20 63 6f 6c 75 6d 6e 73 2e 0a 54 68 65  ing columns..The
1310: 20 5b 63 6f 6c 75 6d 6e 2d 64 65 66 5d 20 72 75   [column-def] ru
1320: 6c 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  le defines the c
1330: 68 61 72 61 63 74 65 72 69 73 74 69 63 73 20 6f  haracteristics o
1340: 66 20 74 68 65 20 6e 65 77 20 63 6f 6c 75 6d 6e  f the new column
1350: 2e 0a 5e 28 54 68 65 20 6e 65 77 20 63 6f 6c 75  ..^(The new colu
1360: 6d 6e 20 6d 61 79 20 74 61 6b 65 20 61 6e 79 20  mn may take any 
1370: 6f 66 20 74 68 65 20 66 6f 72 6d 73 20 70 65 72  of the forms per
1380: 6d 69 73 73 69 62 6c 65 20 69 6e 20 61 20 5b 43  missible in a [C
1390: 52 45 41 54 45 20 54 41 42 4c 45 5d 0a 73 74 61  REATE TABLE].sta
13a0: 74 65 6d 65 6e 74 2c 20 77 69 74 68 20 74 68 65  tement, with the
13b0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72   following restr
13c0: 69 63 74 69 6f 6e 73 3a 29 5e 0a 3c 75 6c 3e 0a  ictions:)^.<ul>.
13d0: 3c 6c 69 3e 5e 54 68 65 20 63 6f 6c 75 6d 6e 20  <li>^The column 
13e0: 6d 61 79 20 6e 6f 74 20 68 61 76 65 20 61 20 50  may not have a P
13f0: 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 55 4e  RIMARY KEY or UN
1400: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e  IQUE constraint.
1410: 3c 2f 6c 69 3e 0a 3c 6c 69 3e 5e 54 68 65 20 63  </li>.<li>^The c
1420: 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 68 61  olumn may not ha
1430: 76 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c  ve a default val
1440: 75 65 20 6f 66 20 43 55 52 52 45 4e 54 5f 54 49  ue of CURRENT_TI
1450: 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54 45  ME, CURRENT_DATE
1460: 2c 20 0a 20 20 20 20 43 55 52 52 45 4e 54 5f 54  , .    CURRENT_T
1470: 49 4d 45 53 54 41 4d 50 2c 20 6f 72 20 61 6e 20  IMESTAMP, or an 
1480: 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 70 61  expression in pa
1490: 72 65 6e 74 68 65 73 65 73 2e 3c 2f 6c 69 3e 0a  rentheses.</li>.
14a0: 3c 6c 69 3e 5e 49 66 20 61 20 4e 4f 54 20 4e 55  <li>^If a NOT NU
14b0: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73  LL constraint is
14c0: 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
14d0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74   the column must
14e0: 20 68 61 76 65 20 61 0a 20 20 20 20 64 65 66 61   have a.    defa
14f0: 75 6c 74 20 76 61 6c 75 65 20 6f 74 68 65 72 20  ult value other 
1500: 74 68 61 6e 20 4e 55 4c 4c 2e 0a 3c 6c 69 3e 5e  than NULL..<li>^
1510: 49 66 20 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20  If [foreign key 
1520: 63 6f 6e 73 74 72 61 69 6e 74 73 5d 20 61 72 65  constraints] are
1530: 20 5b 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 70   [foreign_keys p
1540: 72 61 67 6d 61 20 7c 20 65 6e 61 62 6c 65 64 5d  ragma | enabled]
1550: 20 61 6e 64 0a 20 20 20 20 61 20 63 6f 6c 75 6d   and.    a colum
1560: 6e 20 77 69 74 68 20 61 20 5b 66 6f 72 65 69 67  n with a [foreig
1570: 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7c 20 52  n-key-clause | R
1580: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
1590: 5d 0a 20 20 20 20 69 73 20 61 64 64 65 64 2c 20  ].    is added, 
15a0: 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20  the column must 
15b0: 68 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 76  have a default v
15c0: 61 6c 75 65 20 6f 66 20 4e 55 4c 4c 2e 0a 3c 2f  alue of NULL..</
15d0: 75 6c 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 61 6c  ul>..<p>^Note al
15e0: 73 6f 20 74 68 61 74 20 77 68 65 6e 20 61 64 64  so that when add
15f0: 69 6e 67 20 61 20 5b 43 48 45 43 4b 20 63 6f 6e  ing a [CHECK con
1600: 73 74 72 61 69 6e 74 5d 2c 20 74 68 65 20 43 48  straint], the CH
1610: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 0a 69  ECK constraint.i
1620: 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61 67 61  s not tested aga
1630: 69 6e 73 74 20 70 72 65 65 78 69 73 74 69 6e 67  inst preexisting
1640: 20 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62   rows of the tab
1650: 6c 65 2e 0a 5e 54 68 69 73 20 63 61 6e 20 72 65  le..^This can re
1660: 73 75 6c 74 20 69 6e 20 61 20 74 61 62 6c 65 20  sult in a table 
1670: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 64 61  that contains da
1680: 74 61 20 74 68 61 74 0a 69 73 20 69 6e 20 76 69  ta that.is in vi
1690: 6f 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 43  olation of the C
16a0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2e  HECK constraint.
16b0: 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e    Future version
16c0: 73 20 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68  s of SQLite migh
16d0: 74 0a 63 68 61 6e 67 65 20 74 6f 20 76 61 6c 69  t.change to vali
16e0: 64 61 74 65 20 43 48 45 43 4b 20 63 6f 6e 73 74  date CHECK const
16f0: 72 61 69 6e 74 73 20 61 73 20 74 68 65 79 20 61  raints as they a
1700: 72 65 20 61 64 64 65 64 2e 3c 2f 70 3e 0a 0a 3c  re added.</p>..<
1710: 70 3e 54 68 65 20 41 4c 54 45 52 20 54 41 42 4c  p>The ALTER TABL
1720: 45 20 63 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20  E command works 
1730: 62 79 20 6d 6f 64 69 66 69 6e 67 20 74 68 65 20  by modifing the 
1740: 53 51 4c 20 74 65 78 74 20 6f 66 20 74 68 65 20  SQL text of the 
1750: 73 63 68 65 6d 61 0a 73 74 6f 72 65 64 20 69 6e  schema.stored in
1760: 20 74 68 65 20 5b 73 71 6c 69 74 65 5f 6d 61 73   the [sqlite_mas
1770: 74 65 72 20 74 61 62 6c 65 5d 2e 0a 4e 6f 20 63  ter table]..No c
1780: 68 61 6e 67 65 73 20 61 72 65 20 6d 61 64 65 20  hanges are made 
1790: 74 6f 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74  to table content
17a0: 2e 0a 42 65 63 61 75 73 65 20 6f 66 20 74 68 69  ..Because of thi
17b0: 73 2c 0a 74 68 65 20 65 78 65 63 75 74 69 6f 6e  s,.the execution
17c0: 20 74 69 6d 65 20 6f 66 20 74 68 65 20 41 4c 54   time of the ALT
17d0: 45 52 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  ER TABLE command
17e0: 20 69 73 20 69 6e 64 65 70 65 6e 64 65 6e 74 20   is independent 
17f0: 6f 66 0a 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66  of.the amount of
1800: 20 64 61 74 61 20 69 6e 20 74 68 65 20 74 61 62   data in the tab
1810: 6c 65 2e 20 20 54 68 65 20 41 4c 54 45 52 20 54  le.  The ALTER T
1820: 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 72 75 6e  ABLE command run
1830: 73 20 61 73 20 71 75 69 63 6b 6c 79 0a 6f 6e 20  s as quickly.on 
1840: 61 20 74 61 62 6c 65 20 77 69 74 68 20 31 30 20  a table with 10 
1850: 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 20 61 73 20  million rows as 
1860: 69 74 20 64 6f 65 73 20 6f 6e 20 61 20 74 61 62  it does on a tab
1870: 6c 65 20 77 69 74 68 20 31 20 72 6f 77 2e 0a 3c  le with 1 row..<
1880: 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 41 44  /p>..<p>After AD
1890: 44 20 43 4f 4c 55 4d 4e 20 68 61 73 20 62 65 65  D COLUMN has bee
18a0: 6e 20 72 75 6e 20 6f 6e 20 61 20 64 61 74 61 62  n run on a datab
18b0: 61 73 65 2c 20 74 68 61 74 20 64 61 74 61 62 61  ase, that databa
18c0: 73 65 20 77 69 6c 6c 20 6e 6f 74 0a 62 65 20 72  se will not.be r
18d0: 65 61 64 61 62 6c 65 20 62 79 20 53 51 4c 69 74  eadable by SQLit
18e0: 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20  e version 3.1.3 
18f0: 28 5b 64 61 74 65 6f 66 3a 33 2e 31 2e 33 5d 29  ([dateof:3.1.3])
1900: 20 61 6e 64 20 65 61 72 6c 69 65 72 2e 3c 2f 70   and earlier.</p
1910: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
1920: 65 6e 74 20 6f 74 68 65 72 61 6c 74 65 72 3c 2f  ent otheralter</
1930: 74 63 6c 3e 0a 3c 68 33 3e 4d 61 6b 69 6e 67 20  tcl>.<h3>Making 
1940: 4f 74 68 65 72 20 4b 69 6e 64 73 20 4f 66 20 54  Other Kinds Of T
1950: 61 62 6c 65 20 53 63 68 65 6d 61 20 43 68 61 6e  able Schema Chan
1960: 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 54 68  ges</h3>..<p> Th
1970: 65 20 6f 6e 6c 79 20 73 63 68 65 6d 61 20 61 6c  e only schema al
1980: 74 65 72 69 6e 67 20 63 6f 6d 6d 61 6e 64 73 20  tering commands 
1990: 64 69 72 65 63 74 6c 79 20 73 75 70 70 6f 72 74  directly support
19a0: 65 64 20 62 79 20 53 51 4c 69 74 65 20 61 72 65  ed by SQLite are
19b0: 20 74 68 65 0a 22 72 65 6e 61 6d 65 20 74 61 62   the."rename tab
19c0: 6c 65 22 2c 20 22 72 65 6e 61 6d 65 20 63 6f 6c  le", "rename col
19d0: 75 6d 6e 22 2c 20 61 6e 64 20 22 61 64 64 20 63  umn", and "add c
19e0: 6f 6c 75 6d 6e 22 20 63 6f 6d 6d 61 6e 64 73 20  olumn" commands 
19f0: 73 68 6f 77 6e 20 61 62 6f 76 65 2e 20 20 0a 48  shown above.  .H
1a00: 6f 77 65 76 65 72 2c 20 61 70 70 6c 69 63 61 74  owever, applicat
1a10: 69 6f 6e 73 0a 63 61 6e 20 6d 61 6b 65 20 6f 74  ions.can make ot
1a20: 68 65 72 20 61 72 62 69 74 72 61 72 79 20 63 68  her arbitrary ch
1a30: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 66 6f 72  anges to the for
1a40: 6d 61 74 20 6f 66 20 61 20 74 61 62 6c 65 20 75  mat of a table u
1a50: 73 69 6e 67 20 61 20 73 69 6d 70 6c 65 0a 73 65  sing a simple.se
1a60: 71 75 65 6e 63 65 20 6f 66 20 6f 70 65 72 61 74  quence of operat
1a70: 69 6f 6e 73 2e 0a 54 68 65 20 73 74 65 70 73 20  ions..The steps 
1a80: 74 6f 20 6d 61 6b 65 20 61 72 62 69 74 72 61 72  to make arbitrar
1a90: 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  y changes to the
1aa0: 20 73 63 68 65 6d 61 20 64 65 73 69 67 6e 20 6f   schema design o
1ab0: 66 20 73 6f 6d 65 20 74 61 62 6c 65 20 58 0a 61  f some table X.a
1ac0: 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  re as follows:..
1ad0: 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 49 66 20  <ol>.<li><p>.If 
1ae0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
1af0: 74 72 61 69 6e 74 73 20 61 72 65 20 65 6e 61 62  traints are enab
1b00: 6c 65 64 2c 0a 64 69 73 61 62 6c 65 20 74 68 65  led,.disable the
1b10: 6d 20 75 73 69 6e 67 20 5b 50 52 41 47 4d 41 20  m using [PRAGMA 
1b20: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20 7c 20 50  foreign_keys | P
1b30: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
1b40: 79 73 3d 4f 46 46 5d 2e 0a 0a 3c 6c 69 3e 3c 70  ys=OFF]...<li><p
1b50: 3e 0a 53 74 61 72 74 20 61 20 74 72 61 6e 73 61  >.Start a transa
1b60: 63 74 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ction...<li><p>.
1b70: 52 65 6d 65 6d 62 65 72 20 74 68 65 20 66 6f 72  Remember the for
1b80: 6d 61 74 20 6f 66 20 61 6c 6c 20 69 6e 64 65 78  mat of all index
1b90: 65 73 20 61 6e 64 20 74 72 69 67 67 65 72 73 20  es and triggers 
1ba0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1bb0: 74 61 62 6c 65 20 58 2e 0a 54 68 69 73 20 69 6e  table X..This in
1bc0: 66 6f 72 6d 61 74 69 6f 6e 20 77 69 6c 6c 20 62  formation will b
1bd0: 65 20 6e 65 65 64 65 64 20 69 6e 20 73 74 65 70  e needed in step
1be0: 20 38 20 62 65 6c 6f 77 2e 20 20 4f 6e 65 20 77   8 below.  One w
1bf0: 61 79 20 74 6f 20 64 6f 20 74 68 69 73 20 69 73  ay to do this is
1c00: 0a 74 6f 20 72 75 6e 20 61 20 71 75 65 72 79 20  .to run a query 
1c10: 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  like the followi
1c20: 6e 67 3a 0a 53 45 4c 45 43 54 20 74 79 70 65 2c  ng:.SELECT type,
1c30: 20 73 71 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65   sql FROM sqlite
1c40: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 62  _master WHERE tb
1c50: 6c 5f 6e 61 6d 65 3d 27 58 27 2e 0a 0a 3c 6c 69  l_name='X'...<li
1c60: 3e 3c 70 3e 0a 55 73 65 20 5b 43 52 45 41 54 45  ><p>.Use [CREATE
1c70: 20 54 41 42 4c 45 5d 20 74 6f 20 63 6f 6e 73 74   TABLE] to const
1c80: 72 75 63 74 20 61 20 6e 65 77 20 74 61 62 6c 65  ruct a new table
1c90: 20 22 6e 65 77 5f 58 22 20 74 68 61 74 20 69 73   "new_X" that is
1ca0: 20 69 6e 20 74 68 65 20 64 65 73 69 72 65 64 0a   in the desired.
1cb0: 72 65 76 69 73 65 64 20 66 6f 72 6d 61 74 20 6f  revised format o
1cc0: 66 20 74 61 62 6c 65 20 58 2e 20 20 4d 61 6b 65  f table X.  Make
1cd0: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 6e   sure that the n
1ce0: 61 6d 65 20 22 6e 65 77 5f 58 22 20 64 6f 65 73  ame "new_X" does
1cf0: 20 6e 6f 74 20 63 6f 6c 6c 69 64 65 0a 77 69 74   not collide.wit
1d00: 68 20 61 6e 79 20 65 78 69 73 74 69 6e 67 20 74  h any existing t
1d10: 61 62 6c 65 20 6e 61 6d 65 2c 20 6f 66 20 63 6f  able name, of co
1d20: 75 72 73 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 54  urse...<li><p>.T
1d30: 72 61 6e 73 66 65 72 20 63 6f 6e 74 65 6e 74 20  ransfer content 
1d40: 66 72 6f 6d 20 58 20 69 6e 74 6f 20 6e 65 77 5f  from X into new_
1d50: 58 20 75 73 69 6e 67 20 61 20 73 74 61 74 65 6d  X using a statem
1d60: 65 6e 74 0a 6c 69 6b 65 3a 20 49 4e 53 45 52 54  ent.like: INSERT
1d70: 20 49 4e 54 4f 20 6e 65 77 5f 58 20 53 45 4c 45   INTO new_X SELE
1d80: 43 54 20 2e 2e 2e 20 46 52 4f 4d 20 58 2e 0a 0a  CT ... FROM X...
1d90: 3c 6c 69 3e 3c 70 3e 0a 44 72 6f 70 20 74 68 65  <li><p>.Drop the
1da0: 20 6f 6c 64 20 74 61 62 6c 65 20 58 3a 20 20 5b   old table X:  [
1db0: 44 52 4f 50 20 54 41 42 4c 45 20 7c 20 44 52 4f  DROP TABLE | DRO
1dc0: 50 20 54 41 42 4c 45 20 58 5d 2e 0a 0a 3c 6c 69  P TABLE X]...<li
1dd0: 3e 3c 70 3e 0a 43 68 61 6e 67 65 20 74 68 65 20  ><p>.Change the 
1de0: 6e 61 6d 65 20 6f 66 20 6e 65 77 5f 58 20 74 6f  name of new_X to
1df0: 20 58 20 75 73 69 6e 67 3a 20 41 4c 54 45 52 20   X using: ALTER 
1e00: 54 41 42 4c 45 20 6e 65 77 5f 58 20 52 45 4e 41  TABLE new_X RENA
1e10: 4d 45 20 54 4f 20 58 2e 0a 0a 3c 6c 69 3e 3c 70  ME TO X...<li><p
1e20: 3e 0a 55 73 65 20 5b 43 52 45 41 54 45 20 49 4e  >.Use [CREATE IN
1e30: 44 45 58 5d 20 61 6e 64 20 5b 43 52 45 41 54 45  DEX] and [CREATE
1e40: 20 54 52 49 47 47 45 52 5d 20 74 6f 20 72 65 63   TRIGGER] to rec
1e50: 6f 6e 73 74 72 75 63 74 20 69 6e 64 65 78 65 73  onstruct indexes
1e60: 20 61 6e 64 20 74 72 69 67 67 65 72 73 0a 61 73   and triggers.as
1e70: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 61  sociated with ta
1e80: 62 6c 65 20 58 2e 20 20 50 65 72 68 61 70 73 20  ble X.  Perhaps 
1e90: 75 73 65 20 74 68 65 20 6f 6c 64 20 66 6f 72 6d  use the old form
1ea0: 61 74 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  at of the trigge
1eb0: 72 73 20 61 6e 64 0a 69 6e 64 65 78 65 73 20 73  rs and.indexes s
1ec0: 61 76 65 64 20 66 72 6f 6d 20 73 74 65 70 20 33  aved from step 3
1ed0: 20 61 62 6f 76 65 20 61 73 20 61 20 67 75 69 64   above as a guid
1ee0: 65 2c 20 6d 61 6b 69 6e 67 20 63 68 61 6e 67 65  e, making change
1ef0: 73 20 61 73 20 61 70 70 72 6f 70 72 69 61 74 65  s as appropriate
1f00: 0a 66 6f 72 20 74 68 65 20 61 6c 74 65 72 61 74  .for the alterat
1f10: 69 6f 6e 2e 0a 0a 3c 6c 69 3e 3c 70 3e 49 66 20  ion...<li><p>If 
1f20: 61 6e 79 20 76 69 65 77 73 20 72 65 66 65 72 20  any views refer 
1f30: 74 6f 20 74 61 62 6c 65 20 58 20 69 6e 20 61 20  to table X in a 
1f40: 77 61 79 20 74 68 61 74 20 69 73 20 61 66 66 65  way that is affe
1f50: 63 74 65 64 20 62 79 20 74 68 65 0a 73 63 68 65  cted by the.sche
1f60: 6d 61 20 63 68 61 6e 67 65 2c 20 74 68 65 6e 20  ma change, then 
1f70: 64 72 6f 70 20 74 68 6f 73 65 20 76 69 65 77 73  drop those views
1f80: 20 75 73 69 6e 67 20 5b 44 52 4f 50 20 56 49 45   using [DROP VIE
1f90: 57 5d 20 61 6e 64 20 72 65 63 72 65 61 74 65 20  W] and recreate 
1fa0: 74 68 65 6d 0a 77 69 74 68 20 77 68 61 74 65 76  them.with whatev
1fb0: 65 72 20 63 68 61 6e 67 65 73 20 61 72 65 20 6e  er changes are n
1fc0: 65 63 65 73 73 61 72 79 20 74 6f 20 61 63 63 6f  ecessary to acco
1fd0: 6d 6d 6f 64 61 74 65 20 74 68 65 20 73 63 68 65  mmodate the sche
1fe0: 6d 61 20 63 68 61 6e 67 65 0a 75 73 69 6e 67 20  ma change.using 
1ff0: 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2e 0a 0a  [CREATE VIEW]...
2000: 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65 69  <li><p>.If forei
2010: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2020: 74 73 20 77 65 72 65 20 6f 72 69 67 69 6e 61 6c  ts were original
2030: 6c 79 20 65 6e 61 62 6c 65 64 0a 74 68 65 6e 20  ly enabled.then 
2040: 72 75 6e 20 5b 50 52 41 47 4d 41 20 66 6f 72 65  run [PRAGMA fore
2050: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 5d 20 74  ign_key_check] t
2060: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  o verify that th
2070: 65 20 73 63 68 65 6d 61 0a 63 68 61 6e 67 65 20  e schema.change 
2080: 64 69 64 20 6e 6f 74 20 62 72 65 61 6b 20 61 6e  did not break an
2090: 79 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  y foreign key co
20a0: 6e 73 74 72 61 69 6e 74 73 2e 0a 0a 0a 3c 6c 69  nstraints....<li
20b0: 3e 3c 70 3e 0a 43 6f 6d 6d 69 74 20 74 68 65 20  ><p>.Commit the 
20c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 72  transaction star
20d0: 74 65 64 20 69 6e 20 73 74 65 70 20 32 2e 0a 0a  ted in step 2...
20e0: 3c 6c 69 3e 3c 70 3e 0a 49 66 20 66 6f 72 65 69  <li><p>.If forei
20f0: 67 6e 20 6b 65 79 73 20 63 6f 6e 73 74 72 61 69  gn keys constrai
2100: 6e 74 73 20 77 65 72 65 20 6f 72 69 67 69 6e 61  nts were origina
2110: 6c 6c 79 20 65 6e 61 62 6c 65 64 2c 20 72 65 65  lly enabled, ree
2120: 6e 61 62 6c 65 20 74 68 65 6d 20 6e 6f 77 2e 0a  nable them now..
2130: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 70 72  </ol>..<p>The pr
2140: 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20 69 73  ocedure above is
2150: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 67 65 6e 65   completely gene
2160: 72 61 6c 20 61 6e 64 20 77 69 6c 6c 20 77 6f 72  ral and will wor
2170: 6b 20 65 76 65 6e 20 69 66 20 74 68 65 0a 73 63  k even if the.sc
2180: 68 65 6d 61 20 63 68 61 6e 67 65 20 63 61 75 73  hema change caus
2190: 65 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  es the informati
21a0: 6f 6e 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  on stored in the
21b0: 20 74 61 62 6c 65 20 74 6f 20 63 68 61 6e 67 65   table to change
21c0: 2e 0a 53 6f 20 74 68 65 20 66 75 6c 6c 20 70 72  ..So the full pr
21d0: 6f 63 65 64 75 72 65 20 61 62 6f 76 65 20 69 73  ocedure above is
21e0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
21f0: 20 64 72 6f 70 70 69 6e 67 20 61 20 63 6f 6c 75   dropping a colu
2200: 6d 6e 2c 0a 63 68 61 6e 67 69 6e 67 20 74 68 65  mn,.changing the
2210: 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e   order of column
2220: 73 2c 20 61 64 64 69 6e 67 20 6f 72 20 72 65 6d  s, adding or rem
2230: 6f 76 69 6e 67 20 61 20 55 4e 49 51 55 45 20 63  oving a UNIQUE c
2240: 6f 6e 73 74 72 61 69 6e 74 0a 6f 72 20 50 52 49  onstraint.or PRI
2250: 4d 41 52 59 20 4b 45 59 2c 20 61 64 64 69 6e 67  MARY KEY, adding
2260: 20 43 48 45 43 4b 20 6f 72 20 46 4f 52 45 49 47   CHECK or FOREIG
2270: 4e 20 4b 45 59 20 6f 72 20 4e 4f 54 20 4e 55 4c  N KEY or NOT NUL
2280: 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 6f  L constraints,.o
2290: 72 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 64  r changing the d
22a0: 61 74 61 74 79 70 65 20 66 6f 72 20 61 20 63 6f  atatype for a co
22b0: 6c 75 6d 6e 2c 20 66 6f 72 20 65 78 61 6d 70 6c  lumn, for exampl
22c0: 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 61 20 73  e.  However, a s
22d0: 69 6d 70 6c 65 72 0a 61 6e 64 20 66 61 73 74 65  impler.and faste
22e0: 72 20 70 72 6f 63 65 64 75 72 65 20 63 61 6e 20  r procedure can 
22f0: 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 75 73  optionally be us
2300: 65 64 20 66 6f 72 0a 73 6f 6d 65 20 63 68 61 6e  ed for.some chan
2310: 67 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 20 61  ges that do no a
2320: 66 66 65 63 74 20 74 68 65 20 6f 6e 2d 64 69 73  ffect the on-dis
2330: 6b 20 63 6f 6e 74 65 6e 74 20 69 6e 20 61 6e 79  k content in any
2340: 20 77 61 79 2e 0a 54 68 65 20 66 6f 6c 6c 6f 77   way..The follow
2350: 69 6e 67 20 73 69 6d 70 6c 65 72 20 70 72 6f 63  ing simpler proc
2360: 65 64 75 72 65 20 69 73 20 61 70 70 72 6f 70 72  edure is appropr
2370: 69 61 74 65 20 66 6f 72 20 72 65 6d 6f 76 69 6e  iate for removin
2380: 67 0a 43 48 45 43 4b 20 6f 72 20 46 4f 52 45 49  g.CHECK or FOREI
2390: 47 4e 20 4b 45 59 20 6f 72 20 4e 4f 54 20 4e 55  GN KEY or NOT NU
23a0: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a  LL constraints,.
23b0: 6f 72 20 61 64 64 69 6e 67 2c 20 72 65 6d 6f 76  or adding, remov
23c0: 69 6e 67 2c 20 6f 72 20 63 68 61 6e 67 69 6e 67  ing, or changing
23d0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 20   default values 
23e0: 6f 6e 0a 61 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c 6f  on.a column...<o
23f0: 6c 3e 0a 3c 6c 49 3e 3c 70 3e 20 53 74 61 72 74  l>.<lI><p> Start
2400: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a   a transaction..
2410: 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20 5b 50 52  .<li><p> Run [PR
2420: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
2430: 69 6f 6e 5d 20 74 6f 20 64 65 74 65 72 6d 69 6e  ion] to determin
2440: 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 63  e the current sc
2450: 68 65 6d 61 0a 76 65 72 73 69 6f 6e 20 6e 75 6d  hema.version num
2460: 62 65 72 2e 20 20 54 68 69 73 20 6e 75 6d 62 65  ber.  This numbe
2470: 72 20 77 69 6c 6c 20 62 65 20 6e 65 65 64 65 64  r will be needed
2480: 20 66 6f 72 20 73 74 65 70 20 36 20 62 65 6c 6f   for step 6 belo
2490: 77 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 41 63 74 69  w...<li><p> Acti
24a0: 76 61 74 65 20 73 63 68 65 6d 61 20 65 64 69 74  vate schema edit
24b0: 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50 52 41 47  ing using .[PRAG
24c0: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
24d0: 6d 61 20 7c 20 50 52 41 47 4d 41 20 77 72 69 74  ma | PRAGMA writ
24e0: 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 5d 2e  able_schema=ON].
24f0: 0a 0a 3c 6c 69 3e 3c 70 3e 20 52 75 6e 20 61 6e  ..<li><p> Run an
2500: 20 5b 55 50 44 41 54 45 5d 20 73 74 61 74 65 6d   [UPDATE] statem
2510: 65 6e 74 20 74 6f 20 63 68 61 6e 67 65 20 74 68  ent to change th
2520: 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
2530: 74 61 62 6c 65 20 58 0a 69 6e 20 74 68 65 20 5b  table X.in the [
2540: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
2550: 62 6c 65 5d 3a 20 0a 55 50 44 41 54 45 20 73 71  ble]: .UPDATE sq
2560: 6c 69 74 65 5f 6d 61 73 74 65 72 20 53 45 54 20  lite_master SET 
2570: 73 71 6c 3d 2e 2e 2e 20 57 48 45 52 45 20 74 79  sql=... WHERE ty
2580: 70 65 3d 27 74 61 62 6c 65 27 20 41 4e 44 20 6e  pe='table' AND n
2590: 61 6d 65 3d 27 58 27 3b 0a 3c 70 3e 3c 65 6d 3e  ame='X';.<p><em>
25a0: 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20 20 4d  Caution:</em>  M
25b0: 61 6b 69 6e 67 20 61 20 63 68 61 6e 67 65 20 74  aking a change t
25c0: 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  o the sqlite_mas
25d0: 74 65 72 20 74 61 62 6c 65 20 6c 69 6b 65 20 74  ter table like t
25e0: 68 69 73 20 77 69 6c 6c 0a 72 65 6e 64 65 72 20  his will.render 
25f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 72  the database cor
2600: 72 75 70 74 20 61 6e 64 20 75 6e 72 65 61 64 61  rupt and unreada
2610: 62 6c 65 20 69 66 20 74 68 65 20 63 68 61 6e 67  ble if the chang
2620: 65 20 63 6f 6e 74 61 69 6e 73 0a 61 20 73 79 6e  e contains.a syn
2630: 74 61 78 20 65 72 72 6f 72 2e 20 20 49 74 20 69  tax error.  It i
2640: 73 20 73 75 67 67 65 73 74 65 64 20 74 68 61 74  s suggested that
2650: 20 63 61 72 65 66 75 6c 20 74 65 73 74 69 6e 67   careful testing
2660: 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 0a 73   of the UPDATE.s
2670: 74 61 74 65 6d 65 6e 74 20 62 65 20 64 6f 6e 65  tatement be done
2680: 20 6f 6e 20 61 20 73 65 70 61 72 61 74 65 20 62   on a separate b
2690: 6c 61 6e 6b 20 64 61 74 61 62 61 73 65 20 70 72  lank database pr
26a0: 69 6f 72 20 74 6f 20 75 73 69 6e 67 20 69 74 20  ior to using it 
26b0: 6f 6e 0a 61 20 64 61 74 61 62 61 73 65 20 63 6f  on.a database co
26c0: 6e 74 61 69 6e 69 6e 67 20 69 6d 70 6f 72 74 61  ntaining importa
26d0: 6e 74 20 64 61 74 61 2e 0a 0a 3c 6c 69 3e 3c 70  nt data...<li><p
26e0: 3e 20 49 66 20 74 68 65 20 63 68 61 6e 67 65 20  > If the change 
26f0: 74 6f 20 74 61 62 6c 65 20 58 20 61 6c 73 6f 20  to table X also 
2700: 61 66 66 65 63 74 73 20 6f 74 68 65 72 20 74 61  affects other ta
2710: 62 6c 65 73 20 6f 72 20 69 6e 64 65 78 65 73 20  bles or indexes 
2720: 6f 72 0a 74 72 69 67 67 65 72 73 20 61 72 65 20  or.triggers are 
2730: 76 69 65 77 73 20 77 69 74 68 69 6e 20 73 63 68  views within sch
2740: 65 6d 61 2c 20 74 68 65 6e 20 72 75 6e 20 5b 55  ema, then run [U
2750: 50 44 41 54 45 5d 20 73 74 61 74 65 6d 65 6e 74  PDATE] statement
2760: 73 20 74 6f 20 6d 6f 64 69 66 79 0a 74 68 6f 73  s to modify.thos
2770: 65 20 6f 74 68 65 72 20 74 61 62 6c 65 73 20 69  e other tables i
2780: 6e 64 65 78 65 73 20 61 6e 64 20 76 69 65 77 73  ndexes and views
2790: 20 74 6f 6f 2e 20 20 46 6f 72 20 65 78 61 6d 70   too.  For examp
27a0: 6c 65 2c 20 69 66 20 74 68 65 20 6e 61 6d 65 20  le, if the name 
27b0: 6f 66 0a 61 20 63 6f 6c 75 6d 6e 20 63 68 61 6e  of.a column chan
27c0: 67 65 73 2c 20 61 6c 6c 20 46 4f 52 45 49 47 4e  ges, all FOREIGN
27d0: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73   KEY constraints
27e0: 2c 20 74 72 69 67 67 65 72 73 2c 20 69 6e 64 65  , triggers, inde
27f0: 78 65 73 2c 20 61 6e 64 0a 76 69 65 77 73 20 74  xes, and.views t
2800: 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 61  hat refer to tha
2810: 74 20 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 62 65  t column must be
2820: 20 6d 6f 64 69 66 69 65 64 2e 0a 3c 70 3e 3c 65   modified..<p><e
2830: 6d 3e 43 61 75 74 69 6f 6e 3a 3c 2f 65 6d 3e 20  m>Caution:</em> 
2840: 20 4f 6e 63 65 20 61 67 61 69 6e 2c 20 6d 61 6b   Once again, mak
2850: 69 6e 67 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ing changes to t
2860: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
2870: 20 0a 74 61 62 6c 65 20 6c 69 6b 65 20 74 68 69   .table like thi
2880: 73 20 77 69 6c 6c 20 72 65 6e 64 65 72 20 74 68  s will render th
2890: 65 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  e database corru
28a0: 70 74 20 61 6e 64 20 75 6e 72 65 61 64 61 62 6c  pt and unreadabl
28b0: 65 20 69 66 20 74 68 65 20 0a 63 68 61 6e 67 65  e if the .change
28c0: 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 65 72 72   contains an err
28d0: 6f 72 2e 20 20 43 61 72 65 66 75 6c 6c 79 20 74  or.  Carefully t
28e0: 65 73 74 20 74 68 69 73 20 65 6e 74 69 72 65 20  est this entire 
28f0: 70 72 6f 63 65 64 75 72 65 0a 6f 6e 20 61 20 73  procedure.on a s
2900: 65 70 61 72 61 74 65 20 74 65 73 74 20 64 61 74  eparate test dat
2910: 61 62 61 73 65 20 70 72 69 6f 72 20 74 6f 20 75  abase prior to u
2920: 73 69 6e 67 20 69 74 20 6f 6e 0a 61 20 64 61 74  sing it on.a dat
2930: 61 62 61 73 65 20 63 6f 6e 74 61 69 6e 69 6e 67  abase containing
2940: 20 69 6d 70 6f 72 74 61 6e 74 20 64 61 74 61 20   important data 
2950: 61 6e 64 2f 6f 72 20 6d 61 6b 65 20 62 61 63 6b  and/or make back
2960: 75 70 20 63 6f 70 69 65 73 20 6f 66 0a 69 6d 70  up copies of.imp
2970: 6f 72 74 61 6e 74 20 64 61 74 61 62 61 73 65 73  ortant databases
2980: 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e   prior to runnin
2990: 67 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  g this procedure
29a0: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 49 6e 63 72 65  ...<li><p> Incre
29b0: 6d 65 6e 74 20 74 68 65 20 73 63 68 65 6d 61 20  ment the schema 
29c0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 75  version number u
29d0: 73 69 6e 67 0a 5b 50 52 41 47 4d 41 20 73 63 68  sing.[PRAGMA sch
29e0: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7c 20 50 52  ema_version | PR
29f0: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
2a00: 69 6f 6e 3d 58 5d 20 77 68 65 72 65 20 58 20 69  ion=X] where X i
2a10: 73 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e 20  s one.more than 
2a20: 74 68 65 20 6f 6c 64 20 73 63 68 65 6d 61 20 76  the old schema v
2a30: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
2a40: 75 6e 64 20 69 6e 20 73 74 65 70 20 32 20 61 62  und in step 2 ab
2a50: 6f 76 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 44 69  ove...<li><p> Di
2a60: 73 61 62 6c 65 20 73 63 68 65 6d 61 20 65 64 69  sable schema edi
2a70: 74 69 6e 67 20 75 73 69 6e 67 20 0a 5b 50 52 41  ting using .[PRA
2a80: 47 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68  GMA writable_sch
2a90: 65 6d 61 20 7c 20 50 52 41 47 4d 41 20 77 72 69  ema | PRAGMA wri
2aa0: 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46  table_schema=OFF
2ab0: 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 28 4f 70 74  ]...<li><p> (Opt
2ac0: 69 6f 6e 61 6c 29 20 52 75 6e 20 5b 50 52 41 47  ional) Run [PRAG
2ad0: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2ae0: 63 6b 5d 20 74 6f 20 76 65 72 69 66 79 20 74 68  ck] to verify th
2af0: 61 74 20 74 68 65 0a 73 63 68 65 6d 61 20 63 68  at the.schema ch
2b00: 61 6e 67 65 73 20 64 69 64 20 6e 6f 74 20 64 61  anges did not da
2b10: 6d 61 67 65 20 74 68 65 20 64 61 74 61 62 61 73  mage the databas
2b20: 65 2e 0a 0a 3c 6c 69 3e 3c 70 3e 20 43 6f 6d 6d  e...<li><p> Comm
2b30: 69 74 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  it the transacti
2b40: 6f 6e 20 73 74 61 72 74 65 64 20 6f 6e 20 73 74  on started on st
2b50: 65 70 20 31 20 61 62 6f 76 65 2e 0a 3c 2f 6f 6c  ep 1 above..</ol
2b60: 3e 0a 0a 3c 70 3e 49 66 20 73 6f 6d 65 20 66 75  >..<p>If some fu
2b70: 74 75 72 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  ture version of 
2b80: 53 51 4c 69 74 65 20 61 64 64 73 20 6e 65 77 20  SQLite adds new 
2b90: 41 4c 54 45 52 20 54 41 42 4c 45 20 63 61 70 61  ALTER TABLE capa
2ba0: 62 69 6c 69 74 69 65 73 2c 20 0a 74 68 6f 73 65  bilities, .those
2bb0: 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 77 69   capabilities wi
2bc0: 6c 6c 20 76 65 72 79 20 6c 69 6b 65 6c 79 20 75  ll very likely u
2bd0: 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 77  se one of the tw
2be0: 6f 20 70 72 6f 63 65 64 75 72 65 73 0a 6f 75 74  o procedures.out
2bf0: 6c 69 6e 65 64 20 61 62 6f 76 65 2e 0a 0a 3c 74  lined above...<t
2c00: 63 6c 3e 0a 23 20 20 4f 6e 65 20 6f 66 20 74 68  cl>.#  One of th
2c10: 65 20 72 65 61 73 6f 6e 73 20 74 68 61 74 0a 23  e reasons that.#
2c20: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
2c30: 20 63 75 72 72 65 6e 74 6c 79 20 73 75 70 70 6f   currently suppo
2c40: 72 74 20 6d 6f 72 65 20 41 4c 54 45 52 20 54 41  rt more ALTER TA
2c50: 42 4c 45 20 63 61 70 61 62 69 6c 69 74 69 65 73  BLE capabilities
2c60: 20 69 73 20 74 68 61 74 0a 23 20 74 68 65 20 70   is that.# the p
2c70: 72 6f 63 65 64 75 72 65 20 73 68 6f 77 6e 20 61  rocedure shown a
2c80: 62 6f 76 65 20 69 73 20 64 69 66 66 69 63 75 6c  bove is difficul
2c90: 74 20 74 6f 20 61 75 74 6f 6d 61 74 65 20 66 6f  t to automate fo
2ca0: 72 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73  r an arbitrary s
2cb0: 63 68 65 6d 61 2e 0a 23 20 50 61 72 74 69 63 75  chema..# Particu
2cc0: 6c 61 72 6c 79 20 74 72 6f 75 62 6c 65 73 6f 6d  larly troublesom
2cd0: 65 20 61 72 65 61 73 20 61 72 65 20 69 64 65 6e  e areas are iden
2ce0: 74 69 66 79 69 6e 67 20 61 6c 6c 20 76 69 65 77  tifying all view
2cf0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2d00: 68 0a 23 20 74 61 62 6c 65 20 58 20 69 6e 20 73  h.# table X in s
2d10: 74 65 70 20 31 20 61 6e 64 20 63 72 65 61 74 69  tep 1 and creati
2d20: 6e 67 20 6e 65 77 20 76 69 65 77 73 20 61 6e 64  ng new views and
2d30: 20 74 72 69 67 67 65 72 73 20 74 68 61 74 20 61   triggers that a
2d40: 72 65 20 63 6f 6d 70 61 74 69 62 6c 65 0a 23 20  re compatible.# 
2d50: 77 69 74 68 20 74 68 65 20 61 6c 74 65 72 65 64  with the altered
2d60: 20 73 63 68 65 6d 61 20 66 6f 72 20 74 61 62 6c   schema for tabl
2d70: 65 20 58 20 69 6e 20 73 74 65 70 20 36 2e 20 20  e X in step 6.  
2d80: 49 74 20 69 73 20 61 20 74 72 69 63 6b 79 20 62  It is a tricky b
2d90: 75 74 20 73 6f 6c 76 61 62 6c 65 0a 23 20 70 72  ut solvable.# pr
2da0: 6f 62 6c 65 6d 20 74 6f 20 63 72 65 61 74 65 20  oblem to create 
2db0: 63 6f 64 65 20 74 68 61 74 20 77 69 6c 6c 20 70  code that will p
2dc0: 65 72 66 6f 72 6d 20 74 68 65 20 73 74 65 70 73  erform the steps
2dd0: 20 61 62 6f 76 65 20 0a 23 20 66 6f 72 20 22 72   above .# for "r
2de0: 65 61 73 6f 6e 61 62 6c 65 22 20 73 63 68 65 6d  easonable" schem
2df0: 61 73 20 63 6f 6d 6d 6f 6e 6c 79 20 66 6f 75 6e  as commonly foun
2e00: 64 20 69 6e 20 70 72 61 63 74 69 63 65 2e 20 20  d in practice.  
2e10: 0a 23 20 42 75 74 20 74 68 65 72 65 20 65 78 69  .# But there exi
2e20: 73 74 20 6d 61 6c 65 76 6f 6c 65 6e 74 20 73 63  st malevolent sc
2e30: 68 65 6d 61 73 20 66 6f 72 20 77 68 69 63 68 0a  hemas for which.
2e40: 23 20 74 68 65 73 65 20 73 74 65 70 73 20 61 72  # these steps ar
2e50: 65 20 6d 61 64 64 65 6e 69 6e 67 6c 79 20 64 69  e maddeningly di
2e60: 66 66 69 63 75 6c 74 20 74 6f 20 64 6f 20 63 6f  fficult to do co
2e70: 72 72 65 63 74 6c 79 2e 20 20 52 61 74 68 65 72  rrectly.  Rather
2e80: 20 74 68 61 6e 20 63 72 65 61 74 65 0a 23 20 41   than create.# A
2e90: 4c 54 45 52 20 54 41 42 4c 45 20 66 65 61 74 75  LTER TABLE featu
2ea0: 72 65 73 20 74 68 61 74 20 77 6f 72 6b 20 63 6f  res that work co
2eb0: 72 72 65 63 74 6c 79 20 39 39 2e 39 25 20 6f 66  rrectly 99.9% of
2ec0: 20 74 68 65 20 74 69 6d 65 20 62 75 74 20 70 6f   the time but po
2ed0: 73 73 69 62 6c 79 0a 23 20 63 6f 72 72 75 70 74  ssibly.# corrupt
2ee0: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 6e 20 74   the schema on t
2ef0: 68 65 20 6f 74 68 65 72 20 30 2e 31 25 2c 20 74  he other 0.1%, t
2f00: 68 65 20 53 51 4c 69 74 65 20 64 65 76 65 6c 6f  he SQLite develo
2f10: 70 65 72 73 20 68 61 76 65 20 64 65 63 69 64 65  pers have decide
2f20: 64 0a 23 20 74 6f 20 70 75 73 68 20 74 68 65 20  d.# to push the 
2f30: 70 72 6f 62 6c 65 6d 20 69 6e 74 6f 20 74 68 65  problem into the
2f40: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d   application dom
2f50: 61 69 6e 2c 20 77 68 65 72 65 20 69 74 20 69 73  ain, where it is
2f60: 20 6d 75 63 68 20 65 61 73 69 65 72 0a 23 20 74   much easier.# t
2f70: 6f 20 73 6f 6c 76 65 2e 0a 3c 2f 74 63 6c 3e 0a  o solve..</tcl>.
2f80: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
2f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fd0: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
2fe0: 41 4e 41 4c 59 5a 45 7d 20 61 6e 61 6c 79 7a 65  ANALYZE} analyze
2ff0: 20 41 4e 41 4c 59 5a 45 0a 0a 52 65 63 75 72 73   ANALYZE..Recurs
3000: 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
3010: 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 0a 3c 2f   analyze-stmt.</
3020: 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 41  tcl>..<p> ^The A
3030: 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 67  NALYZE command g
3040: 61 74 68 65 72 73 20 73 74 61 74 69 73 74 69 63  athers statistic
3050: 73 20 61 62 6f 75 74 20 74 61 62 6c 65 73 20 61  s about tables a
3060: 6e 64 0a 69 6e 64 69 63 65 73 20 61 6e 64 20 73  nd.indices and s
3070: 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 6c 65 63  tores the collec
3080: 74 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ted information.
3090: 69 6e 20 5b 69 6e 74 65 72 6e 61 6c 20 74 61 62  in [internal tab
30a0: 6c 65 73 5d 20 6f 66 20 74 68 65 20 64 61 74 61  les] of the data
30b0: 62 61 73 65 20 77 68 65 72 65 20 74 68 65 20 71  base where the q
30c0: 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63  uery optimizer c
30d0: 61 6e 0a 61 63 63 65 73 73 20 74 68 65 20 69 6e  an.access the in
30e0: 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 75 73  formation and us
30f0: 65 20 69 74 20 74 6f 20 68 65 6c 70 20 6d 61 6b  e it to help mak
3100: 65 20 62 65 74 74 65 72 20 71 75 65 72 79 20 70  e better query p
3110: 6c 61 6e 6e 69 6e 67 20 63 68 6f 69 63 65 73 2e  lanning choices.
3120: 0a 5e 49 66 20 6e 6f 20 61 72 67 75 6d 65 6e 74  .^If no argument
3130: 73 20 61 72 65 20 67 69 76 65 6e 2c 20 61 6c 6c  s are given, all
3140: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
3150: 73 65 73 20 61 72 65 0a 61 6e 61 6c 79 7a 65 64  ses are.analyzed
3160: 2e 20 20 5e 49 66 20 61 20 73 63 68 65 6d 61 20  .  ^If a schema 
3170: 6e 61 6d 65 20 69 73 20 67 69 76 65 6e 20 61 73  name is given as
3180: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2c 20 74   the argument, t
3190: 68 65 6e 20 61 6c 6c 20 74 61 62 6c 65 73 0a 61  hen all tables.a
31a0: 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68  nd indices in th
31b0: 61 74 20 6f 6e 65 20 64 61 74 61 62 61 73 65 20  at one database 
31c0: 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20 20 0a  are analyzed.  .
31d0: 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74  ^If the argument
31e0: 20 69 73 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   is a table name
31f0: 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74  , then only that
3200: 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 0a 69   table and the.i
3210: 6e 64 69 63 65 73 20 61 73 73 6f 63 69 61 74 65  ndices associate
3220: 64 20 77 69 74 68 20 74 68 61 74 20 74 61 62 6c  d with that tabl
3230: 65 20 61 72 65 20 61 6e 61 6c 79 7a 65 64 2e 20  e are analyzed. 
3240: 20 5e 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e   ^If the argumen
3250: 74 0a 69 73 20 61 6e 20 69 6e 64 65 78 20 6e 61  t.is an index na
3260: 6d 65 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  me, then only th
3270: 61 74 20 6f 6e 65 20 69 6e 64 65 78 20 69 73 20  at one index is 
3280: 61 6e 61 6c 79 7a 65 64 2e 3c 2f 70 3e 0a 0a 3c  analyzed.</p>..<
3290: 70 3e 20 5e 54 68 65 20 64 65 66 61 75 6c 74 20  p> ^The default 
32a0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 73  implementation s
32b0: 74 6f 72 65 73 20 61 6c 6c 20 73 74 61 74 69 73  tores all statis
32c0: 74 69 63 73 20 69 6e 20 61 20 73 69 6e 67 6c 65  tics in a single
32d0: 0a 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 5b 73  .table named "[s
32e0: 71 6c 69 74 65 5f 73 74 61 74 31 5d 22 2e 20 20  qlite_stat1]".  
32f0: 5e 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f  ^If SQLite is co
3300: 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a  mpiled with the.
3310: 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
3320: 54 41 54 33 5d 20 6f 70 74 69 6f 6e 20 61 6e 64  TAT3] option and
3330: 20 77 69 74 68 6f 75 74 20 74 68 65 20 5b 53 51   without the [SQ
3340: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
3350: 34 5d 0a 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20  4].option, then 
3360: 61 64 64 69 74 69 6f 6e 61 6c 20 68 69 73 74 6f  additional histo
3370: 67 72 61 6d 20 64 61 74 61 20 69 73 0a 63 6f 6c  gram data is.col
3380: 6c 65 63 74 65 64 20 61 6e 64 20 73 74 6f 72 65  lected and store
3390: 64 20 69 6e 20 5b 73 71 6c 69 74 65 5f 73 74 61  d in [sqlite_sta
33a0: 74 33 5d 2e 0a 20 5e 49 66 20 53 51 4c 69 74 65  t3].. ^If SQLite
33b0: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
33c0: 68 20 74 68 65 0a 5b 53 51 4c 49 54 45 5f 45 4e  h the.[SQLITE_EN
33d0: 41 42 4c 45 5f 53 54 41 54 34 5d 20 6f 70 74 69  ABLE_STAT4] opti
33e0: 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74 69 6f  on, then additio
33f0: 6e 61 6c 20 68 69 73 74 6f 67 72 61 6d 20 64 61  nal histogram da
3400: 74 61 20 69 73 0a 63 6f 6c 6c 65 63 74 65 64 20  ta is.collected 
3410: 61 6e 64 20 73 74 6f 72 65 64 20 69 6e 20 5b 73  and stored in [s
3420: 71 6c 69 74 65 5f 73 74 61 74 34 5d 2e 0a 4f 6c  qlite_stat4]..Ol
3430: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
3440: 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 6d 61 6b  SQLite would mak
3450: 65 20 75 73 65 20 6f 66 20 74 68 65 20 5b 73 71  e use of the [sq
3460: 6c 69 74 65 5f 73 74 61 74 32 5d 20 74 61 62 6c  lite_stat2] tabl
3470: 65 0a 77 68 65 6e 20 63 6f 6d 70 69 6c 65 64 20  e.when compiled 
3480: 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41  with [SQLITE_ENA
3490: 42 4c 45 5f 53 54 41 54 32 5d 20 62 75 74 20 61  BLE_STAT2] but a
34a0: 6c 6c 20 72 65 63 65 6e 74 20 76 65 72 73 69 6f  ll recent versio
34b0: 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 69 67 6e  ns of.SQLite ign
34c0: 6f 72 65 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ore the sqlite_s
34d0: 74 61 74 32 20 74 61 62 6c 65 2e 0a 46 75 74 75  tat2 table..Futu
34e0: 72 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20  re enhancements 
34f0: 6d 61 79 20 63 72 65 61 74 65 0a 61 64 64 69 74  may create.addit
3500: 69 6f 6e 61 6c 20 5b 69 6e 74 65 72 6e 61 6c 20  ional [internal 
3510: 74 61 62 6c 65 73 5d 20 77 69 74 68 20 74 68 65  tables] with the
3520: 20 73 61 6d 65 20 6e 61 6d 65 20 70 61 74 74 65   same name patte
3530: 72 6e 20 65 78 63 65 70 74 20 77 69 74 68 0a 66  rn except with.f
3540: 69 6e 61 6c 20 64 69 67 69 74 20 6c 61 72 67 65  inal digit large
3550: 72 20 74 68 61 6e 20 22 34 22 2e 0a 41 6c 6c 20  r than "4"..All 
3560: 6f 66 20 74 68 65 73 65 20 74 61 62 6c 65 73 20  of these tables 
3570: 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79  are collectively
3580: 20 72 65 66 65 72 72 65 64 20 74 6f 20 61 73 20   referred to as 
3590: 22 73 74 61 74 69 73 74 69 63 73 20 74 61 62 6c  "statistics tabl
35a0: 65 73 22 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  es"..</p>..<p> ^
35b0: 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  The content of t
35c0: 68 65 20 73 74 61 74 69 73 74 69 63 73 20 74 61  he statistics ta
35d0: 62 6c 65 73 20 63 61 6e 20 62 65 20 71 75 65 72  bles can be quer
35e0: 69 65 64 20 75 73 69 6e 67 20 5b 53 45 4c 45 43  ied using [SELEC
35f0: 54 5d 0a 61 6e 64 20 63 61 6e 20 62 65 20 63 68  T].and can be ch
3600: 61 6e 67 65 64 20 75 73 69 6e 67 20 74 68 65 20  anged using the 
3610: 5b 44 45 4c 45 54 45 5d 2c 20 5b 49 4e 53 45 52  [DELETE], [INSER
3620: 54 5d 2c 20 61 6e 64 20 5b 55 50 44 41 54 45 5d  T], and [UPDATE]
3630: 20 63 6f 6d 6d 61 6e 64 73 2e 0a 5e 28 54 68 65   commands..^(The
3640: 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20 63 6f   [DROP TABLE] co
3650: 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 6f 6e 20 73  mmand works on s
3660: 74 61 74 69 73 74 69 63 73 20 74 61 62 6c 65 73  tatistics tables
3670: 0a 61 73 20 6f 66 20 53 51 4c 69 74 65 20 76 65  .as of SQLite ve
3680: 72 73 69 6f 6e 20 33 2e 37 2e 39 2e 29 5e 20 28  rsion 3.7.9.)^ (
3690: 5b 64 61 74 65 6f 66 3a 33 2e 37 2e 39 5d 29 0a  [dateof:3.7.9]).
36a0: 5e 54 68 65 20 5b 41 4c 54 45 52 20 54 41 42 4c  ^The [ALTER TABL
36b0: 45 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20  E] command does 
36c0: 6e 6f 74 20 77 6f 72 6b 20 6f 6e 20 73 74 61 74  not work on stat
36d0: 69 73 74 69 63 73 20 74 61 62 6c 65 73 2e 0a 41  istics tables..A
36e0: 70 70 72 6f 70 72 69 61 74 65 20 63 61 72 65 20  ppropriate care 
36f0: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 77  should be used w
3700: 68 65 6e 20 63 68 61 6e 67 69 6e 67 20 74 68 65  hen changing the
3710: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
3720: 73 74 61 74 69 73 74 69 63 73 0a 74 61 62 6c 65  statistics.table
3730: 73 20 61 73 20 69 6e 76 61 6c 69 64 20 63 6f 6e  s as invalid con
3740: 74 65 6e 74 20 63 61 6e 20 63 61 75 73 65 20 53  tent can cause S
3750: 51 4c 69 74 65 20 74 6f 20 73 65 6c 65 63 74 20  QLite to select 
3760: 69 6e 65 66 66 69 63 69 65 6e 74 0a 71 75 65 72  inefficient.quer
3770: 79 20 70 6c 61 6e 73 2e 20 20 47 65 6e 65 72 61  y plans.  Genera
3780: 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20 6f 6e  lly speaking, on
3790: 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 6d 6f 64  e should not mod
37a0: 69 66 79 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ify the content 
37b0: 6f 66 0a 74 68 65 20 73 74 61 74 69 73 74 69 63  of.the statistic
37c0: 73 20 74 61 62 6c 65 73 20 62 79 20 61 6e 79 20  s tables by any 
37d0: 6d 65 63 68 61 6e 69 73 6d 20 6f 74 68 65 72 20  mechanism other 
37e0: 74 68 61 6e 20 69 6e 76 6f 6b 69 6e 67 20 74 68  than invoking th
37f0: 65 0a 41 4e 41 4c 59 5a 45 20 63 6f 6d 6d 61 6e  e.ANALYZE comman
3800: 64 2e 20 20 0a 53 65 65 20 22 5b 4d 61 6e 75 61  d.  .See "[Manua
3810: 6c 20 43 6f 6e 74 72 6f 6c 20 4f 66 20 51 75 65  l Control Of Que
3820: 72 79 20 50 6c 61 6e 73 20 55 73 69 6e 67 20 53  ry Plans Using S
3830: 51 4c 49 54 45 5f 53 54 41 54 20 54 61 62 6c 65  QLITE_STAT Table
3840: 73 5d 22 20 66 6f 72 0a 66 75 72 74 68 65 72 20  s]" for.further 
3850: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 3e  information.</p>
3860: 0a 0a 3c 70 3e 20 5e 53 74 61 74 69 73 74 69 63  ..<p> ^Statistic
3870: 73 20 67 61 74 68 65 72 65 64 20 62 79 20 41 4e  s gathered by AN
3880: 41 4c 59 5a 45 20 61 72 65 20 6e 6f 74 20 61 75  ALYZE are not au
3890: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64 61  tomatically upda
38a0: 74 65 64 20 61 73 0a 74 68 65 20 63 6f 6e 74 65  ted as.the conte
38b0: 6e 74 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  nt of the databa
38c0: 73 65 20 63 68 61 6e 67 65 73 2e 20 20 49 66 20  se changes.  If 
38d0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
38e0: 68 65 20 64 61 74 61 62 61 73 65 0a 63 68 61 6e  he database.chan
38f0: 67 65 73 20 73 69 67 6e 69 66 69 63 61 6e 74 6c  ges significantl
3900: 79 2c 20 6f 72 20 69 66 20 74 68 65 20 64 61 74  y, or if the dat
3910: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
3920: 6e 67 65 73 2c 20 74 68 65 6e 20 6f 6e 65 20 73  nges, then one s
3930: 68 6f 75 6c 64 0a 63 6f 6e 73 69 64 65 72 20 72  hould.consider r
3940: 65 72 75 6e 6e 69 6e 67 20 74 68 65 20 41 4e 41  erunning the ANA
3950: 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 20 69 6e 20  LYZE command in 
3960: 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 20  order to update 
3970: 74 68 65 20 73 74 61 74 69 73 74 69 63 73 2e 3c  the statistics.<
3980: 2f 70 3e 0a 0a 3c 70 3e 20 54 68 65 20 71 75 65  /p>..<p> The que
3990: 72 79 20 70 6c 61 6e 6e 65 72 20 6c 6f 61 64 73  ry planner loads
39a0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
39b0: 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20 74  the statistics t
39c0: 61 62 6c 65 73 0a 69 6e 74 6f 20 6d 65 6d 6f 72  ables.into memor
39d0: 79 20 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d  y when the schem
39e0: 61 20 69 73 20 72 65 61 64 2e 20 20 5e 48 65 6e  a is read.  ^Hen
39f0: 63 65 2c 20 77 68 65 6e 20 61 6e 20 61 70 70 6c  ce, when an appl
3a00: 69 63 61 74 69 6f 6e 0a 63 68 61 6e 67 65 73 20  ication.changes 
3a10: 74 68 65 20 73 74 61 74 69 73 74 69 63 73 20 74  the statistics t
3a20: 61 62 6c 65 73 20 64 69 72 65 63 74 6c 79 2c 20  ables directly, 
3a30: 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74 20  SQLite will not 
3a40: 69 6d 6d 65 64 69 61 74 65 6c 79 0a 6e 6f 74 69  immediately.noti
3a50: 63 65 20 74 68 65 20 63 68 61 6e 67 65 73 2e 20  ce the changes. 
3a60: 5e 41 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a  ^An application.
3a70: 63 61 6e 20 66 6f 72 63 65 20 74 68 65 20 71 75  can force the qu
3a80: 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20 72  ery planner to r
3a90: 65 72 65 61 64 20 74 68 65 20 73 74 61 74 69 73  eread the statis
3aa0: 74 69 63 73 20 74 61 62 6c 65 73 20 62 79 20 72  tics tables by r
3ab0: 75 6e 6e 69 6e 67 0a 3c 62 3e 41 4e 41 4c 59 5a  unning.<b>ANALYZ
3ac0: 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3c  E sqlite_master<
3ad0: 2f 62 3e 2e 20 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  /b>. </p>..<tcl>
3ae0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 61 75 74 6f  hd_fragment auto
3af0: 61 6e 61 6c 79 7a 65 20 7b 61 75 74 6f 6d 61 74  analyze {automat
3b00: 69 63 61 6c 6c 79 20 72 75 6e 6e 69 6e 67 20 41  ically running A
3b10: 4e 41 4c 59 5a 45 7d 3c 2f 74 63 6c 3e 0a 3c 68  NALYZE}</tcl>.<h
3b20: 32 3e 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  2>Automatically 
3b30: 52 75 6e 6e 69 6e 67 20 41 4e 41 4c 59 5a 45 3c  Running ANALYZE<
3b40: 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 5b 50 52  /h2>..<p>The [PR
3b50: 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20 63  AGMA optimize] c
3b60: 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 61 75 74 6f  ommand will auto
3b70: 6d 61 74 69 63 61 6c 6c 79 20 72 75 6e 20 41 4e  matically run AN
3b80: 41 4c 59 5a 45 20 6f 6e 20 69 6e 64 69 76 69 64  ALYZE on individ
3b90: 75 61 6c 0a 74 61 62 6c 65 73 20 6f 6e 20 61 6e  ual.tables on an
3ba0: 20 61 73 2d 6e 65 65 64 65 64 20 62 61 73 69 73   as-needed basis
3bb0: 2e 20 20 54 68 65 20 72 65 63 6f 6d 6d 65 6e 64  .  The recommend
3bc0: 65 64 20 70 72 61 63 74 69 63 65 20 69 73 20 66  ed practice is f
3bd0: 6f 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  or applications.
3be0: 74 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20 5b 50  to invoke the [P
3bf0: 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 20  RAGMA optimize] 
3c00: 73 74 61 74 65 6d 65 6e 74 20 6a 75 73 74 20 62  statement just b
3c10: 65 66 6f 72 65 20 63 6c 6f 73 69 6e 67 20 65 61  efore closing ea
3c20: 63 68 20 64 61 74 61 62 61 73 65 0a 63 6f 6e 6e  ch database.conn
3c30: 65 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ection.</p>..<p>
3c40: 45 61 63 68 20 53 51 4c 69 74 65 20 5b 64 61 74  Each SQLite [dat
3c50: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
3c60: 5d 20 72 65 63 6f 72 64 73 20 63 61 73 65 73 20  ] records cases 
3c70: 77 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 70  when the query p
3c80: 6c 61 6e 6e 65 72 20 77 6f 75 6c 64 0a 62 65 6e  lanner would.ben
3c90: 65 66 69 74 20 66 72 6f 6d 20 68 61 76 69 6e 67  efit from having
3ca0: 20 61 63 63 75 72 61 74 65 20 72 65 73 75 6c 74   accurate result
3cb0: 73 20 6f 66 20 41 4e 41 4c 59 5a 45 20 61 74 20  s of ANALYZE at 
3cc0: 68 61 6e 64 2e 20 20 54 68 65 73 65 20 72 65 63  hand.  These rec
3cd0: 6f 72 64 73 0a 61 72 65 20 68 65 6c 64 20 69 6e  ords.are held in
3ce0: 20 6d 65 6d 6f 72 79 20 61 6e 64 20 61 63 63 75   memory and accu
3cf0: 6d 75 6c 61 74 65 20 6f 76 65 72 20 74 68 65 20  mulate over the 
3d00: 6c 69 66 65 20 6f 66 20 61 20 64 61 74 61 62 61  life of a databa
3d10: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 54  se connection..T
3d20: 68 65 20 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d  he [PRAGMA optim
3d30: 69 7a 65 5d 20 63 6f 6d 6d 61 6e 64 20 6c 6f 6f  ize] command loo
3d40: 6b 73 20 61 74 20 74 68 6f 73 65 20 72 65 63 6f  ks at those reco
3d50: 72 64 73 20 61 6e 64 20 72 75 6e 73 20 41 4e 41  rds and runs ANA
3d60: 4c 59 5a 45 20 6f 6e 20 6f 6e 6c 79 0a 74 68 6f  LYZE on only.tho
3d70: 73 65 20 74 61 62 6c 65 73 20 66 6f 72 20 77 68  se tables for wh
3d80: 69 63 68 20 6e 65 77 20 6f 72 20 75 70 64 61 74  ich new or updat
3d90: 65 64 20 41 4e 41 4c 59 5a 45 20 64 61 74 61 20  ed ANALYZE data 
3da0: 73 65 65 6d 73 20 6c 69 6b 65 6c 79 20 74 6f 20  seems likely to 
3db0: 62 65 20 75 73 65 66 75 6c 2e 0a 49 6e 20 6d 6f  be useful..In mo
3dc0: 73 74 20 63 61 73 65 73 20 5b 50 52 41 47 4d 41  st cases [PRAGMA
3dd0: 20 6f 70 74 69 6d 69 7a 65 5d 20 77 69 6c 6c 20   optimize] will 
3de0: 6e 6f 74 20 72 75 6e 20 41 4e 41 4c 59 5a 45 2c  not run ANALYZE,
3df0: 20 62 75 74 20 69 74 20 77 69 6c 6c 20 6f 63 63   but it will occ
3e00: 61 73 69 6f 6e 61 6c 6c 79 0a 64 6f 20 73 6f 20  asionally.do so 
3e10: 65 69 74 68 65 72 20 66 6f 72 20 74 61 62 6c 65  either for table
3e20: 73 20 74 68 61 74 20 68 61 76 65 20 6e 65 76 65  s that have neve
3e30: 72 20 62 65 66 6f 72 65 20 62 65 65 6e 20 61 6e  r before been an
3e40: 61 6c 79 7a 65 64 2c 20 6f 72 20 66 6f 72 20 74  alyzed, or for t
3e50: 61 62 6c 65 73 0a 74 68 61 74 20 68 61 76 65 20  ables.that have 
3e60: 67 72 6f 77 6e 20 73 69 67 6e 69 66 69 63 61 6e  grown significan
3e70: 74 6c 79 20 73 69 6e 63 65 20 74 68 65 79 20 77  tly since they w
3e80: 65 72 65 20 6c 61 73 74 20 61 6e 61 6c 79 7a 65  ere last analyze
3e90: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 53 69 6e 63 65  d.</p>..<p>Since
3ea0: 20 74 68 65 20 61 63 74 69 6f 6e 73 20 6f 66 20   the actions of 
3eb0: 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65  [PRAGMA optimize
3ec0: 5d 20 61 72 65 20 64 65 74 65 72 6d 69 6e 65 64  ] are determined
3ed0: 20 74 6f 20 73 6f 6d 65 20 65 78 74 65 6e 74 20   to some extent 
3ee0: 62 79 0a 70 72 69 6f 72 20 71 75 65 72 69 65 73  by.prior queries
3ef0: 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20   that have been 
3f00: 65 76 61 6c 75 61 74 65 64 20 6f 6e 20 74 68 65  evaluated on the
3f10: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 63   same database c
3f20: 6f 6e 6e 65 63 74 69 6f 6e 2c 20 69 74 0a 69 73  onnection, it.is
3f30: 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 74 68 61   recommended tha
3f40: 74 20 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69  t [PRAGMA optimi
3f50: 7a 65 5d 20 62 65 20 64 65 66 65 72 72 65 64 20  ze] be deferred 
3f60: 75 6e 74 69 6c 20 74 68 65 20 64 61 74 61 62 61  until the databa
3f70: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 69 73  se connection.is
3f80: 20 63 6c 6f 73 69 6e 67 20 61 6e 64 20 68 61 73   closing and has
3f90: 20 74 68 75 73 20 68 61 64 20 61 6e 20 6f 70 70   thus had an opp
3fa0: 6f 72 74 75 6e 69 74 79 20 74 6f 20 61 63 63 75  ortunity to accu
3fb0: 6d 75 6c 61 74 65 20 61 73 20 6d 75 73 74 20 75  mulate as must u
3fc0: 73 61 67 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  sage information
3fd0: 0a 61 73 20 70 6f 73 73 69 62 6c 65 2e 20 20 49  .as possible.  I
3fe0: 74 20 69 73 20 61 6c 73 6f 20 72 65 61 73 6f 6e  t is also reason
3ff0: 61 62 6c 65 20 74 6f 20 73 65 74 20 61 20 74 69  able to set a ti
4000: 6d 65 72 20 74 6f 20 72 75 6e 20 5b 50 52 41 47  mer to run [PRAG
4010: 4d 41 20 6f 70 74 69 6d 69 7a 65 5d 0a 65 76 65  MA optimize].eve
4020: 72 79 20 66 65 77 20 68 6f 75 72 73 2c 20 6f 72  ry few hours, or
4030: 20 65 76 65 72 79 20 66 65 77 20 64 61 79 73 2c   every few days,
4040: 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f   for database co
4050: 6e 6e 65 63 74 69 6f 6e 73 20 74 68 61 74 20 73  nnections that s
4060: 74 61 79 20 6f 70 65 6e 0a 66 6f 72 20 61 20 6c  tay open.for a l
4070: 6f 6e 67 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c  ong time.</p>..<
4080: 70 3e 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 74  p>Applications t
4090: 68 61 74 20 64 65 73 69 72 65 20 6d 6f 72 65 20  hat desire more 
40a0: 63 6f 6e 74 72 6f 6c 20 63 61 6e 20 72 75 6e 20  control can run 
40b0: 5b 50 52 41 47 4d 41 20 6f 70 74 69 6d 69 7a 65  [PRAGMA optimize
40c0: 28 30 78 30 33 29 5d 20 74 6f 20 0a 6f 62 74 61  (0x03)] to .obta
40d0: 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 41 4e 41  in a list of ANA
40e0: 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 73 20 74 68  LYZE commands th
40f0: 61 74 20 53 51 4c 69 74 65 20 74 68 69 6e 6b 73  at SQLite thinks
4100: 20 61 72 65 20 61 70 70 72 6f 70 72 69 61 74 65   are appropriate
4110: 20 74 6f 20 72 75 6e 2c 0a 62 75 74 20 77 69 74   to run,.but wit
4120: 68 6f 75 74 20 61 63 74 75 61 6c 6c 79 20 72 75  hout actually ru
4130: 6e 6e 69 6e 67 20 74 68 6f 73 65 20 63 6f 6d 6d  nning those comm
4140: 61 6e 64 73 2e 20 20 49 66 20 74 68 65 20 72 65  ands.  If the re
4150: 74 75 72 6e 65 64 20 73 65 74 20 69 73 20 0a 6e  turned set is .n
4160: 6f 6e 2d 65 6d 70 74 79 2c 20 74 68 65 20 61 70  on-empty, the ap
4170: 70 6c 69 63 61 74 69 6f 6e 20 63 61 6e 20 74 68  plication can th
4180: 65 6e 20 6d 61 6b 65 20 61 20 64 65 63 69 73 69  en make a decisi
4190: 6f 6e 20 61 62 6f 75 74 20 77 68 65 74 68 65 72  on about whether
41a0: 20 6f 72 20 6e 6f 74 0a 74 6f 20 72 75 6e 20 74   or not.to run t
41b0: 68 65 20 73 75 67 67 65 73 74 65 64 20 41 4e 41  he suggested ANA
41c0: 4c 59 5a 45 20 63 6f 6d 6d 61 6e 64 73 2c 20 70  LYZE commands, p
41d0: 65 72 68 61 70 73 20 61 66 74 65 72 20 70 72 6f  erhaps after pro
41e0: 6d 70 74 69 6e 67 20 74 68 65 20 75 73 65 72 0a  mpting the user.
41f0: 66 6f 72 20 67 75 69 64 61 6e 63 65 2e 3c 2f 70  for guidance.</p
4200: 3e 0a 0a 3c 70 3e 54 68 65 20 5b 50 52 41 47 4d  >..<p>The [PRAGM
4210: 41 20 6f 70 74 69 6d 69 7a 65 5d 20 63 6f 6d 6d  A optimize] comm
4220: 61 6e 64 20 77 61 73 20 66 69 72 73 74 20 69 6e  and was first in
4230: 74 72 6f 64 75 63 65 64 20 77 69 74 68 20 0a 53  troduced with .S
4240: 51 4c 69 74 65 20 33 2e 31 38 2e 30 20 28 5b 64  QLite 3.18.0 ([d
4250: 61 74 65 6f 66 3a 33 2e 31 38 2e 30 5d 29 20 61  ateof:3.18.0]) a
4260: 6e 64 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f  nd is a no-op fo
4270: 72 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 6c 65  r all prior rele
4280: 61 73 65 73 0a 6f 66 20 53 51 4c 69 74 65 2e 3c  ases.of SQLite.<
4290: 2f 70 3e 0a 0a 3c 68 32 3e 41 6e 74 69 63 69 70  /p>..<h2>Anticip
42a0: 61 74 65 64 20 46 75 74 75 72 65 20 45 6e 68 61  ated Future Enha
42b0: 6e 63 65 6d 65 6e 74 73 3c 2f 68 32 3e 0a 0a 3c  ncements</h2>..<
42c0: 70 3e 41 6c 6c 20 65 78 69 73 74 69 6e 67 20 76  p>All existing v
42d0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
42e0: 65 20 64 6f 20 61 20 66 75 6c 6c 20 74 61 62 6c  e do a full tabl
42f0: 65 20 73 63 61 6e 20 66 6f 72 20 41 4e 41 4c 59  e scan for ANALY
4300: 5a 45 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ZE.  This can be
4310: 0a 73 6c 6f 77 20 66 6f 72 20 6d 75 6c 74 69 2d  .slow for multi-
4320: 67 69 67 61 62 79 74 65 20 61 6e 64 20 6c 61 72  gigabyte and lar
4330: 67 65 72 20 64 61 74 61 62 61 73 65 73 2e 20 20  ger databases.  
4340: 46 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  Future versions 
4350: 6f 66 20 53 51 4c 69 74 65 20 6d 69 67 68 74 0a  of SQLite might.
4360: 75 73 65 20 72 61 6e 64 6f 6d 20 73 61 6d 70 6c  use random sampl
4370: 69 6e 67 20 72 61 74 68 65 72 20 74 68 61 6e 20  ing rather than 
4380: 61 20 66 75 6c 6c 20 74 61 62 6c 65 20 73 63 61  a full table sca
4390: 6e 20 74 6f 20 6f 62 74 61 69 6e 20 65 73 74 69  n to obtain esti
43a0: 6d 61 74 65 73 20 66 6f 72 20 74 68 65 0a 64 61  mates for the.da
43b0: 74 61 62 61 73 65 20 73 68 61 70 65 2c 20 65 73  tabase shape, es
43c0: 70 65 63 69 61 6c 6c 79 20 6f 6e 20 6c 61 72 67  pecially on larg
43d0: 65 72 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  er tables.  The 
43e0: 72 65 73 75 6c 74 73 20 77 6f 75 6c 64 20 61 70  results would ap
43f0: 70 72 6f 78 69 6d 61 74 65 2c 20 62 75 74 20 0a  proximate, but .
4400: 77 69 6c 6c 20 62 65 20 63 6c 6f 73 65 20 65 6e  will be close en
4410: 6f 75 67 68 20 66 6f 72 20 71 75 65 72 79 20 70  ough for query p
4420: 6c 61 6e 6e 69 6e 67 20 70 75 72 70 6f 73 65 73  lanning purposes
4430: 2e 20 20 41 73 20 6f 66 20 32 30 31 37 2d 30 33  .  As of 2017-03
4440: 2d 32 30 2c 20 74 68 69 73 0a 63 6f 6e 63 65 70  -20, this.concep
4450: 74 20 68 61 73 20 62 65 65 6e 20 74 65 73 74 65  t has been teste
4460: 64 20 69 6e 20 65 78 70 65 72 69 6d 65 6e 74 61  d in experimenta
4470: 6c 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 61  l branches and a
4480: 70 70 65 61 72 73 20 74 6f 20 77 6f 72 6b 20 77  ppears to work w
4490: 65 6c 6c 2c 20 62 75 74 0a 68 61 73 20 6e 6f 74  ell, but.has not
44a0: 20 62 65 65 6e 20 66 6f 6c 64 65 64 20 69 6e 74   been folded int
44b0: 6f 20 61 6e 20 6f 66 66 69 63 69 61 6c 20 72 65  o an official re
44c0: 6c 65 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  lease.</p>..<tcl
44d0: 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
44e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
44f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4520: 0a 53 65 63 74 69 6f 6e 20 7b 41 54 54 41 43 48  .Section {ATTACH
4530: 20 44 41 54 41 42 41 53 45 7d 20 61 74 74 61 63   DATABASE} attac
4540: 68 20 7b 61 74 74 61 63 68 65 64 20 2a 41 54 54  h {attached *ATT
4550: 41 43 48 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  ACH}..RecursiveB
4560: 75 62 62 6c 65 44 69 61 67 72 61 6d 20 61 74 74  ubbleDiagram att
4570: 61 63 68 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  ach-stmt.</tcl>.
4580: 0a 3c 70 3e 20 5e 54 68 65 20 41 54 54 41 43 48  .<p> ^The ATTACH
4590: 20 44 41 54 41 42 41 53 45 20 73 74 61 74 65 6d   DATABASE statem
45a0: 65 6e 74 20 61 64 64 73 20 61 6e 6f 74 68 65 72  ent adds another
45b0: 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20   database .file 
45c0: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 5b  to the current [
45d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
45e0: 69 6f 6e 5d 2e 20 0a 44 61 74 61 62 61 73 65 20  ion]. .Database 
45f0: 66 69 6c 65 73 20 74 68 61 74 20 77 65 72 65 20  files that were 
4600: 70 72 65 76 69 6f 75 73 6c 79 20 61 74 74 61 63  previously attac
4610: 68 65 64 20 63 61 6e 20 62 65 20 72 65 6d 6f 76  hed can be remov
4620: 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b 44 45  ed using.the [DE
4630: 54 41 43 48 20 44 41 54 41 42 41 53 45 5d 20 63  TACH DATABASE] c
4640: 6f 6d 6d 61 6e 64 2e 0a 0a 3c 70 3e 5e 54 68 65  ommand...<p>^The
4650: 20 66 69 6c 65 6e 61 6d 65 20 66 6f 72 20 74 68   filename for th
4660: 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 62 65  e database to be
4670: 20 61 74 74 61 63 68 65 64 20 69 73 20 74 68 65   attached is the
4680: 20 76 61 6c 75 65 20 6f 66 0a 74 68 65 20 65 78   value of.the ex
4690: 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 6f 63  pression that oc
46a0: 63 75 72 73 20 62 65 66 6f 72 65 20 74 68 65 20  curs before the 
46b0: 41 53 20 6b 65 79 77 6f 72 64 2e 0a 5e 54 68 65  AS keyword..^The
46c0: 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65   filename of the
46d0: 20 64 61 74 61 62 61 73 65 20 66 6f 6c 6c 6f 77   database follow
46e0: 73 20 74 68 65 20 73 61 6d 65 20 73 65 6d 61 6e  s the same seman
46f0: 74 69 63 73 20 61 73 20 74 68 65 0a 66 69 6c 65  tics as the.file
4700: 6e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  name argument to
4710: 20 5b 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 29   [sqlite3_open()
4720: 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33 5f 6f  ] and [sqlite3_o
4730: 70 65 6e 5f 76 32 28 29 5d 3b 20 74 68 65 0a 73  pen_v2()]; the.s
4740: 70 65 63 69 61 6c 20 6e 61 6d 65 20 22 5b 3a 6d  pecial name "[:m
4750: 65 6d 6f 72 79 3a 5d 22 20 72 65 73 75 6c 74 73  emory:]" results
4760: 20 69 6e 20 61 6e 20 5b 69 6e 2d 6d 65 6d 6f 72   in an [in-memor
4770: 79 20 64 61 74 61 62 61 73 65 5d 20 61 6e 64 20  y database] and 
4780: 61 6e 0a 65 6d 70 74 79 20 73 74 72 69 6e 67 20  an.empty string 
4790: 72 65 73 75 6c 74 73 20 69 6e 20 61 20 6e 65 77  results in a new
47a0: 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
47b0: 61 73 65 2e 0a 5e 54 68 65 20 66 69 6c 65 6e 61  ase..^The filena
47c0: 6d 65 20 61 72 67 75 6d 65 6e 74 20 63 61 6e 20  me argument can 
47d0: 62 65 20 61 20 5b 55 52 49 20 66 69 6c 65 6e 61  be a [URI filena
47e0: 6d 65 5d 20 69 66 20 55 52 49 20 66 69 6c 65 6e  me] if URI filen
47f0: 61 6d 65 20 70 72 6f 63 65 73 73 69 6e 67 0a 69  ame processing.i
4800: 73 20 65 6e 61 62 6c 65 20 6f 6e 20 74 68 65 20  s enable on the 
4810: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
4820: 69 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c  ion.  The defaul
4830: 74 20 62 65 68 61 76 69 6f 72 20 69 73 20 66 6f  t behavior is fo
4840: 72 0a 55 52 49 20 66 69 6c 65 6e 61 6d 65 73 20  r.URI filenames 
4850: 74 6f 20 62 65 20 64 69 73 61 62 6c 65 64 2c 20  to be disabled, 
4860: 68 6f 77 65 76 65 72 20 74 68 61 74 20 6d 69 67  however that mig
4870: 68 74 20 63 68 61 6e 67 65 20 69 6e 20 61 20 66  ht change in a f
4880: 75 74 75 72 65 20 72 65 6c 65 61 73 65 0a 6f 66  uture release.of
4890: 20 53 51 4c 69 74 65 2c 20 73 6f 20 61 70 70 6c   SQLite, so appl
48a0: 69 63 61 74 69 6f 6e 20 64 65 76 65 6c 6f 70 65  ication develope
48b0: 72 73 20 61 72 65 20 61 64 76 69 73 65 64 20 74  rs are advised t
48c0: 6f 20 70 6c 61 6e 20 61 63 63 6f 72 64 69 6e 67  o plan according
48d0: 6c 79 2e 0a 0a 3c 70 3e 54 68 65 20 6e 61 6d 65  ly...<p>The name
48e0: 20 74 68 61 74 20 6f 63 63 75 72 73 20 61 66 74   that occurs aft
48f0: 65 72 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72  er the AS keywor
4900: 64 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  d is the name of
4910: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 75 73   the database.us
4920: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79  ed internally by
4930: 20 53 51 4c 69 74 65 2e 0a 5e 54 68 65 20 73 63   SQLite..^The sc
4940: 68 65 6d 61 2d 6e 61 6d 65 73 20 27 6d 61 69 6e  hema-names 'main
4950: 27 20 61 6e 64 20 0a 27 74 65 6d 70 27 20 72 65  ' and .'temp' re
4960: 66 65 72 20 74 6f 20 74 68 65 20 6d 61 69 6e 20  fer to the main 
4970: 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 68 65  database and the
4980: 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
4990: 6f 72 20 0a 74 65 6d 70 6f 72 61 72 79 20 74 61  or .temporary ta
49a0: 62 6c 65 73 2e 20 20 5e 54 68 65 20 6d 61 69 6e  bles.  ^The main
49b0: 20 61 6e 64 20 74 65 6d 70 20 64 61 74 61 62 61   and temp databa
49c0: 73 65 73 20 63 61 6e 6e 6f 74 20 62 65 20 61 74  ses cannot be at
49d0: 74 61 63 68 65 64 20 6f 72 0a 64 65 74 61 63 68  tached or.detach
49e0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 28 54  ed.</p>..<p> ^(T
49f0: 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74 61  ables in an atta
4a00: 63 68 65 64 20 64 61 74 61 62 61 73 65 20 63 61  ched database ca
4a10: 6e 20 62 65 20 72 65 66 65 72 72 65 64 20 74 6f  n be referred to
4a20: 20 75 73 69 6e 67 20 74 68 65 20 73 79 6e 74 61   using the synta
4a30: 78 20 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d  x .<i>schema-nam
4a40: 65 2e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e  e.table-name</i>
4a50: 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 6e 61 6d  .)^  ^If the nam
4a60: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  e of the table i
4a70: 73 20 75 6e 69 71 75 65 0a 61 63 72 6f 73 73 20  s unique.across 
4a80: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
4a90: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
4aa0: 61 69 6e 20 61 6e 64 20 74 65 6d 70 20 64 61 74  ain and temp dat
4ab0: 61 62 61 73 65 73 2c 20 74 68 65 6e 20 74 68 65  abases, then the
4ac0: 0a 3c 69 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  .<i>schema-name<
4ad0: 2f 69 3e 20 70 72 65 66 69 78 20 69 73 20 6e 6f  /i> prefix is no
4ae0: 74 20 72 65 71 75 69 72 65 64 2e 20 20 5e 49 66  t required.  ^If
4af0: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 74 61 62   two or more tab
4b00: 6c 65 73 20 69 6e 0a 64 69 66 66 65 72 65 6e 74  les in.different
4b10: 20 64 61 74 61 62 61 73 65 73 20 68 61 76 65 20   databases have 
4b20: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e  the same name an
4b30: 64 20 74 68 65 20 0a 3c 69 3e 73 63 68 65 6d 61  d the .<i>schema
4b40: 2d 6e 61 6d 65 3c 2f 69 3e 20 70 72 65 66 69 78  -name</i> prefix
4b50: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 6f 6e 20   is not used on 
4b60: 61 20 74 61 62 6c 65 20 72 65 66 65 72 65 6e 63  a table referenc
4b70: 65 2c 20 74 68 65 6e 20 74 68 65 0a 74 61 62 6c  e, then the.tabl
4b80: 65 20 63 68 6f 73 65 6e 20 69 73 20 74 68 65 20  e chosen is the 
4b90: 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  one in the datab
4ba0: 61 73 65 20 74 68 61 74 20 77 61 73 20 6c 65 61  ase that was lea
4bb0: 73 74 20 72 65 63 65 6e 74 6c 79 20 61 74 74 61  st recently atta
4bc0: 63 68 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e  ched.</p>..<p>.^
4bd0: 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 69 6e 76  Transactions inv
4be0: 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
4bf0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
4c00: 65 73 20 61 72 65 20 61 74 6f 6d 69 63 2c 0a 61  es are atomic,.a
4c10: 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65  ssuming that the
4c20: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69   main database i
4c30: 73 20 6e 6f 74 20 22 5b 3a 6d 65 6d 6f 72 79 3a  s not "[:memory:
4c40: 5d 22 20 61 6e 64 20 74 68 65 20 0a 5b 6a 6f 75  ]" and the .[jou
4c50: 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69 73 20 6e 6f  rnal_mode] is no
4c60: 74 20 5b 57 41 4c 5d 2e 20 20 5e 28 49 66 20 74  t [WAL].  ^(If t
4c70: 68 65 20 6d 61 69 6e 0a 64 61 74 61 62 61 73 65  he main.database
4c80: 20 69 73 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 6f   is ":memory:" o
4c90: 72 20 69 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c  r if the journal
4ca0: 5f 6d 6f 64 65 20 69 73 20 57 41 4c 2c 20 74 68  _mode is WAL, th
4cb0: 65 6e 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73  en .transactions
4cc0: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20   continue to be 
4cd0: 61 74 6f 6d 69 63 20 77 69 74 68 69 6e 20 65 61  atomic within ea
4ce0: 63 68 20 69 6e 64 69 76 69 64 75 61 6c 0a 64 61  ch individual.da
4cf0: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 42 75 74  tabase file. But
4d00: 20 69 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d   if the host com
4d10: 70 75 74 65 72 20 63 72 61 73 68 65 73 20 69 6e  puter crashes in
4d20: 20 74 68 65 20 6d 69 64 64 6c 65 0a 6f 66 20 61   the middle.of a
4d30: 20 5b 43 4f 4d 4d 49 54 5d 20 77 68 65 72 65 20   [COMMIT] where 
4d40: 74 77 6f 20 6f 72 20 6d 6f 72 65 20 64 61 74 61  two or more data
4d50: 62 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 75  base files are u
4d60: 70 64 61 74 65 64 2c 0a 73 6f 6d 65 20 6f 66 20  pdated,.some of 
4d70: 74 68 6f 73 65 20 66 69 6c 65 73 20 6d 69 67 68  those files migh
4d80: 74 20 67 65 74 20 74 68 65 20 63 68 61 6e 67 65  t get the change
4d90: 73 20 77 68 65 72 65 20 6f 74 68 65 72 73 0a 6d  s where others.m
4da0: 69 67 68 74 20 6e 6f 74 2e 29 5e 0a 3c 2f 70 3e  ight not.)^.</p>
4db0: 0a 0a 3c 70 3e 20 5e 54 68 65 72 65 20 69 73 20  ..<p> ^There is 
4dc0: 61 20 6c 69 6d 69 74 2c 20 73 65 74 20 75 73 69  a limit, set usi
4dd0: 6e 67 20 5b 73 71 6c 69 74 65 33 5f 6c 69 6d 69  ng [sqlite3_limi
4de0: 74 28 29 5d 20 61 6e 64 20 0a 5b 53 51 4c 49 54  t()] and .[SQLIT
4df0: 45 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44  E_LIMIT_ATTACHED
4e00: 5d 2c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  ], to the number
4e10: 20 6f 66 20 64 61 74 61 62 61 73 65 73 20 74 68   of databases th
4e20: 61 74 20 63 61 6e 20 62 65 0a 73 69 6d 75 6c 74  at can be.simult
4e30: 61 6e 65 6f 75 73 6c 79 20 61 74 74 61 63 68 65  aneously attache
4e40: 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 64 61  d to a single da
4e50: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
4e60: 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  n.</p>..<tcl>.##
4e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4ea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
4ec0: 63 74 69 6f 6e 20 7b 42 45 47 49 4e 20 54 52 41  ction {BEGIN TRA
4ed0: 4e 53 41 43 54 49 4f 4e 7d 20 74 72 61 6e 73 61  NSACTION} transa
4ee0: 63 74 69 6f 6e 20 7b 2a 42 45 47 49 4e 20 43 4f  ction {*BEGIN CO
4ef0: 4d 4d 49 54 20 52 4f 4c 4c 42 41 43 4b 7d 0a 0a  MMIT ROLLBACK}..
4f00: 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44  RecursiveBubbleD
4f10: 69 61 67 72 61 6d 20 62 65 67 69 6e 2d 73 74 6d  iagram begin-stm
4f20: 74 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  t.RecursiveBubbl
4f30: 65 44 69 61 67 72 61 6d 20 63 6f 6d 6d 69 74 2d  eDiagram commit-
4f40: 73 74 6d 74 0a 52 65 63 75 72 73 69 76 65 42 75  stmt.RecursiveBu
4f50: 62 62 6c 65 44 69 61 67 72 61 6d 20 72 6f 6c 6c  bbleDiagram roll
4f60: 62 61 63 6b 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e  back-stmt.</tcl>
4f70: 0a 0a 3c 70 3e 0a 5e 4e 6f 20 63 68 61 6e 67 65  ..<p>.^No change
4f80: 73 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  s can be made to
4f90: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 65 78   the database ex
4fa0: 63 65 70 74 20 77 69 74 68 69 6e 20 61 20 74 72  cept within a tr
4fb0: 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 6e 79 20  ansaction..^Any 
4fc0: 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 63 68 61  command that cha
4fd0: 6e 67 65 73 20 74 68 65 20 64 61 74 61 62 61 73  nges the databas
4fe0: 65 20 28 62 61 73 69 63 61 6c 6c 79 2c 20 61 6e  e (basically, an
4ff0: 79 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 0a 6f 74  y SQL command.ot
5000: 68 65 72 20 74 68 61 6e 20 5b 53 45 4c 45 43 54  her than [SELECT
5010: 5d 29 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69  ]) will automati
5020: 63 61 6c 6c 79 20 73 74 61 72 74 20 61 20 74 72  cally start a tr
5030: 61 6e 73 61 63 74 69 6f 6e 20 69 66 0a 6f 6e 65  ansaction if.one
5040: 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20   is not already 
5050: 69 6e 20 65 66 66 65 63 74 2e 20 20 5e 41 75 74  in effect.  ^Aut
5060: 6f 6d 61 74 69 63 61 6c 6c 79 20 73 74 61 72 74  omatically start
5070: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a  ed transactions.
5080: 61 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 77 68  are committed wh
5090: 65 6e 20 74 68 65 20 6c 61 73 74 20 71 75 65 72  en the last quer
50a0: 79 20 66 69 6e 69 73 68 65 73 2e 0a 3c 2f 70 3e  y finishes..</p>
50b0: 0a 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69  ..<p>.^Transacti
50c0: 6f 6e 73 20 63 61 6e 20 62 65 20 73 74 61 72 74  ons can be start
50d0: 65 64 20 6d 61 6e 75 61 6c 6c 79 20 75 73 69 6e  ed manually usin
50e0: 67 20 74 68 65 20 42 45 47 49 4e 0a 63 6f 6d 6d  g the BEGIN.comm
50f0: 61 6e 64 2e 20 20 5e 28 53 75 63 68 20 74 72 61  and.  ^(Such tra
5100: 6e 73 61 63 74 69 6f 6e 73 20 75 73 75 61 6c 6c  nsactions usuall
5110: 79 20 70 65 72 73 69 73 74 20 75 6e 74 69 6c 20  y persist until 
5120: 74 68 65 20 6e 65 78 74 0a 43 4f 4d 4d 49 54 20  the next.COMMIT 
5130: 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d  or ROLLBACK comm
5140: 61 6e 64 2e 20 20 42 75 74 20 61 20 74 72 61 6e  and.  But a tran
5150: 73 61 63 74 69 6f 6e 20 77 69 6c 6c 20 61 6c 73  saction will als
5160: 6f 20 0a 52 4f 4c 4c 42 41 43 4b 20 69 66 20 74  o .ROLLBACK if t
5170: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 63  he database is c
5180: 6c 6f 73 65 64 20 6f 72 20 69 66 20 61 6e 20 65  losed or if an e
5190: 72 72 6f 72 20 6f 63 63 75 72 73 0a 61 6e 64 20  rror occurs.and 
51a0: 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6e  the ROLLBACK con
51b0: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
51c0: 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 73 70   algorithm is sp
51d0: 65 63 69 66 69 65 64 2e 29 5e 0a 53 65 65 20 74  ecified.)^.See t
51e0: 68 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  he documentation
51f0: 20 6f 6e 20 74 68 65 20 5b 4f 4e 20 43 4f 4e 46   on the [ON CONF
5200: 4c 49 43 54 5d 0a 63 6c 61 75 73 65 20 66 6f 72  LICT].clause for
5210: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
5220: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
5230: 65 20 52 4f 4c 4c 42 41 43 4b 0a 63 6f 6e 66 6c  e ROLLBACK.confl
5240: 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ict resolution a
5250: 6c 67 6f 72 69 74 68 6d 2e 0a 3c 2f 70 3e 0a 0a  lgorithm..</p>..
5260: 3c 70 3e 0a 5e 45 4e 44 20 54 52 41 4e 53 41 43  <p>.^END TRANSAC
5270: 54 49 4f 4e 20 69 73 20 61 6e 20 61 6c 69 61 73  TION is an alias
5280: 20 66 6f 72 20 43 4f 4d 4d 49 54 2e 0a 3c 2f 70   for COMMIT..</p
5290: 3e 0a 0a 3c 70 3e 20 5e 28 54 72 61 6e 73 61 63  >..<p> ^(Transac
52a0: 74 69 6f 6e 73 20 63 72 65 61 74 65 64 20 75 73  tions created us
52b0: 69 6e 67 20 42 45 47 49 4e 2e 2e 2e 43 4f 4d 4d  ing BEGIN...COMM
52c0: 49 54 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2e 29  IT do not nest.)
52d0: 5e 0a 5e 46 6f 72 20 6e 65 73 74 65 64 20 74 72  ^.^For nested tr
52e0: 61 6e 73 61 63 74 69 6f 6e 73 2c 20 75 73 65 20  ansactions, use 
52f0: 74 68 65 20 5b 53 41 56 45 50 4f 49 4e 54 5d 20  the [SAVEPOINT] 
5300: 61 6e 64 20 5b 52 45 4c 45 41 53 45 5d 20 63 6f  and [RELEASE] co
5310: 6d 6d 61 6e 64 73 2e 0a 54 68 65 20 22 54 4f 20  mmands..The "TO 
5320: 53 41 56 45 50 4f 49 4e 54 20 3c 79 79 74 65 72  SAVEPOINT <yyter
5330: 6d 3e 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 22  m>name</yyterm>"
5340: 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 52   clause of the R
5350: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
5360: 73 68 6f 77 6e 0a 69 6e 20 74 68 65 20 73 79 6e  shown.in the syn
5370: 74 61 78 20 64 69 61 67 72 61 6d 20 61 62 6f 76  tax diagram abov
5380: 65 20 69 73 20 6f 6e 6c 79 20 61 70 70 6c 69 63  e is only applic
5390: 61 62 6c 65 20 74 6f 20 5b 53 41 56 45 50 4f 49  able to [SAVEPOI
53a0: 4e 54 5d 0a 74 72 61 6e 73 61 63 74 69 6f 6e 73  NT].transactions
53b0: 2e 20 20 5e 41 6e 20 61 74 74 65 6d 70 74 20 74  .  ^An attempt t
53c0: 6f 20 69 6e 76 6f 6b 65 20 74 68 65 20 42 45 47  o invoke the BEG
53d0: 49 4e 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69  IN command withi
53e0: 6e 0a 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n.a transaction 
53f0: 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61  will fail with a
5400: 6e 20 65 72 72 6f 72 2c 20 72 65 67 61 72 64 6c  n error, regardl
5410: 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 0a 74  ess of whether.t
5420: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77  he transaction w
5430: 61 73 20 73 74 61 72 74 65 64 20 62 79 20 5b 53  as started by [S
5440: 41 56 45 50 4f 49 4e 54 5d 20 6f 72 20 61 20 70  AVEPOINT] or a p
5450: 72 69 6f 72 20 42 45 47 49 4e 2e 0a 5e 54 68 65  rior BEGIN..^The
5460: 20 43 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 20   COMMIT command 
5470: 61 6e 64 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  and the ROLLBACK
5480: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74   command without
5490: 20 74 68 65 20 54 4f 20 63 6c 61 75 73 65 0a 77   the TO clause.w
54a0: 6f 72 6b 20 74 68 65 20 73 61 6d 65 20 6f 6e 20  ork the same on 
54b0: 5b 53 41 56 45 50 4f 49 4e 54 5d 20 74 72 61 6e  [SAVEPOINT] tran
54c0: 73 61 63 74 69 6f 6e 73 20 61 73 20 74 68 65 79  sactions as they
54d0: 20 64 6f 20 77 69 74 68 20 74 72 61 6e 73 61 63   do with transac
54e0: 74 69 6f 6e 73 0a 73 74 61 72 74 65 64 20 62 79  tions.started by
54f0: 20 42 45 47 49 4e 2e 3c 2f 70 3e 0a 0a 3c 74 63   BEGIN.</p>..<tc
5500: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6d  l>hd_fragment im
5510: 6d 65 64 69 61 74 65 20 7b 42 45 47 49 4e 20 49  mediate {BEGIN I
5520: 4d 4d 45 44 49 41 54 45 7d 20 7b 42 45 47 49 4e  MMEDIATE} {BEGIN
5530: 20 45 58 43 4c 55 53 49 56 45 7d 3c 2f 74 63 6c   EXCLUSIVE}</tcl
5540: 3e 0a 3c 70 3e 0a 5e 54 72 61 6e 73 61 63 74 69  >.<p>.^Transacti
5550: 6f 6e 73 20 63 61 6e 20 62 65 20 64 65 66 65 72  ons can be defer
5560: 72 65 64 2c 20 69 6d 6d 65 64 69 61 74 65 2c 20  red, immediate, 
5570: 6f 72 20 65 78 63 6c 75 73 69 76 65 2e 20 20 0a  or exclusive.  .
5580: 5e 54 68 65 20 64 65 66 61 75 6c 74 20 74 72 61  ^The default tra
5590: 6e 73 61 63 74 69 6f 6e 20 62 65 68 61 76 69 6f  nsaction behavio
55a0: 72 20 69 73 20 64 65 66 65 72 72 65 64 2e 0a 5e  r is deferred..^
55b0: 44 65 66 65 72 72 65 64 20 6d 65 61 6e 73 20 74  Deferred means t
55c0: 68 61 74 20 6e 6f 20 6c 6f 63 6b 73 20 61 72 65  hat no locks are
55d0: 20 61 63 71 75 69 72 65 64 0a 6f 6e 20 74 68 65   acquired.on the
55e0: 20 64 61 74 61 62 61 73 65 20 75 6e 74 69 6c 20   database until 
55f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
5600: 66 69 72 73 74 20 61 63 63 65 73 73 65 64 2e 20  first accessed. 
5610: 20 5e 54 68 75 73 20 77 69 74 68 20 61 0a 64 65   ^Thus with a.de
5620: 66 65 72 72 65 64 20 74 72 61 6e 73 61 63 74 69  ferred transacti
5630: 6f 6e 2c 20 74 68 65 20 42 45 47 49 4e 20 73 74  on, the BEGIN st
5640: 61 74 65 6d 65 6e 74 20 69 74 73 65 6c 66 20 64  atement itself d
5650: 6f 65 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74  oes nothing to t
5660: 68 65 0a 66 69 6c 65 73 79 73 74 65 6d 2e 20 20  he.filesystem.  
5670: 5e 4c 6f 63 6b 73 0a 61 72 65 20 6e 6f 74 20 61  ^Locks.are not a
5680: 63 71 75 69 72 65 64 20 75 6e 74 69 6c 20 74 68  cquired until th
5690: 65 20 66 69 72 73 74 20 72 65 61 64 20 6f 72 20  e first read or 
56a0: 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e 2e  write operation.
56b0: 20 20 5e 54 68 65 20 66 69 72 73 74 20 72 65 61    ^The first rea
56c0: 64 0a 6f 70 65 72 61 74 69 6f 6e 20 61 67 61 69  d.operation agai
56d0: 6e 73 74 20 61 20 64 61 74 61 62 61 73 65 20 63  nst a database c
56e0: 72 65 61 74 65 73 20 61 20 5b 53 48 41 52 45 44  reates a [SHARED
56f0: 5d 20 6c 6f 63 6b 20 61 6e 64 20 74 68 65 20 66  ] lock and the f
5700: 69 72 73 74 0a 77 72 69 74 65 20 6f 70 65 72 61  irst.write opera
5710: 74 69 6f 6e 20 63 72 65 61 74 65 73 20 61 20 5b  tion creates a [
5720: 52 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 2e 20  RESERVED] lock. 
5730: 20 20 5e 42 65 63 61 75 73 65 20 74 68 65 20 61    ^Because the a
5740: 63 71 75 69 73 69 74 69 6f 6e 20 6f 66 0a 6c 6f  cquisition of.lo
5750: 63 6b 73 20 69 73 20 64 65 66 65 72 72 65 64 20  cks is deferred 
5760: 75 6e 74 69 6c 20 74 68 65 79 20 61 72 65 20 6e  until they are n
5770: 65 65 64 65 64 2c 20 69 74 20 69 73 20 70 6f 73  eeded, it is pos
5780: 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68  sible that anoth
5790: 65 72 0a 74 68 72 65 61 64 20 6f 72 20 70 72 6f  er.thread or pro
57a0: 63 65 73 73 20 63 6f 75 6c 64 20 63 72 65 61 74  cess could creat
57b0: 65 20 61 20 73 65 70 61 72 61 74 65 20 74 72 61  e a separate tra
57c0: 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 72 69  nsaction and wri
57d0: 74 65 20 74 6f 0a 74 68 65 20 64 61 74 61 62 61  te to.the databa
57e0: 73 65 20 61 66 74 65 72 20 74 68 65 20 42 45 47  se after the BEG
57f0: 49 4e 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e  IN on the curren
5800: 74 20 74 68 72 65 61 64 20 68 61 73 20 65 78 65  t thread has exe
5810: 63 75 74 65 64 2e 0a 5e 49 66 20 74 68 65 20 74  cuted..^If the t
5820: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 69 6d  ransaction is im
5830: 6d 65 64 69 61 74 65 2c 20 74 68 65 6e 20 5b 52  mediate, then [R
5840: 45 53 45 52 56 45 44 5d 20 6c 6f 63 6b 73 0a 61  ESERVED] locks.a
5850: 72 65 20 61 63 71 75 69 72 65 64 20 6f 6e 20 61  re acquired on a
5860: 6c 6c 20 64 61 74 61 62 61 73 65 73 20 61 73 20  ll databases as 
5870: 73 6f 6f 6e 20 61 73 20 74 68 65 20 42 45 47 49  soon as the BEGI
5880: 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 0a 65 78 65  N command is.exe
5890: 63 75 74 65 64 2c 20 77 69 74 68 6f 75 74 20 77  cuted, without w
58a0: 61 69 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 64  aiting for the.d
58b0: 61 74 61 62 61 73 65 20 74 6f 20 62 65 20 75 73  atabase to be us
58c0: 65 64 2e 20 20 5e 41 66 74 65 72 20 61 20 42 45  ed.  ^After a BE
58d0: 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 2c 20 0a  GIN IMMEDIATE, .
58e0: 6e 6f 20 6f 74 68 65 72 20 5b 64 61 74 61 62 61  no other [databa
58f0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 77  se connection] w
5900: 69 6c 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 77  ill be able to w
5910: 72 69 74 65 20 74 6f 20 74 68 65 20 64 61 74 61  rite to the data
5920: 62 61 73 65 20 6f 72 0a 64 6f 20 61 20 42 45 47  base or.do a BEG
5930: 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 6f 72 20  IN IMMEDIATE or 
5940: 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 2e  BEGIN EXCLUSIVE.
5950: 20 20 5e 4f 74 68 65 72 20 70 72 6f 63 65 73 73    ^Other process
5960: 65 73 20 63 61 6e 20 63 6f 6e 74 69 6e 75 65 0a  es can continue.
5970: 74 6f 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65  to read from the
5980: 20 64 61 74 61 62 61 73 65 2c 20 68 6f 77 65 76   database, howev
5990: 65 72 2e 20 20 5e 41 6e 20 65 78 63 6c 75 73 69  er.  ^An exclusi
59a0: 76 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  ve transaction c
59b0: 61 75 73 65 73 0a 5b 45 58 43 4c 55 53 49 56 45  auses.[EXCLUSIVE
59c0: 5d 20 6c 6f 63 6b 73 20 74 6f 20 62 65 20 61 63  ] locks to be ac
59d0: 71 75 69 72 65 64 20 6f 6e 20 61 6c 6c 20 64 61  quired on all da
59e0: 74 61 62 61 73 65 73 2e 20 20 5e 41 66 74 65 72  tabases.  ^After
59f0: 20 61 20 42 45 47 49 4e 0a 45 58 43 4c 55 53 49   a BEGIN.EXCLUSI
5a00: 56 45 2c 20 6e 6f 20 6f 74 68 65 72 20 5b 64 61  VE, no other [da
5a10: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5a20: 6e 5d 20 65 78 63 65 70 74 20 66 6f 72 20 5b 72  n] except for [r
5a30: 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 5d  ead_uncommitted]
5a40: 0a 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 77 69 6c  .connections wil
5a50: 6c 20 62 65 20 61 62 6c 65 20 74 6f 20 72 65 61  l be able to rea
5a60: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  d the database a
5a70: 6e 64 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e  nd no other conn
5a80: 65 63 74 69 6f 6e 20 77 69 74 68 6f 75 74 0a 65  ection without.e
5a90: 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65  xception will be
5aa0: 20 61 62 6c 65 20 74 6f 20 77 72 69 74 65 20 74   able to write t
5ab0: 68 65 20 64 61 74 61 62 61 73 65 20 75 6e 74 69  he database unti
5ac0: 6c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  l the transactio
5ad0: 6e 20 69 73 0a 63 6f 6d 70 6c 65 74 65 2e 0a 3c  n is.complete..<
5ae0: 2f 70 3e 0a 0a 3c 70 3e 0a 5e 28 41 6e 20 69 6d  /p>..<p>.^(An im
5af0: 70 6c 69 63 69 74 20 74 72 61 6e 73 61 63 74 69  plicit transacti
5b00: 6f 6e 20 28 61 20 74 72 61 6e 73 61 63 74 69 6f  on (a transactio
5b10: 6e 20 74 68 61 74 20 69 73 20 73 74 61 72 74 65  n that is starte
5b20: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c  d automatically,
5b30: 0a 6e 6f 74 20 61 20 74 72 61 6e 73 61 63 74 69  .not a transacti
5b40: 6f 6e 20 73 74 61 72 74 65 64 20 62 79 20 42 45  on started by BE
5b50: 47 49 4e 29 20 69 73 20 63 6f 6d 6d 69 74 74 65  GIN) is committe
5b60: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  d automatically 
5b70: 77 68 65 6e 0a 74 68 65 20 6c 61 73 74 20 61 63  when.the last ac
5b80: 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 20 66  tive statement f
5b90: 69 6e 69 73 68 65 73 2e 20 20 41 20 73 74 61 74  inishes.  A stat
5ba0: 65 6d 65 6e 74 20 66 69 6e 69 73 68 65 73 20 77  ement finishes w
5bb0: 68 65 6e 20 69 74 73 0a 70 72 65 70 61 72 65 64  hen its.prepared
5bc0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 5b 73   statement is [s
5bd0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 20 7c  qlite3_reset() |
5be0: 20 72 65 73 65 74 5d 20 6f 72 0a 5b 73 71 6c 69   reset] or.[sqli
5bf0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 20 7c  te3_finalize() |
5c00: 20 66 69 6e 61 6c 69 7a 65 64 5d 2e 20 20 41 6e   finalized].  An
5c10: 20 6f 70 65 6e 20 5b 73 71 6c 69 74 65 33 5f 62   open [sqlite3_b
5c20: 6c 6f 62 5d 20 75 73 65 64 20 66 6f 72 0a 69 6e  lob] used for.in
5c30: 63 72 65 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49  cremental BLOB I
5c40: 2f 4f 20 63 6f 75 6e 74 73 20 61 73 20 61 6e 20  /O counts as an 
5c50: 75 6e 66 69 6e 69 73 68 65 64 20 73 74 61 74 65  unfinished state
5c60: 6d 65 6e 74 2e 20 20 54 68 65 20 5b 73 71 6c 69  ment.  The [sqli
5c70: 74 65 33 5f 62 6c 6f 62 5d 0a 66 69 6e 69 73 68  te3_blob].finish
5c80: 65 73 20 77 68 65 6e 20 69 74 20 69 73 20 5b 73  es when it is [s
5c90: 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 63 6c 6f 73  qlite3_blob_clos
5ca0: 65 28 29 20 7c 20 63 6c 6f 73 65 64 5d 2e 29 5e  e() | closed].)^
5cb0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20  .</p>..<p>.^The 
5cc0: 65 78 70 6c 69 63 69 74 20 43 4f 4d 4d 49 54 20  explicit COMMIT 
5cd0: 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 69 6d 6d  command runs imm
5ce0: 65 64 69 61 74 65 6c 79 2c 20 65 76 65 6e 20 69  ediately, even i
5cf0: 66 20 74 68 65 72 65 20 61 72 65 0a 70 65 6e 64  f there are.pend
5d00: 69 6e 67 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  ing [SELECT] sta
5d10: 74 65 6d 65 6e 74 73 2e 20 20 5e 48 6f 77 65 76  tements.  ^Howev
5d20: 65 72 2c 20 69 66 20 74 68 65 72 65 20 61 72 65  er, if there are
5d30: 20 70 65 6e 64 69 6e 67 0a 77 72 69 74 65 20 6f   pending.write o
5d40: 70 65 72 61 74 69 6f 6e 73 2c 20 74 68 65 20 43  perations, the C
5d50: 4f 4d 4d 49 54 20 63 6f 6d 6d 61 6e 64 0a 77 69  OMMIT command.wi
5d60: 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20  ll fail with an 
5d70: 65 72 72 6f 72 20 63 6f 64 65 20 5b 53 51 4c 49  error code [SQLI
5d80: 54 45 5f 42 55 53 59 5d 2e 0a 3c 2f 70 3e 0a 0a  TE_BUSY]..</p>..
5d90: 3c 70 3e 0a 5e 41 6e 20 61 74 74 65 6d 70 74 20  <p>.^An attempt 
5da0: 74 6f 20 65 78 65 63 75 74 65 20 43 4f 4d 4d 49  to execute COMMI
5db0: 54 20 6d 69 67 68 74 20 61 6c 73 6f 20 72 65 73  T might also res
5dc0: 75 6c 74 20 69 6e 20 61 6e 20 5b 53 51 4c 49 54  ult in an [SQLIT
5dd0: 45 5f 42 55 53 59 5d 20 72 65 74 75 72 6e 20 63  E_BUSY] return c
5de0: 6f 64 65 0a 69 66 20 61 6e 20 61 6e 6f 74 68 65  ode.if an anothe
5df0: 72 20 74 68 72 65 61 64 20 6f 72 20 70 72 6f 63  r thread or proc
5e00: 65 73 73 20 68 61 73 20 61 20 5b 73 68 61 72 65  ess has a [share
5e10: 64 20 6c 6f 63 6b 5d 20 6f 6e 20 74 68 65 20 64  d lock] on the d
5e20: 61 74 61 62 61 73 65 0a 74 68 61 74 20 70 72 65  atabase.that pre
5e30: 76 65 6e 74 65 64 20 74 68 65 20 64 61 74 61 62  vented the datab
5e40: 61 73 65 20 66 72 6f 6d 20 62 65 69 6e 67 20 75  ase from being u
5e50: 70 64 61 74 65 64 2e 20 20 5e 57 68 65 6e 20 43  pdated.  ^When C
5e60: 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 6e 20 74  OMMIT fails in t
5e70: 68 69 73 0a 77 61 79 2c 20 74 68 65 20 74 72 61  his.way, the tra
5e80: 6e 73 61 63 74 69 6f 6e 20 72 65 6d 61 69 6e 73  nsaction remains
5e90: 20 61 63 74 69 76 65 20 61 6e 64 20 74 68 65 20   active and the 
5ea0: 43 4f 4d 4d 49 54 20 63 61 6e 20 62 65 20 72 65  COMMIT can be re
5eb0: 74 72 69 65 64 20 6c 61 74 65 72 0a 61 66 74 65  tried later.afte
5ec0: 72 20 74 68 65 20 72 65 61 64 65 72 20 68 61 73  r the reader has
5ed0: 20 68 61 64 20 61 20 63 68 61 6e 63 65 20 74 6f   had a chance to
5ee0: 20 63 6c 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 70   clear..</p>..<p
5ef0: 3e 0a 49 6e 20 76 65 72 79 20 6f 6c 64 20 76 65  >.In very old ve
5f00: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
5f10: 20 28 62 65 66 6f 72 65 20 76 65 72 73 69 6f 6e   (before version
5f20: 20 33 2e 37 2e 31 31 20 2d 20 5b 64 61 74 65 6f   3.7.11 - [dateo
5f30: 66 3a 33 2e 37 2e 31 31 5d 29 0a 74 68 65 20 52  f:3.7.11]).the R
5f40: 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 66 61 69  OLLBACK will fai
5f50: 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20  l with an error 
5f60: 63 6f 64 65 20 0a 5b 53 51 4c 49 54 45 5f 42 55  code .[SQLITE_BU
5f70: 53 59 5d 20 69 66 20 74 68 65 72 65 20 61 72 65  SY] if there are
5f80: 20 61 6e 79 20 70 65 6e 64 69 6e 67 20 71 75 65   any pending que
5f90: 72 69 65 73 2e 20 20 5e 49 6e 20 6d 6f 72 65 20  ries.  ^In more 
5fa0: 72 65 63 65 6e 74 0a 76 65 72 73 69 6f 6e 73 20  recent.versions 
5fb0: 6f 66 20 53 51 4c 69 74 65 2c 20 74 68 65 20 52  of SQLite, the R
5fc0: 4f 4c 4c 42 41 43 4b 20 77 69 6c 6c 20 70 72 6f  OLLBACK will pro
5fd0: 63 65 65 64 20 61 6e 64 20 70 65 6e 64 69 6e 67  ceed and pending
5fe0: 20 73 74 61 74 65 6d 65 6e 74 73 0a 77 69 6c 6c   statements.will
5ff0: 20 6f 66 74 65 6e 20 62 65 20 61 62 6f 72 74 65   often be aborte
6000: 64 2c 20 63 61 75 73 69 6e 67 20 74 68 65 6d 20  d, causing them 
6010: 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 5b 53 51  to return an [SQ
6020: 4c 49 54 45 5f 41 42 4f 52 54 5d 20 6f 72 0a 5b  LITE_ABORT] or.[
6030: 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c  SQLITE_ABORT_ROL
6040: 4c 42 41 43 4b 5d 20 65 72 72 6f 72 2e 0a 5e 49  LBACK] error..^I
6050: 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  n SQLite version
6060: 20 33 2e 38 2e 38 20 28 5b 64 61 74 65 6f 66 3a   3.8.8 ([dateof:
6070: 33 2e 38 2e 38 5d 29 20 61 6e 64 20 6c 61 74 65  3.8.8]) and late
6080: 72 2c 0a 61 20 70 65 6e 64 69 6e 67 20 72 65 61  r,.a pending rea
6090: 64 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20  d will continue 
60a0: 66 75 6e 63 74 69 6f 6e 69 6e 67 0a 61 66 74 65  functioning.afte
60b0: 72 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 61  r the ROLLBACK a
60c0: 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20 52 4f  s long as the RO
60d0: 4c 4c 42 41 43 4b 20 64 6f 65 73 20 6e 6f 74 20  LLBACK does not 
60e0: 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61 62  modify the datab
60f0: 61 73 65 0a 73 63 68 65 6d 61 2e 0a 3c 2f 70 3e  ase.schema..</p>
6100: 0a 0a 3c 70 3e 0a 49 66 20 5b 50 52 41 47 4d 41  ..<p>.If [PRAGMA
6110: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 5d 20 69   journal_mode] i
6120: 73 20 73 65 74 20 74 6f 20 4f 46 46 20 28 74 68  s set to OFF (th
6130: 75 73 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65  us disabling the
6140: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
6150: 6c 0a 66 69 6c 65 29 20 74 68 65 6e 20 74 68 65  l.file) then the
6160: 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65   behavior of the
6170: 20 52 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e   ROLLBACK comman
6180: 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  d is undefined..
6190: 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 70 6f 6e  </p>..<h3>Respon
61a0: 73 65 20 54 6f 20 45 72 72 6f 72 73 20 57 69 74  se To Errors Wit
61b0: 68 69 6e 20 41 20 54 72 61 6e 73 61 63 74 69 6f  hin A Transactio
61c0: 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 28 49 66  n</h3>..<p> ^(If
61d0: 20 63 65 72 74 61 69 6e 20 6b 69 6e 64 73 20 6f   certain kinds o
61e0: 66 20 65 72 72 6f 72 73 20 6f 63 63 75 72 20 77  f errors occur w
61f0: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
6200: 69 6f 6e 2c 20 74 68 65 0a 74 72 61 6e 73 61 63  ion, the.transac
6210: 74 69 6f 6e 20 6d 61 79 20 6f 72 20 6d 61 79 20  tion may or may 
6220: 6e 6f 74 20 62 65 20 72 6f 6c 6c 65 64 20 62 61  not be rolled ba
6230: 63 6b 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ck automatically
6240: 2e 20 20 54 68 65 0a 65 72 72 6f 72 73 20 74 68  .  The.errors th
6250: 61 74 20 63 61 6e 20 63 61 75 73 65 20 61 6e 20  at can cause an 
6260: 61 75 74 6f 6d 61 74 69 63 20 72 6f 6c 6c 62 61  automatic rollba
6270: 63 6b 20 69 6e 63 6c 75 64 65 3a 3c 2f 70 3e 0a  ck include:</p>.
6280: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 53 51 4c 49  .<ul>.<li> [SQLI
6290: 54 45 5f 46 55 4c 4c 5d 3a 20 64 61 74 61 62 61  TE_FULL]: databa
62a0: 73 65 20 6f 72 20 64 69 73 6b 20 66 75 6c 6c 0a  se or disk full.
62b0: 3c 6c 69 3e 20 5b 53 51 4c 49 54 45 5f 49 4f 45  <li> [SQLITE_IOE
62c0: 52 52 5d 3a 20 64 69 73 6b 20 49 2f 4f 20 65 72  RR]: disk I/O er
62d0: 72 6f 72 0a 3c 6c 69 3e 20 5b 53 51 4c 49 54 45  ror.<li> [SQLITE
62e0: 5f 42 55 53 59 5d 3a 20 64 61 74 61 62 61 73 65  _BUSY]: database
62f0: 20 69 6e 20 75 73 65 20 62 79 20 61 6e 6f 74 68   in use by anoth
6300: 65 72 20 70 72 6f 63 65 73 73 0a 3c 6c 69 3e 20  er process.<li> 
6310: 5b 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5d 3a 20  [SQLITE_NOMEM]: 
6320: 6f 75 74 20 6f 72 20 6d 65 6d 6f 72 79 0a 3c 2f  out or memory.</
6330: 75 6c 3e 29 5e 0a 0a 3c 70 3e 0a 5e 46 6f 72 20  ul>)^..<p>.^For 
6340: 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 65 72 72  all of these err
6350: 6f 72 73 2c 20 53 51 4c 69 74 65 20 61 74 74 65  ors, SQLite atte
6360: 6d 70 74 73 20 74 6f 20 75 6e 64 6f 20 6a 75 73  mpts to undo jus
6370: 74 20 74 68 65 20 6f 6e 65 20 73 74 61 74 65 6d  t the one statem
6380: 65 6e 74 0a 69 74 20 77 61 73 20 77 6f 72 6b 69  ent.it was worki
6390: 6e 67 20 6f 6e 20 61 6e 64 20 6c 65 61 76 65 20  ng on and leave 
63a0: 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 70 72 69  changes from pri
63b0: 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  or statements wi
63c0: 74 68 69 6e 20 74 68 65 0a 73 61 6d 65 20 74 72  thin the.same tr
63d0: 61 6e 73 61 63 74 69 6f 6e 20 69 6e 74 61 63 74  ansaction intact
63e0: 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 77 69   and continue wi
63f0: 74 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  th the transacti
6400: 6f 6e 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 0a  on.  ^However, .
6410: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
6420: 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
6430: 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74   evaluated and t
6440: 68 65 20 70 6f 69 6e 74 20 61 74 20 77 68 69 63  he point at whic
6450: 68 20 74 68 65 0a 65 72 72 6f 72 20 6f 63 63 75  h the.error occu
6460: 72 73 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  rs, it might be 
6470: 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 53 51  necessary for SQ
6480: 4c 69 74 65 20 74 6f 20 72 6f 6c 6c 62 61 63 6b  Lite to rollback
6490: 20 61 6e 64 0a 63 61 6e 63 65 6c 20 74 68 65 20   and.cancel the 
64a0: 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69  entire transacti
64b0: 6f 6e 2e 20 20 5e 41 6e 20 61 70 70 6c 69 63 61  on.  ^An applica
64c0: 74 69 6f 6e 20 63 61 6e 20 74 65 6c 6c 20 77 68  tion can tell wh
64d0: 69 63 68 0a 63 6f 75 72 73 65 20 6f 66 20 61 63  ich.course of ac
64e0: 74 69 6f 6e 20 53 51 4c 69 74 65 20 74 6f 6f 6b  tion SQLite took
64f0: 20 62 79 20 75 73 69 6e 67 20 74 68 65 0a 5b 73   by using the.[s
6500: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
6510: 6f 6d 6d 69 74 28 29 5d 20 43 2d 6c 61 6e 67 75  ommit()] C-langu
6520: 61 67 65 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  age interface.</
6530: 70 3e 0a 0a 3c 70 3e 49 74 20 69 73 20 72 65 63  p>..<p>It is rec
6540: 6f 6d 6d 65 6e 64 65 64 20 74 68 61 74 20 61 70  ommended that ap
6550: 70 6c 69 63 61 74 69 6f 6e 73 20 72 65 73 70 6f  plications respo
6560: 6e 64 20 74 6f 20 74 68 65 20 65 72 72 6f 72 73  nd to the errors
6570: 0a 6c 69 73 74 65 64 20 61 62 6f 76 65 20 62 79  .listed above by
6580: 20 65 78 70 6c 69 63 69 74 6c 79 20 69 73 73 75   explicitly issu
6590: 69 6e 67 20 61 20 52 4f 4c 4c 42 41 43 4b 20 63  ing a ROLLBACK c
65a0: 6f 6d 6d 61 6e 64 2e 20 20 5e 49 66 20 74 68 65  ommand.  ^If the
65b0: 20 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 68 61   .transaction ha
65c0: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 72  s already been r
65d0: 6f 6c 6c 65 64 20 62 61 63 6b 20 61 75 74 6f 6d  olled back autom
65e0: 61 74 69 63 61 6c 6c 79 0a 62 79 20 74 68 65 20  atically.by the 
65f0: 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65 2c 20  error response, 
6600: 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42 41 43  then the ROLLBAC
6610: 4b 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 66  K command will f
6620: 61 69 6c 20 77 69 74 68 20 61 6e 0a 65 72 72 6f  ail with an.erro
6630: 72 2c 20 62 75 74 20 6e 6f 20 68 61 72 6d 20 69  r, but no harm i
6640: 73 20 63 61 75 73 65 64 20 62 79 20 74 68 69 73  s caused by this
6650: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 75 74 75 72 65  .</p>..<p>Future
6660: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
6670: 69 74 65 20 6d 61 79 20 65 78 74 65 6e 64 20 74  ite may extend t
6680: 68 65 20 6c 69 73 74 20 6f 66 20 65 72 72 6f 72  he list of error
6690: 73 20 77 68 69 63 68 0a 6d 69 67 68 74 20 63 61  s which.might ca
66a0: 75 73 65 20 61 75 74 6f 6d 61 74 69 63 20 74 72  use automatic tr
66b0: 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61  ansaction rollba
66c0: 63 6b 2e 20 20 46 75 74 75 72 65 20 76 65 72 73  ck.  Future vers
66d0: 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d  ions of.SQLite m
66e0: 69 67 68 74 20 63 68 61 6e 67 65 20 74 68 65 20  ight change the 
66f0: 65 72 72 6f 72 20 72 65 73 70 6f 6e 73 65 2e 20  error response. 
6700: 20 49 6e 20 70 61 72 74 69 63 75 6c 61 72 2c 20   In particular, 
6710: 77 65 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f  we may.choose to
6720: 20 73 69 6d 70 6c 69 66 79 20 74 68 65 20 69 6e   simplify the in
6730: 74 65 72 66 61 63 65 20 69 6e 20 66 75 74 75 72  terface in futur
6740: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  e versions of SQ
6750: 4c 69 74 65 20 62 79 0a 63 61 75 73 69 6e 67 20  Lite by.causing 
6760: 74 68 65 20 65 72 72 6f 72 73 20 61 62 6f 76 65  the errors above
6770: 20 74 6f 20 66 6f 72 63 65 20 61 6e 20 75 6e 63   to force an unc
6780: 6f 6e 64 69 74 69 6f 6e 61 6c 20 72 6f 6c 6c 62  onditional rollb
6790: 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a  ack.</p>..<tcl>.
67a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
67b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
67c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
67d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
67e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
67f0: 53 65 63 74 69 6f 6e 20 7b 53 41 56 45 50 4f 49  Section {SAVEPOI
6800: 4e 54 7d 20 73 61 76 65 70 6f 69 6e 74 20 7b 53  NT} savepoint {S
6810: 41 56 45 50 4f 49 4e 54 20 52 45 4c 45 41 53 45  AVEPOINT RELEASE
6820: 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
6830: 6c 65 44 69 61 67 72 61 6d 20 73 61 76 65 70 6f  leDiagram savepo
6840: 69 6e 74 2d 73 74 6d 74 0a 52 65 63 75 72 73 69  int-stmt.Recursi
6850: 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
6860: 72 65 6c 65 61 73 65 2d 73 74 6d 74 0a 52 65 63  release-stmt.Rec
6870: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
6880: 72 61 6d 20 72 6f 6c 6c 62 61 63 6b 2d 73 74 6d  ram rollback-stm
6890: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 20 5e 53  t.</tcl>..<p> ^S
68a0: 41 56 45 50 4f 49 4e 54 73 20 61 72 65 20 61 20  AVEPOINTs are a 
68b0: 6d 65 74 68 6f 64 20 6f 66 20 63 72 65 61 74 69  method of creati
68c0: 6e 67 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c  ng transactions,
68d0: 20 73 69 6d 69 6c 61 72 20 74 6f 0a 5b 42 45 47   similar to.[BEG
68e0: 49 4e 5d 20 61 6e 64 20 5b 43 4f 4d 4d 49 54 5d  IN] and [COMMIT]
68f0: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  , except that th
6900: 65 20 53 41 56 45 50 4f 49 4e 54 20 61 6e 64 20  e SAVEPOINT and 
6910: 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 73  RELEASE commands
6920: 0a 61 72 65 20 6e 61 6d 65 64 20 61 6e 64 20 6d  .are named and m
6930: 61 79 20 62 65 20 6e 65 73 74 65 64 2e 3c 2f 70  ay be nested.</p
6940: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 53 41 56 45  >..<p> ^The SAVE
6950: 50 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 20 73 74  POINT command st
6960: 61 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73  arts a new trans
6970: 61 63 74 69 6f 6e 20 77 69 74 68 20 61 20 6e 61  action with a na
6980: 6d 65 2e 0a 5e 54 68 65 20 74 72 61 6e 73 61 63  me..^The transac
6990: 74 69 6f 6e 20 6e 61 6d 65 73 20 6e 65 65 64 20  tion names need 
69a0: 6e 6f 74 20 62 65 20 75 6e 69 71 75 65 2e 0a 5e  not be unique..^
69b0: 28 41 20 53 41 56 45 50 4f 49 4e 54 20 63 61 6e  (A SAVEPOINT can
69c0: 20 62 65 20 73 74 61 72 74 65 64 20 65 69 74 68   be started eith
69d0: 65 72 20 77 69 74 68 69 6e 20 6f 72 20 6f 75 74  er within or out
69e0: 73 69 64 65 20 6f 66 0a 61 20 5b 42 45 47 49 4e  side of.a [BEGIN
69f0: 5d 2e 2e 2e 5b 43 4f 4d 4d 49 54 5d 2e 29 5e 20  ]...[COMMIT].)^ 
6a00: 20 5e 28 57 68 65 6e 20 61 20 53 41 56 45 50 4f   ^(When a SAVEPO
6a10: 49 4e 54 20 69 73 20 74 68 65 20 6f 75 74 65 72  INT is the outer
6a20: 2d 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 0a  -most savepoint.
6a30: 61 6e 64 20 69 74 20 69 73 20 6e 6f 74 20 77 69  and it is not wi
6a40: 74 68 69 6e 20 61 20 5b 42 45 47 49 4e 5d 2e 2e  thin a [BEGIN]..
6a50: 2e 5b 43 4f 4d 4d 49 54 5d 20 74 68 65 6e 20 74  .[COMMIT] then t
6a60: 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 74  he behavior is t
6a70: 68 65 0a 73 61 6d 65 20 61 73 20 42 45 47 49 4e  he.same as BEGIN
6a80: 20 44 45 46 45 52 52 45 44 20 54 52 41 4e 53 41   DEFERRED TRANSA
6a90: 43 54 49 4f 4e 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  CTION.)^</p>..<p
6aa0: 3e 5e 54 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54  >^The ROLLBACK T
6ab0: 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 76 65 72 74  O command revert
6ac0: 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74  s the state of t
6ad0: 68 65 20 64 61 74 61 62 61 73 65 20 62 61 63 6b  he database back
6ae0: 20 74 6f 20 77 68 61 74 0a 69 74 20 77 61 73 20   to what.it was 
6af0: 6a 75 73 74 20 61 66 74 65 72 20 74 68 65 20 63  just after the c
6b00: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 53 41 56  orresponding SAV
6b10: 45 50 4f 49 4e 54 2e 20 20 5e 4e 6f 74 65 20 74  EPOINT.  ^Note t
6b20: 68 61 74 20 75 6e 6c 69 6b 65 20 74 68 61 74 0a  hat unlike that.
6b30: 70 6c 61 69 6e 20 5b 52 4f 4c 4c 42 41 43 4b 5d  plain [ROLLBACK]
6b40: 20 63 6f 6d 6d 61 6e 64 20 28 77 69 74 68 6f 75   command (withou
6b50: 74 20 74 68 65 20 54 4f 20 6b 65 79 77 6f 72 64  t the TO keyword
6b60: 29 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54  ) the ROLLBACK T
6b70: 4f 20 63 6f 6d 6d 61 6e 64 0a 64 6f 65 73 20 6e  O command.does n
6b80: 6f 74 20 63 61 6e 63 65 6c 20 74 68 65 20 74 72  ot cancel the tr
6b90: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 5e 49 6e 73  ansaction.  ^Ins
6ba0: 74 65 61 64 20 6f 66 20 63 61 6e 63 65 6c 6c 69  tead of cancelli
6bb0: 6e 67 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ng the transacti
6bc0: 6f 6e 2c 0a 74 68 65 20 52 4f 4c 4c 42 41 43 4b  on,.the ROLLBACK
6bd0: 20 54 4f 20 63 6f 6d 6d 61 6e 64 20 72 65 73 74   TO command rest
6be0: 61 72 74 73 20 74 68 65 20 74 72 61 6e 73 61 63  arts the transac
6bf0: 74 69 6f 6e 20 61 67 61 69 6e 20 61 74 20 74 68  tion again at th
6c00: 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 5e 41 6c  e beginning..^Al
6c10: 6c 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 53 41  l intervening SA
6c20: 56 45 50 4f 49 4e 54 73 20 61 72 65 20 63 61 6e  VEPOINTs are can
6c30: 63 65 6c 65 64 2c 20 68 6f 77 65 76 65 72 2e 3c  celed, however.<
6c40: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 4c  /p>..<p>^The REL
6c50: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20  EASE command is 
6c60: 6c 69 6b 65 20 61 20 5b 43 4f 4d 4d 49 54 5d 20  like a [COMMIT] 
6c70: 66 6f 72 20 61 20 53 41 56 45 50 4f 49 4e 54 2e  for a SAVEPOINT.
6c80: 0a 5e 54 68 65 20 52 45 4c 45 41 53 45 20 63 6f  .^The RELEASE co
6c90: 6d 6d 61 6e 64 20 63 61 75 73 65 73 20 61 6c 6c  mmand causes all
6ca0: 20 73 61 76 65 70 6f 69 6e 74 73 20 62 61 63 6b   savepoints back
6cb0: 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e   to and includin
6cc0: 67 20 74 68 65 20 0a 6d 6f 73 74 20 72 65 63 65  g the .most rece
6cd0: 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 77 69 74  nt savepoint wit
6ce0: 68 20 61 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d  h a matching nam
6cf0: 65 20 74 6f 20 62 65 20 72 65 6d 6f 76 65 64 20  e to be removed 
6d00: 66 72 6f 6d 20 74 68 65 20 0a 74 72 61 6e 73 61  from the .transa
6d10: 63 74 69 6f 6e 20 73 74 61 63 6b 2e 20 20 5e 54  ction stack.  ^T
6d20: 68 65 20 52 45 4c 45 41 53 45 20 6f 66 20 61 6e  he RELEASE of an
6d30: 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63 74 69   inner transacti
6d40: 6f 6e 0a 64 6f 65 73 20 6e 6f 74 20 63 61 75 73  on.does not caus
6d50: 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f  e any changes to
6d60: 20 62 65 20 77 72 69 74 74 65 6e 20 74 6f 20 74   be written to t
6d70: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
6d80: 3b 20 69 74 20 6d 65 72 65 6c 79 0a 72 65 6d 6f  ; it merely.remo
6d90: 76 65 73 20 73 61 76 65 70 6f 69 6e 74 73 20 66  ves savepoints f
6da0: 72 6f 6d 20 74 68 65 20 74 72 61 6e 73 61 63 74  rom the transact
6db0: 69 6f 6e 20 73 74 61 63 6b 20 73 75 63 68 20 74  ion stack such t
6dc0: 68 61 74 20 69 74 20 69 73 0a 6e 6f 20 6c 6f 6e  hat it is.no lon
6dd0: 67 65 72 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  ger possible to 
6de0: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 74 68 6f 73  ROLLBACK TO thos
6df0: 65 20 73 61 76 65 70 6f 69 6e 74 73 2e 0a 5e 49  e savepoints..^I
6e00: 66 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d  f a RELEASE comm
6e10: 61 6e 64 20 72 65 6c 65 61 73 65 73 20 74 68 65  and releases the
6e20: 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70   outermost savep
6e30: 6f 69 6e 74 2c 20 73 6f 0a 74 68 61 74 20 74 68  oint, so.that th
6e40: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 74  e transaction st
6e50: 61 63 6b 20 62 65 63 6f 6d 65 73 20 65 6d 70 74  ack becomes empt
6e60: 79 2c 20 74 68 65 6e 20 52 45 4c 45 41 53 45 20  y, then RELEASE 
6e70: 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20 5b  is the same.as [
6e80: 43 4f 4d 4d 49 54 5d 2e 0a 5e 54 68 65 20 5b 43  COMMIT]..^The [C
6e90: 4f 4d 4d 49 54 5d 20 63 6f 6d 6d 61 6e 64 20 6d  OMMIT] command m
6ea0: 61 79 20 62 65 20 75 73 65 64 20 74 6f 20 72 65  ay be used to re
6eb0: 6c 65 61 73 65 20 61 6c 6c 20 73 61 76 65 70 6f  lease all savepo
6ec0: 69 6e 74 73 20 61 6e 64 0a 63 6f 6d 6d 69 74 20  ints and.commit 
6ed0: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
6ee0: 65 76 65 6e 20 69 66 20 74 68 65 20 74 72 61 6e  even if the tran
6ef0: 73 61 63 74 69 6f 6e 20 77 61 73 20 6f 72 69 67  saction was orig
6f00: 69 6e 61 6c 6c 79 20 73 74 61 72 74 65 64 0a 62  inally started.b
6f10: 79 20 61 20 53 41 56 45 50 4f 49 4e 54 20 63 6f  y a SAVEPOINT co
6f20: 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 20 6f 66  mmand instead of
6f30: 20 61 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61   a [BEGIN] comma
6f40: 6e 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  nd.</p>..<p>^If 
6f50: 74 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61  the savepoint-na
6f60: 6d 65 20 69 6e 20 61 20 52 45 4c 45 41 53 45 20  me in a RELEASE 
6f70: 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20 6e 6f 74  command does not
6f80: 20 6d 61 74 63 68 20 61 6e 79 0a 73 61 76 65 70   match any.savep
6f90: 6f 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 69  oint currently i
6fa0: 6e 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  n the transactio
6fb0: 6e 20 73 74 61 63 6b 2c 20 74 68 65 6e 20 6e 6f  n stack, then no
6fc0: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 0a   savepoints are.
6fd0: 72 65 6c 65 61 73 65 64 2c 20 74 68 65 20 64 61  released, the da
6fe0: 74 61 62 61 73 65 20 69 73 20 75 6e 63 68 61 6e  tabase is unchan
6ff0: 67 65 64 2c 20 61 6e 64 20 74 68 65 20 52 45 4c  ged, and the REL
7000: 45 41 53 45 20 63 6f 6d 6d 61 6e 64 20 72 65 74  EASE command ret
7010: 75 72 6e 73 0a 61 6e 20 65 72 72 6f 72 2e 3c 2f  urns.an error.</
7020: 70 3e 0a 0a 3c 70 3e 5e 4e 6f 74 65 20 74 68 61  p>..<p>^Note tha
7030: 74 20 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73  t an inner trans
7040: 61 63 74 69 6f 6e 20 6d 69 67 68 74 20 63 6f 6d  action might com
7050: 6d 69 74 20 28 75 73 69 6e 67 20 74 68 65 20 52  mit (using the R
7060: 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 29 0a  ELEASE command).
7070: 62 75 74 20 74 68 65 6e 20 6c 61 74 65 72 20 68  but then later h
7080: 61 76 65 20 69 74 73 20 77 6f 72 6b 20 75 6e 64  ave its work und
7090: 6f 6e 65 20 62 79 20 61 20 52 4f 4c 4c 42 41 43  one by a ROLLBAC
70a0: 4b 20 69 6e 20 61 6e 20 6f 75 74 65 72 20 74 72  K in an outer tr
70b0: 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 41 20 70 6f  ansaction..^A po
70c0: 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 70  wer failure or p
70d0: 72 6f 67 72 61 6d 20 63 72 61 73 68 20 6f 72 20  rogram crash or 
70e0: 4f 53 20 63 72 61 73 68 20 77 69 6c 6c 20 63 61  OS crash will ca
70f0: 75 73 65 20 74 68 65 20 6f 75 74 65 72 2d 6d 6f  use the outer-mo
7100: 73 74 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 74  st.transaction t
7110: 6f 20 72 6f 6c 6c 62 61 63 6b 2c 20 75 6e 64 6f  o rollback, undo
7120: 69 6e 67 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  ing all changes 
7130: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
7140: 65 64 20 77 69 74 68 69 6e 0a 74 68 61 74 20 6f  ed within.that o
7150: 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e  uter transaction
7160: 2c 20 65 76 65 6e 20 63 68 61 6e 67 65 73 20 74  , even changes t
7170: 68 61 74 20 68 61 76 65 20 73 75 70 70 6f 73 65  hat have suppose
7180: 64 6c 79 20 62 65 65 6e 20 22 63 6f 6d 6d 69 74  dly been "commit
7190: 74 65 64 22 0a 62 79 20 74 68 65 20 52 45 4c 45  ted".by the RELE
71a0: 41 53 45 20 63 6f 6d 6d 61 6e 64 2e 20 20 5e 43  ASE command.  ^C
71b0: 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 61 63  ontent is not ac
71c0: 74 75 61 6c 6c 79 20 63 6f 6d 6d 69 74 74 65 64  tually committed
71d0: 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 0a 75 6e   on the disk .un
71e0: 74 69 6c 20 74 68 65 20 6f 75 74 65 72 6d 6f 73  til the outermos
71f0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  t transaction co
7200: 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  mmits.</p>..<p>T
7210: 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c  here are several
7220: 20 77 61 79 73 20 6f 66 20 74 68 69 6e 6b 69 6e   ways of thinkin
7230: 67 20 61 62 6f 75 74 20 74 68 65 20 52 45 4c 45  g about the RELE
7240: 41 53 45 20 63 6f 6d 6d 61 6e 64 3a 3c 2f 70 3e  ASE command:</p>
7250: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 53  ..<ul>.<li><p>.S
7260: 6f 6d 65 20 70 65 6f 70 6c 65 20 76 69 65 77 20  ome people view 
7270: 52 45 4c 45 41 53 45 20 61 73 20 74 68 65 20 65  RELEASE as the e
7280: 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 43 4f 4d  quivalent of COM
7290: 4d 49 54 20 66 6f 72 20 61 20 53 41 56 45 50 4f  MIT for a SAVEPO
72a0: 49 4e 54 2e 0a 54 68 69 73 20 69 73 20 61 6e 20  INT..This is an 
72b0: 61 63 63 65 70 74 61 62 6c 65 20 70 6f 69 6e 74  acceptable point
72c0: 20 6f 66 20 76 69 65 77 20 61 73 20 6c 6f 6e 67   of view as long
72d0: 20 61 73 20 6f 6e 65 20 72 65 6d 65 6d 62 65 72   as one remember
72e0: 73 20 74 68 61 74 20 74 68 65 0a 63 68 61 6e 67  s that the.chang
72f0: 65 73 20 63 6f 6d 6d 69 74 74 65 64 20 62 79 20  es committed by 
7300: 61 6e 20 69 6e 6e 65 72 20 74 72 61 6e 73 61 63  an inner transac
7310: 74 69 6f 6e 20 6d 69 67 68 74 20 6c 61 74 65 72  tion might later
7320: 20 62 65 20 75 6e 64 6f 6e 65 20 62 79 20 61 0a   be undone by a.
7330: 72 6f 6c 6c 62 61 63 6b 20 69 6e 20 61 6e 20 6f  rollback in an o
7340: 75 74 65 72 20 74 72 61 6e 73 61 63 74 69 6f 6e  uter transaction
7350: 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e  .</p></li>..<li>
7360: 3c 70 3e 0a 41 6e 6f 74 68 65 72 20 76 69 65 77  <p>.Another view
7370: 20 6f 66 20 52 45 4c 45 41 53 45 20 69 73 20 74   of RELEASE is t
7380: 68 61 74 20 69 74 20 6d 65 72 67 65 73 20 61 20  hat it merges a 
7390: 6e 61 6d 65 64 20 74 72 61 6e 73 61 63 74 69 6f  named transactio
73a0: 6e 20 69 6e 74 6f 20 69 74 73 0a 70 61 72 65 6e  n into its.paren
73b0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73  t transaction, s
73c0: 6f 20 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64  o that the named
73d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
73e0: 20 69 74 73 20 70 61 72 65 6e 74 20 62 65 63 6f   its parent beco
73f0: 6d 65 0a 74 68 65 20 73 61 6d 65 20 74 72 61 6e  me.the same tran
7400: 73 61 63 74 69 6f 6e 2e 20 20 41 66 74 65 72 20  saction.  After 
7410: 52 45 4c 45 41 53 45 2c 20 74 68 65 20 6e 61 6d  RELEASE, the nam
7420: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  ed transaction a
7430: 6e 64 20 69 74 73 20 70 61 72 65 6e 74 0a 77 69  nd its parent.wi
7440: 6c 6c 20 63 6f 6d 6d 69 74 20 6f 72 20 72 6f 6c  ll commit or rol
7450: 6c 62 61 63 6b 20 74 6f 67 65 74 68 65 72 2c 20  lback together, 
7460: 77 68 61 74 65 76 65 72 20 74 68 65 69 72 20 66  whatever their f
7470: 61 74 65 20 6d 61 79 20 62 65 2e 0a 3c 2f 70 3e  ate may be..</p>
7480: 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 4f  </li>..<li><p>.O
7490: 6e 65 20 63 61 6e 20 61 6c 73 6f 20 74 68 69 6e  ne can also thin
74a0: 6b 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 73 20  k of savepoints 
74b0: 61 73 0a 22 6d 61 72 6b 73 22 20 69 6e 20 74 68  as."marks" in th
74c0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 69  e transaction ti
74d0: 6d 65 6c 69 6e 65 2e 20 20 49 6e 20 74 68 69 73  meline.  In this
74e0: 20 76 69 65 77 2c 20 74 68 65 20 53 41 56 45 50   view, the SAVEP
74f0: 4f 49 4e 54 20 63 6f 6d 6d 61 6e 64 0a 63 72 65  OINT command.cre
7500: 61 74 65 73 20 61 20 6e 65 77 20 6d 61 72 6b 2c  ates a new mark,
7510: 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b 20 54 4f   the ROLLBACK TO
7520: 20 63 6f 6d 6d 61 6e 64 20 72 65 77 69 6e 64 73   command rewinds
7530: 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20 62 61   the timeline ba
7540: 63 6b 0a 74 6f 20 61 20 70 6f 69 6e 74 20 6a 75  ck.to a point ju
7550: 73 74 20 61 66 74 65 72 20 74 68 65 20 6e 61 6d  st after the nam
7560: 65 64 20 6d 61 72 6b 2c 20 61 6e 64 20 74 68 65  ed mark, and the
7570: 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
7580: 0a 65 72 61 73 65 73 20 6d 61 72 6b 73 20 66 72  .erases marks fr
7590: 6f 6d 20 74 68 65 20 74 69 6d 65 6c 69 6e 65 20  om the timeline 
75a0: 77 69 74 68 6f 75 74 20 61 63 74 75 61 6c 6c 79  without actually
75b0: 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 63 68 61 6e   making any.chan
75c0: 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
75d0: 61 73 65 2e 0a 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c  ase..</p></li>.<
75e0: 2f 75 6c 3e 0a 0a 0a 0a 3c 68 33 3e 54 72 61 6e  /ul>....<h3>Tran
75f0: 73 61 63 74 69 6f 6e 20 4e 65 73 74 69 6e 67 20  saction Nesting 
7600: 52 75 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  Rules</h3>..<p>^
7610: 54 68 65 20 6c 61 73 74 20 74 72 61 6e 73 61 63  The last transac
7620: 74 69 6f 6e 20 73 74 61 72 74 65 64 20 77 69 6c  tion started wil
7630: 6c 20 62 65 20 74 68 65 20 66 69 72 73 74 0a 74  l be the first.t
7640: 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 6d 6d 69  ransaction commi
7650: 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65 64 20 62  tted or rolled b
7660: 61 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ack.</p>..<p>^Th
7670: 65 20 5b 42 45 47 49 4e 5d 20 63 6f 6d 6d 61 6e  e [BEGIN] comman
7680: 64 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20  d only works if 
7690: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
76a0: 73 74 61 63 6b 20 69 73 20 65 6d 70 74 79 2c 20  stack is empty, 
76b0: 6f 72 0a 69 6e 20 6f 74 68 65 72 20 77 6f 72 64  or.in other word
76c0: 73 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  s if there are n
76d0: 6f 20 70 65 6e 64 69 6e 67 20 74 72 61 6e 73 61  o pending transa
76e0: 63 74 69 6f 6e 73 2e 20 20 5e 49 66 20 74 68 65  ctions.  ^If the
76f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 73 74 61   transaction.sta
7700: 63 6b 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  ck is not empty 
7710: 77 68 65 6e 20 74 68 65 20 5b 42 45 47 49 4e 5d  when the [BEGIN]
7720: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f   command is invo
7730: 6b 65 64 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ked, then the co
7740: 6d 6d 61 6e 64 0a 66 61 69 6c 73 20 77 69 74 68  mmand.fails with
7750: 20 61 6e 20 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a   an error.</p>..
7760: 3c 70 3e 5e 54 68 65 20 5b 43 4f 4d 4d 49 54 5d  <p>^The [COMMIT]
7770: 20 63 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 69 74 73   command commits
7780: 20 61 6c 6c 20 6f 75 74 73 74 61 6e 64 69 6e 67   all outstanding
7790: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e   transactions an
77a0: 64 20 6c 65 61 76 65 73 0a 74 68 65 20 74 72 61  d leaves.the tra
77b0: 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20 65  nsaction stack e
77c0: 6d 70 74 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  mpty.</p>..<p>^T
77d0: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
77e0: 6e 64 20 73 74 61 72 74 73 20 77 69 74 68 20 74  nd starts with t
77f0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61  he most recent a
7800: 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 0a 74  ddition to the.t
7810: 72 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b  ransaction stack
7820: 20 61 6e 64 20 72 65 6c 65 61 73 65 73 20 73 61   and releases sa
7830: 76 65 70 6f 69 6e 74 73 20 62 61 63 6b 77 61 72  vepoints backwar
7840: 64 73 20 0a 69 6e 20 74 69 6d 65 20 75 6e 74 69  ds .in time unti
7850: 6c 20 69 74 20 72 65 6c 65 61 73 65 73 20 61 20  l it releases a 
7860: 73 61 76 65 70 6f 69 6e 74 20 77 69 74 68 20 61  savepoint with a
7870: 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70 6f   matching savepo
7880: 69 6e 74 2d 6e 61 6d 65 2e 0a 5e 50 72 69 6f 72  int-name..^Prior
7890: 20 73 61 76 65 70 6f 69 6e 74 73 2c 20 65 76 65   savepoints, eve
78a0: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 74  n savepoints wit
78b0: 68 20 6d 61 74 63 68 69 6e 67 20 73 61 76 65 70  h matching savep
78c0: 6f 69 6e 74 2d 6e 61 6d 65 73 2c 20 61 72 65 0a  oint-names, are.
78d0: 75 6e 63 68 61 6e 67 65 64 2e 0a 5e 49 66 20 74  unchanged..^If t
78e0: 68 65 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61  he RELEASE comma
78f0: 6e 64 20 63 61 75 73 65 73 20 74 68 65 0a 74 72  nd causes the.tr
7900: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 20  ansaction stack 
7910: 74 6f 20 62 65 63 6f 6d 65 20 65 6d 70 74 79 20  to become empty 
7920: 28 69 66 20 74 68 65 20 52 45 4c 45 41 53 45 20  (if the RELEASE 
7930: 63 6f 6d 6d 61 6e 64 20 72 65 6c 65 61 73 65 73  command releases
7940: 20 74 68 65 0a 6f 75 74 65 72 6d 6f 73 74 20 74   the.outermost t
7950: 72 61 6e 73 61 63 74 69 6f 6e 20 66 72 6f 6d 20  ransaction from 
7960: 74 68 65 20 73 74 61 63 6b 29 20 74 68 65 6e 20  the stack) then 
7970: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
7980: 63 6f 6d 6d 69 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  commits.</p>..<p
7990: 3e 5e 54 68 65 20 5b 52 4f 4c 4c 42 41 43 4b 5d  >^The [ROLLBACK]
79a0: 20 63 6f 6d 6d 61 6e 64 20 77 69 74 68 6f 75 74   command without
79b0: 20 61 20 54 4f 20 63 6c 61 75 73 65 20 72 6f 6c   a TO clause rol
79c0: 6c 73 20 62 61 63 6b 73 20 61 6c 6c 20 74 72 61  ls backs all tra
79d0: 6e 73 61 63 74 69 6f 6e 73 0a 61 6e 64 20 6c 65  nsactions.and le
79e0: 61 76 65 73 20 74 68 65 20 74 72 61 6e 73 61 63  aves the transac
79f0: 74 69 6f 6e 20 73 74 61 63 6b 20 65 6d 70 74 79  tion stack empty
7a00: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  .</p>..<p>^The R
7a10: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
7a20: 77 69 74 68 20 61 20 54 4f 20 63 6c 61 75 73 65  with a TO clause
7a30: 20 72 6f 6c 6c 73 20 62 61 63 6b 20 74 72 61 6e   rolls back tran
7a40: 73 61 63 74 69 6f 6e 73 20 67 6f 69 6e 67 0a 62  sactions going.b
7a50: 61 63 6b 77 61 72 64 73 20 69 6e 20 74 69 6d 65  ackwards in time
7a60: 20 62 61 63 6b 20 74 6f 20 74 68 65 20 6d 6f 73   back to the mos
7a70: 74 20 72 65 63 65 6e 74 20 53 41 56 45 50 4f 49  t recent SAVEPOI
7a80: 4e 54 20 77 69 74 68 20 61 20 6d 61 74 63 68 69  NT with a matchi
7a90: 6e 67 20 6e 61 6d 65 2e 0a 5e 54 68 65 20 53 41  ng name..^The SA
7aa0: 56 45 50 4f 49 4e 54 20 77 69 74 68 20 74 68 65  VEPOINT with the
7ab0: 20 6d 61 74 63 68 69 6e 67 20 6e 61 6d 65 20 72   matching name r
7ac0: 65 6d 61 69 6e 73 20 6f 6e 20 74 68 65 20 74 72  emains on the tr
7ad0: 61 6e 73 61 63 74 69 6f 6e 20 73 74 61 63 6b 2c  ansaction stack,
7ae0: 0a 62 75 74 20 61 6c 6c 20 64 61 74 61 62 61 73  .but all databas
7af0: 65 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 6f  e changes that o
7b00: 63 63 75 72 72 65 64 20 61 66 74 65 72 20 74 68  ccurred after th
7b10: 61 74 20 53 41 56 45 50 4f 49 4e 54 20 77 61 73  at SAVEPOINT was
7b20: 20 63 72 65 61 74 65 64 0a 61 72 65 20 72 6f 6c   created.are rol
7b30: 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74  led back.  ^If t
7b40: 68 65 20 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d  he savepoint-nam
7b50: 65 20 69 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  e in a ROLLBACK 
7b60: 54 4f 20 63 6f 6d 6d 61 6e 64 20 64 6f 65 73 20  TO command does 
7b70: 6e 6f 74 0a 6d 61 74 63 68 20 61 6e 79 20 53 41  not.match any SA
7b80: 56 45 50 4f 49 4e 54 20 6f 6e 20 74 68 65 20 73  VEPOINT on the s
7b90: 74 61 63 6b 2c 20 74 68 65 6e 20 74 68 65 20 52  tack, then the R
7ba0: 4f 4c 4c 42 41 43 4b 20 63 6f 6d 6d 61 6e 64 20  OLLBACK command 
7bb0: 66 61 69 6c 73 20 77 69 74 68 20 61 6e 0a 65 72  fails with an.er
7bc0: 72 6f 72 20 61 6e 64 20 6c 65 61 76 65 73 20 74  ror and leaves t
7bd0: 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
7be0: 64 61 74 61 62 61 73 65 20 75 6e 63 68 61 6e 67  database unchang
7bf0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23  ed.</p>..<tcl>.#
7c00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7c10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7c20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7c30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7c40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
7c50: 65 63 74 69 6f 6e 20 63 6f 6d 6d 65 6e 74 20 63  ection comment c
7c60: 6f 6d 6d 65 6e 74 20 7b 63 6f 6d 6d 65 6e 74 20  omment {comment 
7c70: 2a 63 6f 6d 6d 65 6e 74 73 7d 0a 0a 52 65 63 75  *comments}..Recu
7c80: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
7c90: 61 6d 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74 61  am comment-synta
7ca0: 78 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 43 6f  x.</tcl>..<p>^Co
7cb0: 6d 6d 65 6e 74 73 20 61 72 65 20 6e 6f 74 20 53  mments are not S
7cc0: 51 4c 20 63 6f 6d 6d 61 6e 64 73 2c 20 62 75 74  QL commands, but
7cd0: 20 63 61 6e 20 6f 63 63 75 72 20 77 69 74 68 69   can occur withi
7ce0: 6e 20 74 68 65 20 74 65 78 74 20 6f 66 0a 53 51  n the text of.SQ
7cf0: 4c 20 71 75 65 72 69 65 73 20 70 61 73 73 65 64  L queries passed
7d00: 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 70 72 65   to [sqlite3_pre
7d10: 70 61 72 65 5f 76 32 28 29 5d 20 61 6e 64 20 72  pare_v2()] and r
7d20: 65 6c 61 74 65 64 20 69 6e 74 65 72 66 61 63 65  elated interface
7d30: 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 61 72 65  s..^Comments are
7d40: 20 74 72 65 61 74 65 64 20 61 73 20 77 68 69 74   treated as whit
7d50: 65 73 70 61 63 65 20 62 79 20 74 68 65 20 70 61  espace by the pa
7d60: 72 73 65 72 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20  rser..^Comments 
7d70: 63 61 6e 20 62 65 67 69 6e 20 61 6e 79 77 68 65  can begin anywhe
7d80: 72 65 20 77 68 69 74 65 73 70 61 63 65 20 0a 63  re whitespace .c
7d90: 61 6e 20 62 65 20 66 6f 75 6e 64 2c 20 69 6e 63  an be found, inc
7da0: 6c 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78  luding inside ex
7db0: 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 73  pressions that s
7dc0: 70 61 6e 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e  pan multiple lin
7dd0: 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 53 51  es..</p>..<p>^SQ
7de0: 4c 20 63 6f 6d 6d 65 6e 74 73 20 62 65 67 69 6e  L comments begin
7df0: 20 77 69 74 68 20 74 77 6f 20 63 6f 6e 73 65 63   with two consec
7e00: 75 74 69 76 65 20 22 2d 22 20 63 68 61 72 61 63  utive "-" charac
7e10: 74 65 72 73 20 28 41 53 43 49 49 20 30 78 32 64  ters (ASCII 0x2d
7e20: 29 0a 61 6e 64 20 65 78 74 65 6e 64 20 75 70 20  ).and extend up 
7e30: 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  to and including
7e40: 20 74 68 65 20 6e 65 78 74 20 6e 65 77 6c 69 6e   the next newlin
7e50: 65 20 63 68 61 72 61 63 74 65 72 20 28 41 53 43  e character (ASC
7e60: 49 49 20 30 78 30 61 29 0a 6f 72 20 75 6e 74 69  II 0x0a).or unti
7e70: 6c 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70  l the end of inp
7e80: 75 74 2c 20 77 68 69 63 68 65 76 65 72 20 63 6f  ut, whichever co
7e90: 6d 65 73 20 66 69 72 73 74 2e 3c 2f 70 3e 0a 0a  mes first.</p>..
7ea0: 3c 70 3e 5e 43 2d 73 74 79 6c 65 20 63 6f 6d 6d  <p>^C-style comm
7eb0: 65 6e 74 73 20 62 65 67 69 6e 0a 77 69 74 68 20  ents begin.with 
7ec0: 22 2f 2a 22 20 61 6e 64 20 65 78 74 65 6e 64 20  "/*" and extend 
7ed0: 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  up to and includ
7ee0: 69 6e 67 20 74 68 65 20 6e 65 78 74 20 22 2a 2f  ing the next "*/
7ef0: 22 20 63 68 61 72 61 63 74 65 72 20 70 61 69 72  " character pair
7f00: 0a 6f 72 20 75 6e 74 69 6c 20 74 68 65 20 65 6e  .or until the en
7f10: 64 20 6f 66 20 69 6e 70 75 74 2c 20 77 68 69 63  d of input, whic
7f20: 68 65 76 65 72 20 63 6f 6d 65 73 20 66 69 72 73  hever comes firs
7f30: 74 2e 20 20 5e 43 2d 73 74 79 6c 65 20 63 6f 6d  t.  ^C-style com
7f40: 6d 65 6e 74 73 0a 63 61 6e 20 73 70 61 6e 20 6d  ments.can span m
7f50: 75 6c 74 69 70 6c 65 20 6c 69 6e 65 73 2e 20 3c  ultiple lines. <
7f60: 2f 70 3e 0a 0a 3c 70 3e 5e 43 6f 6d 6d 65 6e 74  /p>..<p>^Comment
7f70: 73 20 63 61 6e 20 61 70 70 65 61 72 20 61 6e 79  s can appear any
7f80: 77 68 65 72 65 20 77 68 69 74 65 73 70 61 63 65  where whitespace
7f90: 20 63 61 6e 20 6f 63 63 75 72 2c 0a 69 6e 63 6c   can occur,.incl
7fa0: 75 64 69 6e 67 20 69 6e 73 69 64 65 20 65 78 70  uding inside exp
7fb0: 72 65 73 73 69 6f 6e 73 20 61 6e 64 20 69 6e 20  ressions and in 
7fc0: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 6f 74  the middle of ot
7fd0: 68 65 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  her SQL statemen
7fe0: 74 73 2e 0a 5e 43 6f 6d 6d 65 6e 74 73 20 64 6f  ts..^Comments do
7ff0: 20 6e 6f 74 20 6e 65 73 74 2e 0a 3c 2f 70 3e 0a   not nest..</p>.
8000: 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
8010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8050: 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
8060: 43 52 45 41 54 45 20 49 4e 44 45 58 7d 20 63 72  CREATE INDEX} cr
8070: 65 61 74 65 69 6e 64 65 78 20 7b 7b 43 52 45 41  eateindex {{CREA
8080: 54 45 20 49 4e 44 45 58 7d 7d 0a 0a 52 65 63 75  TE INDEX}}..Recu
8090: 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
80a0: 61 6d 20 63 72 65 61 74 65 2d 69 6e 64 65 78 2d  am create-index-
80b0: 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
80c0: 5e 54 68 65 20 43 52 45 41 54 45 20 49 4e 44 45  ^The CREATE INDE
80d0: 58 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 69 73  X command consis
80e0: 74 73 20 6f 66 20 74 68 65 20 6b 65 79 77 6f 72  ts of the keywor
80f0: 64 73 20 22 43 52 45 41 54 45 20 49 4e 44 45 58  ds "CREATE INDEX
8100: 22 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68  " followed.by th
8110: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e 65  e name of the ne
8120: 77 20 69 6e 64 65 78 2c 20 74 68 65 20 6b 65 79  w index, the key
8130: 77 6f 72 64 20 22 4f 4e 22 2c 20 74 68 65 20 6e  word "ON", the n
8140: 61 6d 65 20 6f 66 20 61 20 70 72 65 76 69 6f 75  ame of a previou
8150: 73 6c 79 0a 63 72 65 61 74 65 64 20 74 61 62 6c  sly.created tabl
8160: 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20  e that is to be 
8170: 69 6e 64 65 78 65 64 2c 20 61 6e 64 20 61 20 70  indexed, and a p
8180: 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73  arenthesized lis
8190: 74 20 6f 66 20 74 61 62 6c 65 20 63 6f 6c 75 6d  t of table colum
81a0: 6e 0a 6e 61 6d 65 73 20 61 6e 64 2f 6f 72 20 65  n.names and/or e
81b0: 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20  xpressions that 
81c0: 61 72 65 20 75 73 65 64 20 66 6f 72 20 74 68 65  are used for the
81d0: 20 69 6e 64 65 78 20 6b 65 79 2e 0a 49 66 20 74   index key..If t
81e0: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 57 48 45 52  he optional WHER
81f0: 45 20 63 6c 61 75 73 65 20 69 73 20 69 6e 63 6c  E clause is incl
8200: 75 64 65 64 2c 20 74 68 65 6e 20 74 68 65 20 69  uded, then the i
8210: 6e 64 65 78 20 69 73 20 61 20 22 5b 70 61 72 74  ndex is a "[part
8220: 69 61 6c 20 69 6e 64 65 78 5d 22 2e 0a 3c 2f 70  ial index]"..</p
8230: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
8240: 65 6e 74 20 7b 64 65 73 63 69 64 78 7d 20 7b 64  ent {descidx} {d
8250: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 69 63 65  escending indice
8260: 73 7d 20 7b 64 65 73 63 65 6e 64 69 6e 67 20 69  s} {descending i
8270: 6e 64 65 78 7d 20 5c 0a 20 20 20 20 7b 64 65 73  ndex} \.    {des
8280: 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 65 73 7d  cending indexes}
8290: 20 7b 44 45 53 43 7d 3c 2f 74 63 6c 3e 0a 3c 70   {DESC}</tcl>.<p
82a0: 3e 5e 45 61 63 68 20 63 6f 6c 75 6d 6e 20 6e 61  >^Each column na
82b0: 6d 65 20 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  me or expression
82c0: 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65 64   can be followed
82d0: 20 62 79 20 6f 6e 65 0a 6f 66 20 74 68 65 20 22   by one.of the "
82e0: 41 53 43 22 20 6f 72 20 22 44 45 53 43 22 20 6b  ASC" or "DESC" k
82f0: 65 79 77 6f 72 64 73 20 74 6f 20 69 6e 64 69 63  eywords to indic
8300: 61 74 65 20 73 6f 72 74 20 6f 72 64 65 72 2e 0a  ate sort order..
8310: 5e 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20  ^The sort order 
8320: 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62  may or may not b
8330: 65 20 69 67 6e 6f 72 65 64 20 64 65 70 65 6e 64  e ignored depend
8340: 69 6e 67 0a 6f 6e 20 74 68 65 20 64 61 74 61 62  ing.on the datab
8350: 61 73 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2c  ase file format,
8360: 20 61 6e 64 20 69 6e 20 70 61 72 74 69 63 75 6c   and in particul
8370: 61 72 20 74 68 65 20 5b 73 63 68 65 6d 61 20 66  ar the [schema f
8380: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 5d 2e 0a 5e  ormat number]..^
8390: 54 68 65 20 22 6c 65 67 61 63 79 22 20 73 63 68  The "legacy" sch
83a0: 65 6d 61 20 66 6f 72 6d 61 74 20 28 31 29 20 69  ema format (1) i
83b0: 67 6e 6f 72 65 73 20 69 6e 64 65 78 0a 73 6f 72  gnores index.sor
83c0: 74 20 6f 72 64 65 72 2e 20 20 5e 54 68 65 20 64  t order.  ^The d
83d0: 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 20  escending index 
83e0: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 28 34  schema format (4
83f0: 29 20 74 61 6b 65 73 20 69 6e 64 65 78 20 73 6f  ) takes index so
8400: 72 74 20 6f 72 64 65 72 0a 69 6e 74 6f 20 61 63  rt order.into ac
8410: 63 6f 75 6e 74 2e 20 20 4f 6e 6c 79 20 76 65 72  count.  Only ver
8420: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
8430: 33 2e 33 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33  3.3.0 ([dateof:3
8440: 2e 33 2e 30 5d 29 0a 61 6e 64 20 6c 61 74 65 72  .3.0]).and later
8450: 20 61 72 65 20 61 62 6c 65 20 74 6f 20 75 6e 64   are able to und
8460: 65 72 73 74 61 6e 64 0a 74 68 65 20 64 65 73 63  erstand.the desc
8470: 65 6e 64 69 6e 67 20 69 6e 64 65 78 20 66 6f 72  ending index for
8480: 6d 61 74 2e 20 46 6f 72 20 63 6f 6d 70 61 74 69  mat. For compati
8490: 62 69 6c 69 74 79 2c 20 76 65 72 73 69 6f 6e 20  bility, version 
84a0: 6f 66 20 53 51 4c 69 74 65 20 62 65 74 77 65 65  of SQLite betwee
84b0: 6e 20 33 2e 33 2e 30 0a 61 6e 64 20 33 2e 37 2e  n 3.3.0.and 3.7.
84c0: 39 20 75 73 65 20 74 68 65 20 6c 65 67 61 63 79  9 use the legacy
84d0: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 62   schema format b
84e0: 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68 65 20  y default.  The 
84f0: 6e 65 77 65 72 20 73 63 68 65 6d 61 20 66 6f 72  newer schema for
8500: 6d 61 74 20 69 73 0a 75 73 65 64 20 62 79 20 64  mat is.used by d
8510: 65 66 61 75 6c 74 20 69 6e 20 76 65 72 73 69 6f  efault in versio
8520: 6e 20 33 2e 37 2e 31 30 20 28 5b 64 61 74 65 6f  n 3.7.10 ([dateo
8530: 66 3a 33 2e 37 2e 31 30 5d 29 20 61 6e 64 20 6c  f:3.7.10]) and l
8540: 61 74 65 72 2e 0a 5e 54 68 65 20 5b 6c 65 67 61  ater..^The [lega
8550: 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70  cy_file_format p
8560: 72 61 67 6d 61 5d 20 63 61 6e 20 62 65 20 75 73  ragma] can be us
8570: 65 64 20 74 6f 20 63 68 61 6e 67 65 20 73 65 74  ed to change set
8580: 20 74 68 65 20 73 70 65 63 69 66 69 63 0a 62 65   the specific.be
8590: 68 61 76 69 6f 72 20 66 6f 72 20 61 6e 79 20 76  havior for any v
85a0: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
85b0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
85c0: 72 61 67 6d 65 6e 74 20 63 6f 6c 6c 69 64 78 20  ragment collidx 
85d0: 7b 43 4f 4c 4c 41 54 45 7d 3c 2f 74 63 6c 3e 0a  {COLLATE}</tcl>.
85e0: 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45 20  <p>^The COLLATE 
85f0: 63 6c 61 75 73 65 20 6f 70 74 69 6f 6e 61 6c 6c  clause optionall
8600: 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 61 63 68  y following each
8610: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 6f 72 20   column name.or 
8620: 65 78 70 72 65 73 73 69 6f 6e 20 64 65 66 69 6e  expression defin
8630: 65 73 20 61 0a 63 6f 6c 6c 61 74 69 6e 67 20 73  es a.collating s
8640: 65 71 75 65 6e 63 65 20 75 73 65 64 20 66 6f 72  equence used for
8650: 20 74 65 78 74 20 65 6e 74 72 69 65 73 20 69 6e   text entries in
8660: 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 5e 54   that column..^T
8670: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
8680: 74 69 6e 67 0a 73 65 71 75 65 6e 63 65 20 69 73  ting.sequence is
8690: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
86a0: 65 71 75 65 6e 63 65 20 64 65 66 69 6e 65 64 20  equence defined 
86b0: 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20  for that column 
86c0: 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20 54  in the.[CREATE T
86d0: 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e  ABLE] statement.
86e0: 20 20 5e 4f 72 20 69 66 20 6e 6f 20 63 6f 6c 6c    ^Or if no coll
86f0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
8700: 73 20 6f 74 68 65 72 77 69 73 65 20 64 65 66 69  s otherwise defi
8710: 6e 65 64 2c 0a 74 68 65 20 62 75 69 6c 74 2d 69  ned,.the built-i
8720: 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69  n BINARY collati
8730: 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
8740: 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  sed.</p>..<tcl>h
8750: 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 64 65 78  d_fragment index
8760: 65 78 70 72 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45  expr</tcl>.<p>^E
8770: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 6e  xpressions in an
8780: 20 69 6e 64 65 78 20 6d 61 79 20 6e 6f 74 20 72   index may not r
8790: 65 66 65 72 65 6e 63 65 20 6f 74 68 65 72 20 74  eference other t
87a0: 61 62 6c 65 73 0a 61 6e 64 20 6d 61 79 20 6e 6f  ables.and may no
87b0: 74 20 75 73 65 20 73 75 62 71 75 65 72 69 65 73  t use subqueries
87c0: 20 6e 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 77   nor functions w
87d0: 68 6f 73 65 20 72 65 73 75 6c 74 20 6d 69 67 68  hose result migh
87e0: 74 0a 63 68 61 6e 67 65 20 28 65 78 3a 20 5b 72  t.change (ex: [r
87f0: 61 6e 64 6f 6d 28 29 5d 20 6f 72 20 5b 73 71 6c  andom()] or [sql
8800: 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 5d 29 2e  ite_version()]).
8810: 0a 5e 45 78 70 72 65 73 73 69 6f 6e 73 20 69 6e  .^Expressions in
8820: 20 61 6e 20 69 6e 64 65 78 20 6d 61 79 20 6f 6e   an index may on
8830: 6c 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75  ly refer to colu
8840: 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
8850: 0a 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 69  .that is being i
8860: 6e 64 65 78 65 64 2e 0a 49 6e 64 65 78 65 73 20  ndexed..Indexes 
8870: 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 77 69  on expression wi
8880: 6c 6c 20 6e 6f 74 20 77 6f 72 6b 20 77 69 74 68  ll not work with
8890: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
88a0: 69 74 65 20 70 72 69 6f 72 0a 74 6f 20 5b 76 65  ite prior.to [ve
88b0: 72 73 69 6f 6e 20 33 2e 39 2e 30 5d 20 28 5b 64  rsion 3.9.0] ([d
88c0: 61 74 65 6f 66 3a 33 2e 39 2e 30 5d 29 2e 0a 53  ateof:3.9.0])..S
88d0: 65 65 20 74 68 65 20 5b 49 6e 64 65 78 65 73 20  ee the [Indexes 
88e0: 4f 6e 20 45 78 70 72 65 73 73 69 6f 6e 73 5d 20  On Expressions] 
88f0: 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20 61 64 64  document for add
8900: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
8910: 69 6f 6e 0a 61 62 6f 75 74 20 75 73 69 6e 67 20  ion.about using 
8920: 67 65 6e 65 72 61 6c 20 65 78 70 72 65 73 73 69  general expressi
8930: 6f 6e 73 20 69 6e 20 43 52 45 41 54 45 20 49 4e  ons in CREATE IN
8940: 44 45 58 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  DEX statements..
8950: 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 6e 6f  .<p>There are no
8960: 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74   arbitrary limit
8970: 73 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  s on the number 
8980: 6f 66 20 69 6e 64 69 63 65 73 20 74 68 61 74 20  of indices that 
8990: 63 61 6e 20 62 65 0a 61 74 74 61 63 68 65 64 20  can be.attached 
89a0: 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
89b0: 65 2e 20 20 5e 28 54 68 65 20 6e 75 6d 62 65 72  e.  ^(The number
89c0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61   of columns in a
89d0: 6e 20 69 6e 64 65 78 20 69 73 20 0a 6c 69 6d 69  n index is .limi
89e0: 74 65 64 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ted to the value
89f0: 20 73 65 74 20 62 79 0a 5b 73 71 6c 69 74 65 33   set by.[sqlite3
8a00: 5f 6c 69 6d 69 74 5d 28 5b 53 51 4c 49 54 45 5f  _limit]([SQLITE_
8a10: 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 5d 2c 2e 2e  LIMIT_COLUMN],..
8a20: 2e 29 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  .).)^</p>..<tcl>
8a30: 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e 69 71  hd_fragment uniq
8a40: 75 65 69 64 78 20 7b 75 6e 69 71 75 65 20 69 6e  ueidx {unique in
8a50: 64 65 78 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 49  dex}</tcl>.<p>^I
8a60: 66 20 74 68 65 20 55 4e 49 51 55 45 20 6b 65 79  f the UNIQUE key
8a70: 77 6f 72 64 20 61 70 70 65 61 72 73 20 62 65 74  word appears bet
8a80: 77 65 65 6e 20 43 52 45 41 54 45 20 61 6e 64 20  ween CREATE and 
8a90: 49 4e 44 45 58 20 74 68 65 6e 20 64 75 70 6c 69  INDEX then dupli
8aa0: 63 61 74 65 0a 69 6e 64 65 78 20 65 6e 74 72 69  cate.index entri
8ab0: 65 73 20 61 72 65 20 6e 6f 74 20 61 6c 6c 6f 77  es are not allow
8ac0: 65 64 2e 20 20 5e 41 6e 79 20 61 74 74 65 6d 70  ed.  ^Any attemp
8ad0: 74 20 74 6f 20 69 6e 73 65 72 74 20 61 20 64 75  t to insert a du
8ae0: 70 6c 69 63 61 74 65 20 65 6e 74 72 79 0a 77 69  plicate entry.wi
8af0: 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  ll result in an 
8b00: 65 72 72 6f 72 2e 20 20 5e 46 6f 72 20 74 68 65  error.  ^For the
8b10: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 75 6e 69   purposes of uni
8b20: 71 75 65 20 69 6e 64 69 63 65 73 2c 20 61 6c 6c  que indices, all
8b30: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 61 72 65   NULL values.are
8b40: 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 66 66   considered diff
8b50: 65 72 65 6e 74 20 66 72 6f 6d 20 61 6c 6c 20 6f  erent from all o
8b60: 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65 73  ther NULL values
8b70: 20 61 6e 64 20 61 72 65 20 74 68 75 73 20 75 6e   and are thus un
8b80: 69 71 75 65 2e 0a 54 68 69 73 20 69 73 20 6f 6e  ique..This is on
8b90: 65 20 6f 66 20 74 68 65 20 74 77 6f 20 70 6f 73  e of the two pos
8ba0: 73 69 62 6c 65 20 69 6e 74 65 72 70 72 65 74 61  sible interpreta
8bb0: 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 51 4c  tions of the SQL
8bc0: 2d 39 32 20 73 74 61 6e 64 61 72 64 0a 28 74 68  -92 standard.(th
8bd0: 65 20 6c 61 6e 67 75 61 67 65 20 69 6e 20 74 68  e language in th
8be0: 65 20 73 74 61 6e 64 61 72 64 20 69 73 20 61 6d  e standard is am
8bf0: 62 69 67 75 6f 75 73 29 20 61 6e 64 20 69 73 20  biguous) and is 
8c00: 74 68 65 20 69 6e 74 65 72 70 72 65 74 61 74 69  the interpretati
8c10: 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 50  on.followed by P
8c20: 6f 73 74 67 72 65 53 51 4c 2c 20 4d 79 53 51 4c  ostgreSQL, MySQL
8c30: 2c 20 46 69 72 65 62 69 72 64 2c 20 61 6e 64 20  , Firebird, and 
8c40: 4f 72 61 63 6c 65 2e 20 20 49 6e 66 6f 72 6d 69  Oracle.  Informi
8c50: 78 20 61 6e 64 0a 4d 69 63 72 6f 73 6f 66 74 20  x and.Microsoft 
8c60: 53 51 4c 20 53 65 72 76 65 72 20 66 6f 6c 6c 6f  SQL Server follo
8c70: 77 20 74 68 65 20 6f 74 68 65 72 20 69 6e 74 65  w the other inte
8c80: 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
8c90: 65 20 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 0a  e standard.</p>.
8ca0: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f 70 74 69  .<p>^If the opti
8cb0: 6f 6e 61 6c 20 49 46 20 4e 4f 54 20 45 58 49 53  onal IF NOT EXIS
8cc0: 54 53 20 63 6c 61 75 73 65 20 69 73 20 70 72 65  TS clause is pre
8cd0: 73 65 6e 74 20 61 6e 64 20 61 6e 6f 74 68 65 72  sent and another
8ce0: 20 69 6e 64 65 78 0a 77 69 74 68 20 74 68 65 20   index.with the 
8cf0: 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65 61 64  same name alread
8d00: 79 20 65 78 69 73 74 73 2c 20 74 68 65 6e 20 74  y exists, then t
8d10: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 62 65 63 6f  his command beco
8d20: 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 3c 2f 70 3e  mes a no-op.</p>
8d30: 0a 0a 3c 70 3e 5e 49 6e 64 65 78 65 73 20 61 72  ..<p>^Indexes ar
8d40: 65 20 72 65 6d 6f 76 65 64 20 77 69 74 68 20 74  e removed with t
8d50: 68 65 20 5b 44 52 4f 50 20 49 4e 44 45 58 5d 20  he [DROP INDEX] 
8d60: 63 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 0a 3c  command.</p>...<
8d70: 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
8d80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8d90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8da0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8dc0: 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45  ###.Section {CRE
8dd0: 41 54 45 20 54 41 42 4c 45 7d 20 7b 63 72 65 61  ATE TABLE} {crea
8de0: 74 65 74 61 62 6c 65 7d 20 7b 7b 43 52 45 41 54  tetable} {{CREAT
8df0: 45 20 54 41 42 4c 45 7d 7d 0a 0a 52 65 63 75 72  E TABLE}}..Recur
8e00: 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
8e10: 6d 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73  m create-table-s
8e20: 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54  tmt.</tcl>..<p>T
8e30: 68 65 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  he "CREATE TABLE
8e40: 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65  " command is use
8e50: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  d to create a ne
8e60: 77 20 74 61 62 6c 65 20 69 6e 20 61 6e 20 53 51  w table in an SQ
8e70: 4c 69 74 65 20 0a 64 61 74 61 62 61 73 65 2e 20  Lite .database. 
8e80: 41 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  A CREATE TABLE c
8e90: 6f 6d 6d 61 6e 64 20 73 70 65 63 69 66 69 65 73  ommand specifies
8ea0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
8eb0: 74 74 72 69 62 75 74 65 73 20 6f 66 20 74 68 65  ttributes of the
8ec0: 0a 6e 65 77 20 74 61 62 6c 65 3a 0a 0a 3c 75 6c  .new table:..<ul
8ed0: 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 54 68 65 20 6e  >.  <li><p>The n
8ee0: 61 6d 65 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ame of the new t
8ef0: 61 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  able...  <li><p>
8f00: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 69 6e   The database in
8f10: 20 77 68 69 63 68 20 74 68 65 20 6e 65 77 20 74   which the new t
8f20: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e  able is created.
8f30: 20 54 61 62 6c 65 73 20 6d 61 79 20 62 65 20 0a   Tables may be .
8f40: 20 20 20 20 20 20 63 72 65 61 74 65 64 20 69 6e        created in
8f50: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
8f60: 73 65 2c 20 74 68 65 20 74 65 6d 70 20 64 61 74  se, the temp dat
8f70: 61 62 61 73 65 2c 20 6f 72 20 69 6e 20 61 6e 79  abase, or in any
8f80: 20 61 74 74 61 63 68 65 64 0a 20 20 20 20 20 20   attached.      
8f90: 64 61 74 61 62 61 73 65 2e 0a 0a 20 20 3c 6c 69  database...  <li
8fa0: 3e 3c 70 3e 20 54 68 65 20 6e 61 6d 65 20 6f 66  ><p> The name of
8fb0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
8fc0: 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c 6c  the table...  <l
8fd0: 69 3e 3c 70 3e 20 54 68 65 20 64 65 63 6c 61 72  i><p> The declar
8fe0: 65 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20  ed type of each 
8ff0: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74 61  column in the ta
9000: 62 6c 65 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 20  ble...  <li><p> 
9010: 41 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  A default value 
9020: 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 20 66 6f  or expression fo
9030: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  r each column in
9040: 20 74 68 65 20 74 61 62 6c 65 2e 0a 0a 20 20 3c   the table...  <
9050: 6c 69 3e 3c 70 3e 20 41 20 64 65 66 61 75 6c 74  li><p> A default
9060: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
9070: 6e 63 65 20 74 6f 20 75 73 65 20 77 69 74 68 20  nce to use with 
9080: 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 0a 20 20  each column...  
9090: 3c 6c 69 3e 3c 70 3e 20 4f 70 74 69 6f 6e 61 6c  <li><p> Optional
90a0: 6c 79 2c 20 61 20 50 52 49 4d 41 52 59 20 4b 45  ly, a PRIMARY KE
90b0: 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 2e  Y for the table.
90c0: 20 42 6f 74 68 20 73 69 6e 67 6c 65 20 63 6f 6c   Both single col
90d0: 75 6d 6e 20 61 6e 64 0a 20 20 20 20 20 20 20 63  umn and.       c
90e0: 6f 6d 70 6f 73 69 74 65 20 28 6d 75 6c 74 69 70  omposite (multip
90f0: 6c 65 20 63 6f 6c 75 6d 6e 29 20 70 72 69 6d 61  le column) prima
9100: 72 79 20 6b 65 79 73 20 61 72 65 20 73 75 70 70  ry keys are supp
9110: 6f 72 74 65 64 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  orted...  <li><p
9120: 3e 20 41 20 73 65 74 20 6f 66 20 53 51 4c 20 63  > A set of SQL c
9130: 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 65  onstraints for e
9140: 61 63 68 20 74 61 62 6c 65 2e 20 53 51 4c 69 74  ach table. SQLit
9150: 65 20 73 75 70 70 6f 72 74 73 20 55 4e 49 51 55  e supports UNIQU
9160: 45 2c 20 4e 4f 54 0a 20 20 20 20 20 20 20 4e 55  E, NOT.       NU
9170: 4c 4c 2c 20 43 48 45 43 4b 20 61 6e 64 20 46 4f  LL, CHECK and FO
9180: 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
9190: 61 69 6e 74 73 2e 0a 0a 20 20 3c 6c 69 3e 3c 70  aints...  <li><p
91a0: 3e 20 57 68 65 74 68 65 72 20 74 68 65 20 74 61  > Whether the ta
91b0: 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f 55  ble is a [WITHOU
91c0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a  T ROWID] table..
91d0: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 45 76 65 72 79 20  </ul>..<p>Every 
91e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
91f0: 74 65 6d 65 6e 74 20 6d 75 73 74 20 73 70 65 63  tement must spec
9200: 69 66 79 20 61 20 6e 61 6d 65 20 66 6f 72 20 74  ify a name for t
9210: 68 65 20 6e 65 77 20 74 61 62 6c 65 2e 0a 20 20  he new table..  
9220: 5e 28 54 61 62 6c 65 20 6e 61 6d 65 73 20 74 68  ^(Table names th
9230: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 73  at begin with "s
9240: 71 6c 69 74 65 5f 22 20 61 72 65 20 72 65 73 65  qlite_" are rese
9250: 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61  rved for interna
9260: 6c 20 75 73 65 2e 20 49 74 0a 20 20 69 73 20 61  l use. It.  is a
9270: 6e 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65 6d  n error to attem
9280: 70 74 20 74 6f 20 63 72 65 61 74 65 20 61 20 74  pt to create a t
9290: 61 62 6c 65 20 77 69 74 68 20 61 20 6e 61 6d 65  able with a name
92a0: 20 74 68 61 74 20 73 74 61 72 74 73 20 77 69 74   that starts wit
92b0: 68 0a 20 20 22 73 71 6c 69 74 65 5f 22 2e 29 5e  h.  "sqlite_".)^
92c0: 0a 0a 3c 70 3e 20 5e 49 66 20 61 20 3c 79 79 74  ..<p> ^If a <yyt
92d0: 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
92e0: 2f 79 79 74 65 72 6d 3e 20 69 73 20 73 70 65 63  /yyterm> is spec
92f0: 69 66 69 65 64 2c 20 69 74 20 6d 75 73 74 20 62  ified, it must b
9300: 65 20 65 69 74 68 65 72 20 22 6d 61 69 6e 22 2c  e either "main",
9310: 20 0a 20 20 22 74 65 6d 70 22 2c 20 6f 72 20 74   .  "temp", or t
9320: 68 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 5b 41  he name of an [A
9330: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 7c 61  TTACH DATABASE|a
9340: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
9350: 5d 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65  ]. ^In this case
9360: 0a 20 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  .  the new table
9370: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
9380: 68 65 20 6e 61 6d 65 64 20 64 61 74 61 62 61 73  he named databas
9390: 65 2e 20 5e 49 66 20 74 68 65 20 22 54 45 4d 50  e. ^If the "TEMP
93a0: 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22  " or "TEMPORARY"
93b0: 0a 20 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72  .  keyword occur
93c0: 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 22 43  s between the "C
93d0: 52 45 41 54 45 22 20 61 6e 64 20 22 54 41 42 4c  REATE" and "TABL
93e0: 45 22 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20  E" then the new 
93f0: 74 61 62 6c 65 20 69 73 0a 20 20 63 72 65 61 74  table is.  creat
9400: 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 20 64  ed in the temp d
9410: 61 74 61 62 61 73 65 2e 20 5e 49 74 20 69 73 20  atabase. ^It is 
9420: 61 6e 20 65 72 72 6f 72 20 74 6f 20 73 70 65 63  an error to spec
9430: 69 66 79 20 62 6f 74 68 20 61 20 0a 20 20 3c 79  ify both a .  <y
9440: 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d  yterm>schema-nam
9450: 65 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20 74  e</yyterm> and t
9460: 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f  he TEMP or TEMPO
9470: 52 41 52 59 20 6b 65 79 77 6f 72 64 2c 20 75 6e  RARY keyword, un
9480: 6c 65 73 73 20 74 68 65 0a 20 20 3c 79 79 74 65  less the.  <yyte
9490: 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f  rm>schema-name</
94a0: 79 79 74 65 72 6d 3e 20 69 73 20 22 74 65 6d 70  yyterm> is "temp
94b0: 22 2e 20 0a 20 20 5e 49 66 20 6e 6f 20 73 63 68  ". .  ^If no sch
94c0: 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70 65 63  ema name is spec
94d0: 69 66 69 65 64 20 61 6e 64 20 74 68 65 0a 20 20  ified and the.  
94e0: 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73 20  TEMP keyword is 
94f0: 6e 6f 74 20 70 72 65 73 65 6e 74 20 74 68 65 6e  not present then
9500: 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 72   the table is cr
9510: 65 61 74 65 64 20 69 6e 20 74 68 65 20 6d 61 69  eated in the mai
9520: 6e 0a 20 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c  n.  database...<
9530: 70 3e 0a 20 20 5e 49 74 20 69 73 20 75 73 75 61  p>.  ^It is usua
9540: 6c 6c 79 20 61 6e 20 65 72 72 6f 72 20 74 6f 20  lly an error to 
9550: 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65 61 74  attempt to creat
9560: 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
9570: 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61 74   a database that
9580: 0a 20 20 61 6c 72 65 61 64 79 20 63 6f 6e 74 61  .  already conta
9590: 69 6e 73 20 61 20 74 61 62 6c 65 2c 20 69 6e 64  ins a table, ind
95a0: 65 78 20 6f 72 20 76 69 65 77 20 6f 66 20 74 68  ex or view of th
95b0: 65 20 73 61 6d 65 20 6e 61 6d 65 2e 20 5e 48 6f  e same name. ^Ho
95c0: 77 65 76 65 72 2c 20 69 66 20 74 68 65 0a 20 20  wever, if the.  
95d0: 22 49 46 20 4e 4f 54 20 45 58 49 53 54 53 22 20  "IF NOT EXISTS" 
95e0: 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
95f0: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
9600: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
9610: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 0a 20 20  statement and.  
9620: 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  a table or view 
9630: 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  of the same name
9640: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c   already exists,
9650: 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c   the CREATE TABL
9660: 45 20 63 6f 6d 6d 61 6e 64 0a 20 20 73 69 6d 70  E command.  simp
9670: 6c 79 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74  ly has no effect
9680: 20 28 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 6d   (and no error m
9690: 65 73 73 61 67 65 20 69 73 20 72 65 74 75 72 6e  essage is return
96a0: 65 64 29 2e 20 5e 41 6e 20 65 72 72 6f 72 20 69  ed). ^An error i
96b0: 73 20 73 74 69 6c 6c 0a 20 20 72 65 74 75 72 6e  s still.  return
96c0: 65 64 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  ed if the table 
96d0: 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
96e0: 64 20 62 65 63 61 75 73 65 20 6f 66 20 61 6e 20  d because of an 
96f0: 65 78 69 73 74 69 6e 67 20 69 6e 64 65 78 2c 20  existing index, 
9700: 65 76 65 6e 20 0a 20 20 69 66 20 74 68 65 20 22  even .  if the "
9710: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 22 20 63  IF NOT EXISTS" c
9720: 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
9730: 65 64 2e 0a 0a 3c 70 3e 5e 49 74 20 69 73 20 6e  ed...<p>^It is n
9740: 6f 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 63  ot an error to c
9750: 72 65 61 74 65 20 61 20 74 61 62 6c 65 20 74 68  reate a table th
9760: 61 74 20 68 61 73 20 74 68 65 20 73 61 6d 65 20  at has the same 
9770: 6e 61 6d 65 20 61 73 20 61 6e 20 0a 20 20 65 78  name as an .  ex
9780: 69 73 74 69 6e 67 20 5b 43 52 45 41 54 45 20 54  isting [CREATE T
9790: 52 49 47 47 45 52 7c 74 72 69 67 67 65 72 5d 2e  RIGGER|trigger].
97a0: 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 61 72 65  ..<p>^Tables are
97b0: 20 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 74   removed using t
97c0: 68 65 20 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20  he [DROP TABLE] 
97d0: 73 74 61 74 65 6d 65 6e 74 2e 20 20 3c 2f 70 3e  statement.  </p>
97e0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
97f0: 6e 74 20 63 72 65 61 74 65 74 61 62 61 73 20 7b  nt createtabas {
9800: 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 7d  CREATE TABLE AS}
9810: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43 52 45 41 54  </tcl>.<h3>CREAT
9820: 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53 20 53  E TABLE ... AS S
9830: 45 4c 45 43 54 20 53 74 61 74 65 6d 65 6e 74 73  ELECT Statements
9840: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 22 43  </h3>..<p>^(A "C
9850: 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20  REATE TABLE ... 
9860: 41 53 20 53 45 4c 45 43 54 22 20 73 74 61 74 65  AS SELECT" state
9870: 6d 65 6e 74 20 63 72 65 61 74 65 73 20 61 6e 64  ment creates and
9880: 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64 61 74   populates a dat
9890: 61 62 61 73 65 0a 74 61 62 6c 65 20 62 61 73 65  abase.table base
98a0: 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  d on the results
98b0: 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
98c0: 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68 65 20  tement.)^ ^(The 
98d0: 74 61 62 6c 65 20 68 61 73 20 74 68 65 20 73 61  table has the sa
98e0: 6d 65 0a 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  me.number of col
98f0: 75 6d 6e 73 20 61 73 20 74 68 65 20 72 6f 77 73  umns as the rows
9900: 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
9910: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
9920: 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 0a 65  t. The name of.e
9930: 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68  ach column is th
9940: 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 61  e same as the na
9950: 6d 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  me of the corres
9960: 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69  ponding column i
9970: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 73 65 74  n the result.set
9980: 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 73   of the SELECT s
9990: 74 61 74 65 6d 65 6e 74 2e 29 5e 20 5e 28 54 68  tatement.)^ ^(Th
99a0: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20  e declared type 
99b0: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  of each column i
99c0: 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 62 79 20  s determined.by 
99d0: 74 68 65 20 5b 65 78 70 72 65 73 73 69 6f 6e 20  the [expression 
99e0: 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65  affinity] of the
99f0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65   corresponding e
9a00: 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
9a10: 20 72 65 73 75 6c 74 20 73 65 74 0a 6f 66 20 74   result set.of t
9a20: 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
9a30: 65 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ent, as follows:
9a40: 0a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 3c  .</p>..<center><
9a50: 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 3e 0a  table border=1>.
9a60: 20 20 3c 74 72 3e 3c 74 68 3e 45 78 70 72 65 73    <tr><th>Expres
9a70: 73 69 6f 6e 20 41 66 66 69 6e 69 74 79 20 20 20  sion Affinity   
9a80: 3c 74 68 3e 43 6f 6c 75 6d 6e 20 44 65 63 6c 61  <th>Column Decla
9a90: 72 65 64 20 54 79 70 65 0a 20 20 3c 74 72 3e 3c  red Type.  <tr><
9aa0: 74 64 3e 54 45 58 54 20 20 20 20 20 20 20 20 20  td>TEXT         
9ab0: 20 20 20 20 20 20 20 20 20 3c 74 64 3e 22 54 45           <td>"TE
9ac0: 58 54 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 4e 55  XT".  <tr><td>NU
9ad0: 4d 45 52 49 43 20 20 20 20 20 20 20 20 20 20 20  MERIC           
9ae0: 20 20 20 20 3c 74 64 3e 22 4e 55 4d 22 0a 20 20      <td>"NUM".  
9af0: 3c 74 72 3e 3c 74 64 3e 49 4e 54 45 47 45 52 20  <tr><td>INTEGER 
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 74                <t
9b10: 64 3e 22 49 4e 54 22 0a 20 20 3c 74 72 3e 3c 74  d>"INT".  <tr><t
9b20: 64 3e 52 45 41 4c 20 20 20 20 20 20 20 20 20 20  d>REAL          
9b30: 20 20 20 20 20 20 20 20 3c 74 64 3e 22 52 45 41          <td>"REA
9b40: 4c 22 0a 20 20 3c 74 72 3e 3c 74 64 3e 42 4c 4f  L".  <tr><td>BLO
9b50: 42 20 28 61 2e 6b 2e 61 20 22 4e 4f 4e 45 22 29  B (a.k.a "NONE")
9b60: 20 20 20 3c 74 64 3e 22 22 20 28 65 6d 70 74 79     <td>"" (empty
9b70: 20 73 74 72 69 6e 67 29 0a 3c 2f 74 61 62 6c 65   string).</table
9b80: 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70  ></center>)^..<p
9b90: 3e 5e 28 41 20 74 61 62 6c 65 20 63 72 65 61 74  >^(A table creat
9ba0: 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  ed using CREATE 
9bb0: 54 41 42 4c 45 20 41 53 20 68 61 73 20 6e 6f 20  TABLE AS has no 
9bc0: 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20  PRIMARY KEY and 
9bd0: 6e 6f 0a 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f  no.constraints o
9be0: 66 20 61 6e 79 20 6b 69 6e 64 2e 20 54 68 65 20  f any kind. The 
9bf0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
9c00: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20   each column is 
9c10: 4e 55 4c 4c 2e 20 54 68 65 20 64 65 66 61 75 6c  NULL. The defaul
9c20: 74 0a 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t.collation sequ
9c30: 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 63 6f  ence for each co
9c40: 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20  lumn of the new 
9c50: 74 61 62 6c 65 20 69 73 20 42 49 4e 41 52 59 2e  table is BINARY.
9c60: 29 5e 0a 0a 3c 70 3e 5e 54 61 62 6c 65 73 20 63  )^..<p>^Tables c
9c70: 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
9c80: 41 54 45 20 54 41 42 4c 45 20 41 53 20 61 72 65  ATE TABLE AS are
9c90: 20 69 6e 69 74 69 61 6c 6c 79 20 70 6f 70 75 6c   initially popul
9ca0: 61 74 65 64 20 77 69 74 68 20 74 68 65 0a 72 6f  ated with the.ro
9cb0: 77 73 20 6f 66 20 64 61 74 61 20 72 65 74 75 72  ws of data retur
9cc0: 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  ned by the SELEC
9cd0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 52 6f  T statement. ^Ro
9ce0: 77 73 20 61 72 65 20 61 73 73 69 67 6e 65 64 20  ws are assigned 
9cf0: 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 61 73 63  contiguously.asc
9d00: 65 6e 64 69 6e 67 20 5b 72 6f 77 69 64 5d 20 76  ending [rowid] v
9d10: 61 6c 75 65 73 2c 20 73 74 61 72 74 69 6e 67 20  alues, starting 
9d20: 77 69 74 68 20 31 2c 20 69 6e 20 74 68 65 20 5b  with 1, in the [
9d30: 6f 72 64 65 72 20 62 79 7c 6f 72 64 65 72 5d 20  order by|order] 
9d40: 74 68 61 74 20 74 68 65 79 0a 61 72 65 20 72 65  that they.are re
9d50: 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45  turned by the SE
9d60: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
9d70: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9d80: 74 20 7b 74 61 62 6c 65 63 6f 6c 64 65 66 7d 20  t {tablecoldef} 
9d90: 7b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69  {column definiti
9da0: 6f 6e 7d 20 7b 63 6f 6c 75 6d 6e 20 64 65 66 69  on} {column defi
9db0: 6e 69 74 69 6f 6e 73 7d 3c 2f 74 63 6c 3e 0a 3c  nitions}</tcl>.<
9dc0: 68 33 3e 43 6f 6c 75 6d 6e 20 44 65 66 69 6e 69  h3>Column Defini
9dd0: 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55  tions</h3>..<p>U
9de0: 6e 6c 65 73 73 20 69 74 20 69 73 20 61 20 43 52  nless it is a CR
9df0: 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41  EATE TABLE ... A
9e00: 53 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  S SELECT stateme
9e10: 6e 74 2c 20 61 20 43 52 45 41 54 45 20 54 41 42  nt, a CREATE TAB
9e20: 4c 45 20 69 6e 63 6c 75 64 65 73 0a 6f 6e 65 20  LE includes.one 
9e30: 6f 72 20 6d 6f 72 65 20 5b 63 6f 6c 75 6d 6e 2d  or more [column-
9e40: 64 65 66 7c 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  def|column defin
9e50: 69 74 69 6f 6e 73 5d 2c 20 6f 70 74 69 6f 6e 61  itions], optiona
9e60: 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  lly followed by 
9e70: 61 20 6c 69 73 74 20 6f 66 0a 5b 74 61 62 6c 65  a list of.[table
9e80: 2d 63 6f 6e 73 74 72 61 69 6e 74 7c 74 61 62 6c  -constraint|tabl
9e90: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 5d 2e 20  e constraints]. 
9ea0: 20 45 61 63 68 20 63 6f 6c 75 6d 6e 20 64 65 66   Each column def
9eb0: 69 6e 69 74 69 6f 6e 20 63 6f 6e 73 69 73 74 73  inition consists
9ec0: 20 6f 66 20 74 68 65 0a 6e 61 6d 65 20 6f 66 20   of the.name of 
9ed0: 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 6f 70 74 69  the column, opti
9ee0: 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65 64 20  onally followed 
9ef0: 62 79 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  by the declared 
9f00: 74 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  type of the colu
9f10: 6d 6e 2c 0a 74 68 65 6e 20 6f 6e 65 20 6f 72 20  mn,.then one or 
9f20: 6d 6f 72 65 20 6f 70 74 69 6f 6e 61 6c 20 5b 63  more optional [c
9f30: 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74  olumn-constraint
9f40: 7c 63 6f 6c 75 6d 6e 20 63 6f 6e 73 74 72 61 69  |column constrai
9f50: 6e 74 73 5d 2e 20 49 6e 63 6c 75 64 65 64 20 69  nts]. Included i
9f60: 6e 0a 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e  n.the definition
9f70: 20 6f 66 20 22 63 6f 6c 75 6d 6e 20 63 6f 6e 73   of "column cons
9f80: 74 72 61 69 6e 74 73 22 20 66 6f 72 20 74 68 65  traints" for the
9f90: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65   purposes of the
9fa0: 20 70 72 65 76 69 6f 75 73 0a 73 74 61 74 65 6d   previous.statem
9fb0: 65 6e 74 20 61 72 65 20 74 68 65 20 43 4f 4c 4c  ent are the COLL
9fc0: 41 54 45 20 61 6e 64 20 44 45 46 41 55 4c 54 20  ATE and DEFAULT 
9fd0: 63 6c 61 75 73 65 73 2c 20 65 76 65 6e 20 74 68  clauses, even th
9fe0: 6f 75 67 68 20 74 68 65 73 65 20 61 72 65 20 6e  ough these are n
9ff0: 6f 74 20 72 65 61 6c 6c 79 0a 63 6f 6e 73 74 72  ot really.constr
a000: 61 69 6e 74 73 20 69 6e 20 74 68 65 20 73 65 6e  aints in the sen
a010: 73 65 20 74 68 61 74 20 74 68 65 79 20 64 6f 20  se that they do 
a020: 6e 6f 74 20 72 65 73 74 72 69 63 74 20 74 68 65  not restrict the
a030: 20 64 61 74 61 20 74 68 61 74 20 74 68 65 20 74   data that the t
a040: 61 62 6c 65 20 6d 61 79 0a 63 6f 6e 74 61 69 6e  able may.contain
a050: 2e 20 54 68 65 20 6f 74 68 65 72 20 63 6f 6e 73  . The other cons
a060: 74 72 61 69 6e 74 73 20 2d 20 4e 4f 54 20 4e 55  traints - NOT NU
a070: 4c 4c 2c 20 43 48 45 43 4b 2c 20 55 4e 49 51 55  LL, CHECK, UNIQU
a080: 45 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  E, PRIMARY KEY a
a090: 6e 64 0a 46 4f 52 45 49 47 4e 20 4b 45 59 20 63  nd.FOREIGN KEY c
a0a0: 6f 6e 73 74 72 61 69 6e 74 73 20 2d 20 69 6d 70  onstraints - imp
a0b0: 6f 73 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ose restrictions
a0c0: 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 73 20 64   on the tables d
a0d0: 61 74 61 2c 20 61 6e 64 20 61 72 65 20 61 72 65  ata, and are are
a0e0: 0a 64 65 73 63 72 69 62 65 64 20 75 6e 64 65 72  .described under
a0f0: 20 5b 63 6f 6e 73 74 72 61 69 6e 74 73 7c 53 51   [constraints|SQ
a100: 4c 20 44 61 74 61 20 43 6f 6e 73 74 72 61 69 6e  L Data Constrain
a110: 74 73 5d 20 62 65 6c 6f 77 2e 0a 0a 3c 70 3e 5e  ts] below...<p>^
a120: 55 6e 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c 20  Unlike most SQL 
a130: 64 61 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74  databases, SQLit
a140: 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 73 74 72  e does not restr
a150: 69 63 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ict the type of 
a160: 64 61 74 61 20 74 68 61 74 0a 6d 61 79 20 62 65  data that.may be
a170: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61   inserted into a
a180: 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f 6e   column based on
a190: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64 65 63   the columns dec
a1a0: 6c 61 72 65 64 20 74 79 70 65 2e 20 49 6e 73 74  lared type. Inst
a1b0: 65 61 64 2c 0a 53 51 4c 69 74 65 20 75 73 65 73  ead,.SQLite uses
a1c0: 20 5b 64 79 6e 61 6d 69 63 20 74 79 70 69 6e 67   [dynamic typing
a1d0: 5d 2e 20 5e 54 68 65 20 64 65 63 6c 61 72 65 64  ]. ^The declared
a1e0: 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d   type of a colum
a1f0: 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 64 65 74  n is used to.det
a200: 65 72 6d 69 6e 65 20 74 68 65 20 5b 61 66 66 69  ermine the [affi
a210: 6e 69 74 79 5d 20 6f 66 20 74 68 65 20 63 6f 6c  nity] of the col
a220: 75 6d 6e 20 6f 6e 6c 79 2e 0a 0a 3c 74 63 6c 3e  umn only...<tcl>
a230: 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 66 6c 74  hd_fragment dflt
a240: 76 61 6c 20 7b 64 65 66 61 75 6c 74 20 63 6f 6c  val {default col
a250: 75 6d 6e 20 76 61 6c 75 65 7d 20 7b 64 65 66 61  umn value} {defa
a260: 75 6c 74 20 76 61 6c 75 65 7d 3c 2f 74 63 6c 3e  ult value}</tcl>
a270: 0a 3c 70 3e 54 68 65 20 44 45 46 41 55 4c 54 20  .<p>The DEFAULT 
a280: 63 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73  clause specifies
a290: 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65   a default value
a2a0: 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68 65 20   to use for the 
a2b0: 63 6f 6c 75 6d 6e 20 69 66 20 6e 6f 0a 76 61 6c  column if no.val
a2c0: 75 65 20 69 73 20 65 78 70 6c 69 63 69 74 6c 79  ue is explicitly
a2d0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
a2e0: 20 75 73 65 72 20 77 68 65 6e 20 64 6f 69 6e 67   user when doing
a2f0: 20 61 6e 20 5b 49 4e 53 45 52 54 5d 2e 20 5e 49   an [INSERT]. ^I
a300: 66 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65 78  f there.is no ex
a310: 70 6c 69 63 69 74 20 44 45 46 41 55 4c 54 20 63  plicit DEFAULT c
a320: 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74  lause attached t
a330: 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  o a column defin
a340: 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ition, then the 
a350: 0a 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f  .default value o
a360: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20  f the column is 
a370: 4e 55 4c 4c 2e 20 5e 28 41 6e 20 65 78 70 6c 69  NULL. ^(An expli
a380: 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75  cit DEFAULT clau
a390: 73 65 20 6d 61 79 20 73 70 65 63 69 66 79 0a 74  se may specify.t
a3a0: 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 20  hat the default 
a3b0: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 61  value is NULL, a
a3c0: 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74   string constant
a3d0: 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e  , a blob constan
a3e0: 74 2c 20 61 0a 73 69 67 6e 65 64 2d 6e 75 6d 62  t, a.signed-numb
a3f0: 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73 74  er, or any const
a400: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 65  ant expression e
a410: 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e  nclosed in paren
a420: 74 68 65 73 65 73 2e 20 41 0a 64 65 66 61 75 6c  theses. A.defaul
a430: 74 20 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f  t value may also
a440: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73   be one of the s
a450: 70 65 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65  pecial case-inde
a460: 70 65 6e 64 65 6e 74 20 6b 65 79 77 6f 72 64 73  pendent keywords
a470: 0a 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43  .CURRENT_TIME, C
a480: 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43  URRENT_DATE or C
a490: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
a4a0: 2e 29 5e 20 5e 46 6f 72 20 74 68 65 20 70 75 72  .)^ ^For the pur
a4b0: 70 6f 73 65 73 20 6f 66 20 74 68 65 0a 44 45 46  poses of the.DEF
a4c0: 41 55 4c 54 20 63 6c 61 75 73 65 2c 20 61 6e 20  AULT clause, an 
a4d0: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f  expression is co
a4e0: 6e 73 69 64 65 72 65 64 20 63 6f 6e 73 74 61 6e  nsidered constan
a4f0: 74 20 69 66 20 69 74 0a 63 6f 6e 74 61 69 6e 73  t if it.contains
a500: 20 6e 6f 20 73 75 62 2d 71 75 65 72 69 65 73 2c   no sub-queries,
a510: 20 63 6f 6c 75 6d 6e 20 6f 72 20 74 61 62 6c 65   column or table
a520: 20 72 65 66 65 72 65 6e 63 65 73 2c 20 5b 62 6f   references, [bo
a530: 75 6e 64 20 70 61 72 61 6d 65 74 65 72 73 5d 2c  und parameters],
a540: 0a 6f 72 20 73 74 72 69 6e 67 20 6c 69 74 65 72  .or string liter
a550: 61 6c 73 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  als enclosed in 
a560: 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20 69 6e  double-quotes in
a570: 73 74 65 61 64 20 6f 66 20 73 69 6e 67 6c 65 2d  stead of single-
a580: 71 75 6f 74 65 73 2e 0a 0a 3c 70 3e 5e 28 45 61  quotes...<p>^(Ea
a590: 63 68 20 74 69 6d 65 20 61 20 72 6f 77 20 69 73  ch time a row is
a5a0: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
a5b0: 68 65 20 74 61 62 6c 65 20 62 79 20 61 6e 20 49  he table by an I
a5c0: 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
a5d0: 74 68 61 74 20 0a 64 6f 65 73 20 6e 6f 74 20 70  that .does not p
a5e0: 72 6f 76 69 64 65 20 65 78 70 6c 69 63 69 74 20  rovide explicit 
a5f0: 76 61 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 74  values for all t
a600: 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20 74 68 65  able columns the
a610: 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69   values stored i
a620: 6e 0a 74 68 65 20 6e 65 77 20 72 6f 77 20 61 72  n.the new row ar
a630: 65 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  e determined by 
a640: 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61  their default va
a650: 6c 75 65 73 29 5e 2c 20 61 73 20 66 6f 6c 6c 6f  lues)^, as follo
a660: 77 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  ws:..<ul>.  <li>
a670: 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75  <p>^If the defau
a680: 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  lt value of the 
a690: 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 6e 73  column is a cons
a6a0: 74 61 6e 74 20 4e 55 4c 4c 2c 20 74 65 78 74 2c  tant NULL, text,
a6b0: 20 62 6c 6f 62 20 6f 72 0a 20 20 20 20 73 69 67   blob or.    sig
a6c0: 6e 65 64 2d 6e 75 6d 62 65 72 20 76 61 6c 75 65  ned-number value
a6d0: 2c 20 74 68 65 6e 20 74 68 61 74 20 76 61 6c 75  , then that valu
a6e0: 65 20 69 73 20 75 73 65 64 20 64 69 72 65 63 74  e is used direct
a6f0: 6c 79 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ly in the new ro
a700: 77 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  w...  <li><p>^If
a710: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
a720: 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ue of a column i
a730: 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s an expression 
a740: 69 6e 20 70 61 72 65 6e 74 68 65 73 65 73 2c 20  in parentheses, 
a750: 74 68 65 6e 0a 20 20 20 20 74 68 65 20 65 78 70  then.    the exp
a760: 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
a770: 61 74 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61  ated once for ea
a780: 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64 20  ch row inserted 
a790: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 73 0a  and the results.
a7a0: 20 20 20 20 75 73 65 64 20 69 6e 20 74 68 65 20      used in the 
a7b0: 6e 65 77 20 72 6f 77 2e 0a 0a 20 20 3c 6c 69 3e  new row...  <li>
a7c0: 3c 70 3e 5e 49 66 20 74 68 65 20 64 65 66 61 75  <p>^If the defau
a7d0: 6c 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f  lt value of a co
a7e0: 6c 75 6d 6e 20 69 73 20 43 55 52 52 45 4e 54 5f  lumn is CURRENT_
a7f0: 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41  TIME, CURRENT_DA
a800: 54 45 20 6f 72 0a 20 20 20 20 43 55 52 52 45 4e  TE or.    CURREN
a810: 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 74 68 65  T_TIMESTAMP, the
a820: 6e 20 74 68 65 20 76 61 6c 75 65 20 75 73 65 64  n the value used
a830: 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 20   in the new row 
a840: 69 73 20 61 20 74 65 78 74 0a 20 20 20 20 72 65  is a text.    re
a850: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
a860: 74 68 65 20 63 75 72 72 65 6e 74 20 55 54 43 20  the current UTC 
a870: 64 61 74 65 20 61 6e 64 2f 6f 72 20 74 69 6d 65  date and/or time
a880: 2e 20 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 54  . ^For CURRENT_T
a890: 49 4d 45 2c 20 74 68 65 0a 20 20 20 20 66 6f 72  IME, the.    for
a8a0: 6d 61 74 20 6f 66 20 74 68 65 20 76 61 6c 75 65  mat of the value
a8b0: 20 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e 20   is "HH:MM:SS". 
a8c0: 5e 46 6f 72 20 43 55 52 52 45 4e 54 5f 44 41 54  ^For CURRENT_DAT
a8d0: 45 2c 20 22 59 59 59 59 2d 4d 4d 2d 44 44 22 2e  E, "YYYY-MM-DD".
a8e0: 20 5e 54 68 65 0a 20 20 20 20 66 6f 72 6d 61 74   ^The.    format
a8f0: 20 66 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d   for CURRENT_TIM
a900: 45 53 54 41 4d 50 20 69 73 20 22 59 59 59 59 2d  ESTAMP is "YYYY-
a910: 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53 22 2e  MM-DD HH:MM:SS".
a920: 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  .</ul>..<p>^The 
a930: 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 73  COLLATE clause s
a940: 70 65 63 69 66 69 65 73 20 74 68 65 20 6e 61 6d  pecifies the nam
a950: 65 20 6f 66 20 61 20 5b 63 6f 6c 6c 61 74 69 6e  e of a [collatin
a960: 67 20 73 65 71 75 65 6e 63 65 5d 20 74 6f 20 75  g sequence] to u
a970: 73 65 20 61 73 0a 74 68 65 20 64 65 66 61 75 6c  se as.the defaul
a980: 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
a990: 65 6e 63 65 20 66 6f 72 20 74 68 65 20 63 6f 6c  ence for the col
a9a0: 75 6d 6e 2e 20 5e 49 66 20 6e 6f 20 43 4f 4c 4c  umn. ^If no COLL
a9b0: 41 54 45 20 63 6c 61 75 73 65 20 69 73 0a 73 70  ATE clause is.sp
a9c0: 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 65 66  ecified, the def
a9d0: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ault collation s
a9e0: 65 71 75 65 6e 63 65 20 69 73 20 5b 42 49 4e 41  equence is [BINA
a9f0: 52 59 5d 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75  RY]...<p>^The nu
aa00: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
aa10: 69 6e 20 61 20 74 61 62 6c 65 20 69 73 20 6c 69  in a table is li
aa20: 6d 69 74 65 64 20 62 79 20 74 68 65 20 5b 53 51  mited by the [SQ
aa30: 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d  LITE_MAX_COLUMN]
aa40: 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 70 61  .compile-time pa
aa50: 72 61 6d 65 74 65 72 2e 20 5e 41 20 73 69 6e 67  rameter. ^A sing
aa60: 6c 65 20 72 6f 77 20 6f 66 20 61 20 74 61 62 6c  le row of a tabl
aa70: 65 20 63 61 6e 6e 6f 74 20 73 74 6f 72 65 20 6d  e cannot store m
aa80: 6f 72 65 20 74 68 61 6e 0a 5b 53 51 4c 49 54 45  ore than.[SQLITE
aa90: 5f 4d 41 58 5f 4c 45 4e 47 54 48 5d 20 62 79 74  _MAX_LENGTH] byt
aaa0: 65 73 20 6f 66 20 64 61 74 61 2e 20 5e 42 6f 74  es of data. ^Bot
aab0: 68 20 6f 66 20 74 68 65 73 65 20 6c 69 6d 69 74  h of these limit
aac0: 73 20 63 61 6e 20 62 65 20 6c 6f 77 65 72 65 64  s can be lowered
aad0: 20 61 74 0a 72 75 6e 74 69 6d 65 20 75 73 69 6e   at.runtime usin
aae0: 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c  g the [sqlite3_l
aaf0: 69 6d 69 74 28 29 5d 20 43 2f 43 2b 2b 20 69 6e  imit()] C/C++ in
ab00: 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 74  terface.</p>..<t
ab10: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b  cl>hd_fragment {
ab20: 63 6f 6e 73 74 72 61 69 6e 74 73 7d 20 7b 63 6f  constraints} {co
ab30: 6e 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e  nstraints}</tcl>
ab40: 0a 3c 68 33 3e 53 51 4c 20 44 61 74 61 20 43 6f  .<h3>SQL Data Co
ab50: 6e 73 74 72 61 69 6e 74 73 3c 2f 68 33 3e 0a 0a  nstraints</h3>..
ab60: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
ab70: 20 70 72 69 6d 6b 65 79 63 6f 6e 73 74 20 7b 50   primkeyconst {P
ab80: 52 49 4d 41 52 59 20 4b 45 59 7d 20 7b 50 52 49  RIMARY KEY} {PRI
ab90: 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
aba0: 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 45  int}</tcl>.<p>^E
abb0: 61 63 68 20 74 61 62 6c 65 20 69 6e 20 53 51 4c  ach table in SQL
abc0: 69 74 65 20 6d 61 79 20 68 61 76 65 20 61 74 20  ite may have at 
abd0: 6d 6f 73 74 20 6f 6e 65 20 3c 62 3e 50 52 49 4d  most one <b>PRIM
abe0: 41 52 59 20 4b 45 59 3c 2f 62 3e 2e 20 5e 49 66  ARY KEY</b>. ^If
abf0: 20 74 68 65 0a 20 20 6b 65 79 77 6f 72 64 73 20   the.  keywords 
ac00: 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72 65 20  PRIMARY KEY are 
ac10: 61 64 64 65 64 20 74 6f 20 61 20 63 6f 6c 75 6d  added to a colum
ac20: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c 20 74 68  n definition, th
ac30: 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  en the primary k
ac40: 65 79 0a 20 20 66 6f 72 20 74 68 65 20 74 61 62  ey.  for the tab
ac50: 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  le consists of t
ac60: 68 61 74 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  hat single colum
ac70: 6e 2e 20 5e 4f 72 2c 20 69 66 20 61 20 50 52 49  n. ^Or, if a PRI
ac80: 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20  MARY KEY clause 
ac90: 0a 20 20 69 73 20 73 70 65 63 69 66 69 65 64 20  .  is specified 
aca0: 61 73 20 61 20 5b 74 61 62 6c 65 2d 63 6f 6e 73  as a [table-cons
acb0: 74 72 61 69 6e 74 5d 2c 20 74 68 65 6e 20 74 68  traint], then th
acc0: 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 66  e primary key of
acd0: 20 74 68 65 20 74 61 62 6c 65 0a 20 20 63 6f 6e   the table.  con
ace0: 73 69 73 74 73 20 6f 66 20 74 68 65 20 6c 69 73  sists of the lis
acf0: 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 70 65  t of columns spe
ad00: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f  cified as part o
ad10: 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  f the PRIMARY KE
ad20: 59 20 63 6c 61 75 73 65 2e 0a 20 20 5e 54 68 65  Y clause..  ^The
ad30: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61   PRIMARY KEY cla
ad40: 75 73 65 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e  use must contain
ad50: 20 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 6e 61 6d   only column nam
ad60: 65 73 20 26 6d 64 61 73 68 3b 20 74 68 65 20 75  es &mdash; the u
ad70: 73 65 20 6f 66 20 0a 20 20 65 78 70 72 65 73 73  se of .  express
ad80: 69 6f 6e 73 20 69 6e 20 61 6e 20 5b 69 6e 64 65  ions in an [inde
ad90: 78 65 64 2d 63 6f 6c 75 6d 6e 5d 20 6f 66 20 61  xed-column] of a
ada0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
adb0: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a 20  not supported.. 
adc0: 20 5e 41 6e 20 65 72 72 6f 72 20 69 73 20 72 61   ^An error is ra
add0: 69 73 65 64 20 69 66 20 6d 6f 72 65 20 74 68 61  ised if more tha
ade0: 6e 20 6f 6e 65 20 50 52 49 4d 41 52 59 20 4b 45  n one PRIMARY KE
adf0: 59 20 63 6c 61 75 73 65 20 61 70 70 65 61 72 73  Y clause appears
ae00: 20 69 6e 20 61 0a 20 20 43 52 45 41 54 45 20 54   in a.  CREATE T
ae10: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  ABLE statement. 
ae20: 20 5e 54 68 65 20 50 52 49 4d 41 52 59 20 4b 45   ^The PRIMARY KE
ae30: 59 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 66 6f  Y is optional fo
ae40: 72 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  r ordinary table
ae50: 73 0a 20 20 62 75 74 20 69 73 20 72 65 71 75 69  s.  but is requi
ae60: 72 65 64 20 66 6f 72 20 5b 57 49 54 48 4f 55 54  red for [WITHOUT
ae70: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 2e 0a   ROWID] tables..
ae80: 0a 3c 70 3e 49 66 20 61 20 74 61 62 6c 65 20 68  .<p>If a table h
ae90: 61 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  as a single colu
aea0: 6d 6e 20 70 72 69 6d 61 72 79 20 6b 65 79 20 61  mn primary key a
aeb0: 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  nd the declared 
aec0: 74 79 70 65 20 6f 66 20 74 68 61 74 0a 20 20 63  type of that.  c
aed0: 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45  olumn is "INTEGE
aee0: 52 22 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  R" and the table
aef0: 20 69 73 20 6e 6f 74 20 61 20 5b 57 49 54 48 4f   is not a [WITHO
af00: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c  UT ROWID] table,
af10: 0a 20 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75  .  then the colu
af20: 6d 6e 20 69 73 20 6b 6e 6f 77 6e 20 61 73 20 61  mn is known as a
af30: 6e 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n [INTEGER PRIMA
af40: 52 59 20 4b 45 59 5d 2e 0a 20 20 53 65 65 20 5b  RY KEY]..  See [
af50: 72 6f 77 69 64 7c 62 65 6c 6f 77 5d 20 66 6f 72  rowid|below] for
af60: 20 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f   a description o
af70: 66 20 74 68 65 20 73 70 65 63 69 61 6c 20 70 72  f the special pr
af80: 6f 70 65 72 74 69 65 73 20 61 6e 64 20 62 65 68  operties and beh
af90: 61 76 69 6f 72 73 0a 20 20 61 73 73 6f 63 69 61  aviors.  associa
afa0: 74 65 64 20 77 69 74 68 20 61 6e 20 5b 49 4e 54  ted with an [INT
afb0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
afc0: 5d 2e 0a 0a 3c 70 3e 5e 45 61 63 68 20 72 6f 77  ]...<p>^Each row
afd0: 20 69 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68   in a table with
afe0: 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6d   a primary key m
aff0: 75 73 74 20 68 61 76 65 20 61 20 75 6e 69 71 75  ust have a uniqu
b000: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 0a 20 20  e combination.  
b010: 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 69 74 73  of values in its
b020: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
b030: 75 6d 6e 73 2e 20 5e 46 6f 72 20 74 68 65 20 70  umns. ^For the p
b040: 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72  urposes of deter
b050: 6d 69 6e 69 6e 67 0a 20 20 74 68 65 20 75 6e 69  mining.  the uni
b060: 71 75 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61  queness of prima
b070: 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e  ry key values, N
b080: 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
b090: 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e  onsidered distin
b0a0: 63 74 20 66 72 6f 6d 0a 20 20 61 6c 6c 20 6f 74  ct from.  all ot
b0b0: 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c  her values, incl
b0c0: 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c  uding other NULL
b0d0: 73 2e 20 5e 49 66 20 61 6e 20 5b 49 4e 53 45 52  s. ^If an [INSER
b0e0: 54 5d 20 6f 72 20 5b 55 50 44 41 54 45 5d 0a 20  T] or [UPDATE]. 
b0f0: 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
b100: 70 74 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  pts to modify th
b110: 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20  e table content 
b120: 73 6f 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d  so that two or m
b130: 6f 72 65 20 72 6f 77 73 0a 20 20 68 61 76 65 20  ore rows.  have 
b140: 69 64 65 6e 74 69 63 61 6c 20 70 72 69 6d 61 72  identical primar
b150: 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 74 68  y key values, th
b160: 61 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61 69  at is a constrai
b170: 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 0a 3c  nt violation...<
b180: 70 3e 20 41 63 63 6f 72 64 69 6e 67 20 74 6f 20  p> According to 
b190: 74 68 65 20 53 51 4c 20 73 74 61 6e 64 61 72 64  the SQL standard
b1a0: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 73 68  , PRIMARY KEY sh
b1b0: 6f 75 6c 64 20 61 6c 77 61 79 73 20 69 6d 70 6c  ould always impl
b1c0: 79 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 20 20 55 6e  y NOT NULL..  Un
b1d0: 66 6f 72 74 75 6e 61 74 65 6c 79 2c 20 64 75 65  fortunately, due
b1e0: 20 74 6f 20 61 20 62 75 67 20 69 6e 20 73 6f 6d   to a bug in som
b1f0: 65 20 65 61 72 6c 79 20 76 65 72 73 69 6f 6e 73  e early versions
b200: 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 74 68  , this is not th
b210: 65 0a 20 20 63 61 73 65 20 69 6e 20 53 51 4c 69  e.  case in SQLi
b220: 74 65 2e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20  te. ^Unless the 
b230: 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 5b 49 4e  column is an [IN
b240: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
b250: 59 5d 20 6f 72 0a 20 20 74 68 65 20 74 61 62 6c  Y] or.  the tabl
b260: 65 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20  e is a [WITHOUT 
b270: 52 4f 57 49 44 5d 20 74 61 62 6c 65 20 6f 72 20  ROWID] table or 
b280: 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 64 65  the column is de
b290: 63 6c 61 72 65 64 20 4e 4f 54 20 4e 55 4c 4c 2c  clared NOT NULL,
b2a0: 0a 20 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73  .  SQLite allows
b2b0: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20   NULL values in 
b2c0: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  a PRIMARY KEY co
b2d0: 6c 75 6d 6e 2e 20 20 53 51 4c 69 74 65 20 63 6f  lumn.  SQLite co
b2e0: 75 6c 64 20 62 65 20 66 69 78 65 64 20 74 6f 0a  uld be fixed to.
b2f0: 20 20 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 65    conform to the
b300: 20 73 74 61 6e 64 61 72 64 2c 20 62 75 74 20 64   standard, but d
b310: 6f 69 6e 67 20 73 6f 20 6d 69 67 68 74 20 62 72  oing so might br
b320: 65 61 6b 20 6c 65 67 61 63 79 20 61 70 70 6c 69  eak legacy appli
b330: 63 61 74 69 6f 6e 73 2e 0a 20 20 48 65 6e 63 65  cations..  Hence
b340: 2c 20 69 74 20 68 61 73 20 62 65 65 6e 20 64 65  , it has been de
b350: 63 69 64 65 64 20 74 6f 20 6d 65 72 65 6c 79 20  cided to merely 
b360: 64 6f 63 75 6d 65 6e 74 20 74 68 65 20 66 61 63  document the fac
b370: 74 20 74 68 61 74 20 53 51 4c 69 74 65 0a 20 20  t that SQLite.  
b380: 61 6c 6c 6f 77 69 6e 67 20 4e 55 4c 4c 73 20 69  allowing NULLs i
b390: 6e 20 6d 6f 73 74 20 50 52 49 4d 41 52 59 20 4b  n most PRIMARY K
b3a0: 45 59 20 63 6f 6c 75 6d 6e 73 2e 0a 0a 3c 74 63  EY columns...<tc
b3b0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 6e  l>hd_fragment un
b3c0: 69 71 75 65 63 6f 6e 73 74 20 7b 55 4e 49 51 55  iqueconst {UNIQU
b3d0: 45 7d 20 7b 75 6e 69 71 75 65 20 63 6f 6e 73 74  E} {unique const
b3e0: 72 61 69 6e 74 7d 20 7b 55 4e 49 51 55 45 20 63  raint} {UNIQUE c
b3f0: 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63 6c 3e  onstraint}</tcl>
b400: 0a 3c 70 3e 5e 41 20 3c 62 3e 55 4e 49 51 55 45  .<p>^A <b>UNIQUE
b410: 3c 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20  </b> constraint 
b420: 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 61 20  is similar to a 
b430: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73  PRIMARY KEY cons
b440: 74 72 61 69 6e 74 2c 20 65 78 63 65 70 74 0a 20  traint, except. 
b450: 20 74 68 61 74 20 61 20 73 69 6e 67 6c 65 20 74   that a single t
b460: 61 62 6c 65 20 6d 61 79 20 68 61 76 65 20 61 6e  able may have an
b470: 79 20 6e 75 6d 62 65 72 20 6f 66 20 55 4e 49 51  y number of UNIQ
b480: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  UE constraints. 
b490: 5e 46 6f 72 20 65 61 63 68 0a 20 20 55 4e 49 51  ^For each.  UNIQ
b4a0: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 6e  UE constraint on
b4b0: 20 74 68 65 20 74 61 62 6c 65 2c 20 65 61 63 68   the table, each
b4c0: 20 72 6f 77 20 6d 75 73 74 20 63 6f 6e 74 61 69   row must contai
b4d0: 6e 20 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69  n a unique combi
b4e0: 6e 61 74 69 6f 6e 0a 20 20 6f 66 20 76 61 6c 75  nation.  of valu
b4f0: 65 73 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  es in the column
b500: 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
b510: 74 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  the UNIQUE const
b520: 72 61 69 6e 74 2e 20 0a 20 20 5e 46 6f 72 20 74  raint. .  ^For t
b530: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 55  he purposes of U
b540: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
b550: 73 2c 20 4e 55 4c 4c 20 76 61 6c 75 65 73 0a 20  s, NULL values. 
b560: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
b570: 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 61 6c  distinct from al
b580: 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20  l other values, 
b590: 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20  including other 
b5a0: 4e 55 4c 4c 73 2e 0a 20 20 5e 41 73 20 77 69 74  NULLs..  ^As wit
b5b0: 68 20 50 52 49 4d 41 52 59 20 4b 45 59 73 2c 20  h PRIMARY KEYs, 
b5c0: 61 20 55 4e 49 51 55 45 20 5b 74 61 62 6c 65 2d  a UNIQUE [table-
b5d0: 63 6f 6e 73 74 72 61 69 6e 74 5d 20 63 6c 61 75  constraint] clau
b5e0: 73 65 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 0a  se must contain.
b5f0: 20 20 6f 6e 6c 79 20 63 6f 6c 75 6d 6e 20 6e 61    only column na
b600: 6d 65 73 20 26 6d 64 61 73 68 3b 20 74 68 65 20  mes &mdash; the 
b610: 75 73 65 20 6f 66 20 0a 20 20 65 78 70 72 65 73  use of .  expres
b620: 73 69 6f 6e 73 20 69 6e 20 61 6e 20 5b 69 6e 64  sions in an [ind
b630: 65 78 65 64 2d 63 6f 6c 75 6d 6e 5d 20 6f 66 20  exed-column] of 
b640: 61 20 55 4e 49 51 55 45 20 5b 74 61 62 6c 65 2d  a UNIQUE [table-
b650: 63 6f 6e 73 74 72 61 69 6e 74 5d 0a 20 20 69 73  constraint].  is
b660: 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0a   not supported..
b670: 20 20 0a 0a 3c 70 3e 5e 49 6e 20 6d 6f 73 74 20    ..<p>^In most 
b680: 63 61 73 65 73 2c 20 55 4e 49 51 55 45 20 61 6e  cases, UNIQUE an
b690: 64 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 20 20  d PRIMARY KEY.  
b6a0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
b6b0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63  implemented by c
b6c0: 72 65 61 74 69 6e 67 20 61 20 75 6e 69 71 75 65  reating a unique
b6d0: 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61   index in the da
b6e0: 74 61 62 61 73 65 2e 0a 20 20 28 54 68 65 20 65  tabase..  (The e
b6f0: 78 63 65 70 74 69 6f 6e 73 20 61 72 65 20 5b 49  xceptions are [I
b700: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
b710: 45 59 5d 20 61 6e 64 20 50 52 49 4d 41 52 59 20  EY] and PRIMARY 
b720: 4b 45 59 73 20 6f 6e 20 0a 20 20 5b 57 49 54 48  KEYs on .  [WITH
b730: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
b740: 73 2e 29 0a 20 20 48 65 6e 63 65 2c 20 74 68 65  s.).  Hence, the
b750: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 68 65 6d   following schem
b760: 61 73 20 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79  as are logically
b770: 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 0a 20 20   equivalent:..  
b780: 3c 6f 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 43 52  <ol>.  <li><p>CR
b790: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
b7a0: 20 62 20 55 4e 49 51 55 45 29 3b 0a 20 20 3c 6c   b UNIQUE);.  <l
b7b0: 69 3e 3c 70 3e 43 52 45 41 54 45 20 54 41 42 4c  i><p>CREATE TABL
b7c0: 45 20 74 31 28 61 2c 20 62 20 50 52 49 4d 41 52  E t1(a, b PRIMAR
b7d0: 59 20 4b 45 59 29 3b 0a 20 20 3c 6c 69 3e 3c 70  Y KEY);.  <li><p
b7e0: 3e 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  >CREATE TABLE t1
b7f0: 28 61 2c 20 62 29 3b 3c 62 72 3e 0a 20 20 20 20  (a, b);<br>.    
b800: 20 20 20 20 20 43 52 45 41 54 45 20 55 4e 49 51       CREATE UNIQ
b810: 55 45 20 49 4e 44 45 58 20 74 31 62 20 4f 4e 20  UE INDEX t1b ON 
b820: 74 31 28 62 29 3b 0a 20 20 3c 2f 6f 6c 3e 0a 0a  t1(b);.  </ol>..
b830: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
b840: 20 7b 63 6b 63 6f 6e 73 74 7d 20 7b 43 48 45 43   {ckconst} {CHEC
b850: 4b 7d 20 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72  K} {CHECK constr
b860: 61 69 6e 74 7d 20 7b 43 48 45 43 4b 20 63 6f 6e  aint} {CHECK con
b870: 73 74 72 61 69 6e 74 73 7d 3c 2f 74 63 6c 3e 0a  straints}</tcl>.
b880: 3c 70 3e 5e 28 41 20 3c 62 3e 43 48 45 43 4b 3c  <p>^(A <b>CHECK<
b890: 2f 62 3e 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d  /b> constraint m
b8a0: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 20 74  ay be attached t
b8b0: 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  o a column defin
b8c0: 69 74 69 6f 6e 20 6f 72 0a 20 20 73 70 65 63 69  ition or.  speci
b8d0: 66 69 65 64 20 61 73 20 61 20 74 61 62 6c 65 20  fied as a table 
b8e0: 63 6f 6e 73 74 72 61 69 6e 74 2e 20 49 6e 20 70  constraint. In p
b8f0: 72 61 63 74 69 63 65 20 69 74 20 6d 61 6b 65 73  ractice it makes
b900: 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 2e 29   no difference.)
b910: 5e 20 5e 28 45 61 63 68 0a 20 20 74 69 6d 65 20  ^ ^(Each.  time 
b920: 61 20 6e 65 77 20 72 6f 77 20 69 73 20 69 6e 73  a new row is ins
b930: 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 74  erted into the t
b940: 61 62 6c 65 20 6f 72 20 61 6e 20 65 78 69 73 74  able or an exist
b950: 69 6e 67 20 72 6f 77 20 69 73 20 75 70 64 61 74  ing row is updat
b960: 65 64 2c 0a 20 20 74 68 65 20 65 78 70 72 65 73  ed,.  the expres
b970: 73 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  sion associated 
b980: 77 69 74 68 20 65 61 63 68 20 43 48 45 43 4b 20  with each CHECK 
b990: 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 65 76  constraint is ev
b9a0: 61 6c 75 61 74 65 64 20 61 6e 64 0a 20 20 63 61  aluated and.  ca
b9b0: 73 74 20 74 6f 20 61 20 4e 55 4d 45 52 49 43 20  st to a NUMERIC 
b9c0: 76 61 6c 75 65 20 69 6e 20 74 68 65 20 73 61 6d  value in the sam
b9d0: 65 20 77 61 79 20 61 73 20 61 20 5b 43 41 53 54  e way as a [CAST
b9e0: 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 49 66   expression]. If
b9f0: 20 74 68 65 20 0a 20 20 72 65 73 75 6c 74 20 69   the .  result i
ba00: 73 20 7a 65 72 6f 20 28 69 6e 74 65 67 65 72 20  s zero (integer 
ba10: 76 61 6c 75 65 20 30 20 6f 72 20 72 65 61 6c 20  value 0 or real 
ba20: 76 61 6c 75 65 20 30 2e 30 29 2c 20 74 68 65 6e  value 0.0), then
ba30: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20   a constraint.  
ba40: 76 69 6f 6c 61 74 69 6f 6e 20 68 61 73 20 6f 63  violation has oc
ba50: 63 75 72 72 65 64 2e 29 5e 20 5e 49 66 20 74 68  curred.)^ ^If th
ba60: 65 20 43 48 45 43 4b 20 65 78 70 72 65 73 73 69  e CHECK expressi
ba70: 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
ba80: 4e 55 4c 4c 2c 20 6f 72 0a 20 20 61 6e 79 20 6f  NULL, or.  any o
ba90: 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61  ther non-zero va
baa0: 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f 74 20 61  lue, it is not a
bab0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
bac0: 61 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20 65 78  ation..  ^The ex
bad0: 70 72 65 73 73 69 6f 6e 20 6f 66 20 61 20 43 48  pression of a CH
bae0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d  ECK constraint m
baf0: 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  ay not contain a
bb00: 20 73 75 62 71 75 65 72 79 2e 0a 0a 3c 74 63 6c   subquery...<tcl
bb10: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 6e 6f  >hd_fragment {no
bb20: 74 6e 75 6c 6c 63 6f 6e 73 74 7d 20 7b 4e 4f 54  tnullconst} {NOT
bb30: 20 4e 55 4c 4c 7d 20 7b 4e 4f 54 20 4e 55 4c 4c   NULL} {NOT NULL
bb40: 20 63 6f 6e 73 74 72 61 69 6e 74 7d 3c 2f 74 63   constraint}</tc
bb50: 6c 3e 0a 3c 70 3e 5e 41 20 3c 62 3e 4e 4f 54 20  l>.<p>^A <b>NOT 
bb60: 4e 55 4c 4c 3c 2f 62 3e 20 63 6f 6e 73 74 72 61  NULL</b> constra
bb70: 69 6e 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20  int may only be 
bb80: 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 63 6f  attached to a co
bb90: 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 2c  lumn definition,
bba0: 0a 20 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  .  not specified
bbb0: 20 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 73   as a table cons
bbc0: 74 72 61 69 6e 74 2e 20 20 4e 6f 74 20 73 75 72  traint.  Not sur
bbd0: 70 72 69 73 69 6e 67 6c 79 2c 20 5e 28 61 20 4e  prisingly, ^(a N
bbe0: 4f 54 20 4e 55 4c 4c 0a 20 20 63 6f 6e 73 74 72  OT NULL.  constr
bbf0: 61 69 6e 74 20 64 69 63 74 61 74 65 73 20 74 68  aint dictates th
bc00: 61 74 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  at the associate
bc10: 64 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74  d column may not
bc20: 20 63 6f 6e 74 61 69 6e 20 61 20 4e 55 4c 4c 20   contain a NULL 
bc30: 76 61 6c 75 65 2e 0a 20 20 41 74 74 65 6d 70 74  value..  Attempt
bc40: 69 6e 67 20 74 6f 20 73 65 74 20 74 68 65 20 63  ing to set the c
bc50: 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20 4e  olumn value to N
bc60: 55 4c 4c 20 77 68 65 6e 20 69 6e 73 65 72 74 69  ULL when inserti
bc70: 6e 67 20 61 20 6e 65 77 20 72 6f 77 20 6f 72 0a  ng a new row or.
bc80: 20 20 75 70 64 61 74 69 6e 67 20 61 6e 20 65 78    updating an ex
bc90: 69 73 74 69 6e 67 20 6f 6e 65 20 63 61 75 73 65  isting one cause
bca0: 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  s a constraint v
bcb0: 69 6f 6c 61 74 69 6f 6e 2e 29 5e 0a 0a 3c 70 3e  iolation.)^..<p>
bcc0: 45 78 61 63 74 6c 79 20 68 6f 77 20 61 20 63 6f  Exactly how a co
bcd0: 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
bce0: 6f 6e 20 69 73 20 64 65 61 6c 74 20 77 69 74 68  on is dealt with
bcf0: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
bd00: 79 20 74 68 65 0a 20 20 5b 63 6f 6e 66 6c 69 63  y the.  [conflic
bd10: 74 20 63 6c 61 75 73 65 7c 63 6f 6e 73 74 72 61  t clause|constra
bd20: 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  int conflict res
bd30: 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
bd40: 6d 5d 2e 20 45 61 63 68 20 0a 20 20 50 52 49 4d  m]. Each .  PRIM
bd50: 41 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 2c  ARY KEY, UNIQUE,
bd60: 20 4e 4f 54 20 4e 55 4c 4c 20 61 6e 64 20 43 48   NOT NULL and CH
bd70: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 68  ECK constraint h
bd80: 61 73 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e  as a default con
bd90: 66 6c 69 63 74 0a 20 20 72 65 73 6f 6c 75 74 69  flict.  resoluti
bda0: 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 2e 20 5e 50  on algorithm. ^P
bdb0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e 49 51  RIMARY KEY, UNIQ
bdc0: 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20  UE and NOT NULL 
bdd0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 6d 61 79 20  constraints may 
bde0: 62 65 0a 20 20 65 78 70 6c 69 63 69 74 6c 79 20  be.  explicitly 
bdf0: 61 73 73 69 67 6e 65 64 20 61 20 64 65 66 61 75  assigned a defau
be00: 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
be10: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
be20: 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 0a 20 20   by including.  
be30: 61 20 5b 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  a [conflict-clau
be40: 73 65 5d 20 69 6e 20 74 68 65 69 72 20 64 65 66  se] in their def
be50: 69 6e 69 74 69 6f 6e 73 2e 20 5e 4f 72 2c 20 69  initions. ^Or, i
be60: 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 64  f a constraint d
be70: 65 66 69 6e 69 74 69 6f 6e 0a 20 20 64 6f 65 73  efinition.  does
be80: 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20 61 20 5b   not include a [
be90: 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 5d  conflict-clause]
bea0: 20 6f 72 20 69 74 20 69 73 20 61 20 43 48 45 43   or it is a CHEC
beb0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68  K constraint, th
bec0: 65 20 64 65 66 61 75 6c 74 0a 20 20 63 6f 6e 66  e default.  conf
bed0: 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
bee0: 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f  algorithm is ABO
bef0: 52 54 2e 20 5e 44 69 66 66 65 72 65 6e 74 20 63  RT. ^Different c
bf00: 6f 6e 73 74 72 61 69 6e 74 73 20 77 69 74 68 69  onstraints withi
bf10: 6e 20 74 68 65 0a 20 20 73 61 6d 65 20 74 61 62  n the.  same tab
bf20: 6c 65 20 6d 61 79 20 68 61 76 65 20 64 69 66 66  le may have diff
bf30: 65 72 65 6e 74 20 64 65 66 61 75 6c 74 20 63 6f  erent default co
bf40: 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
bf50: 6e 20 61 6c 67 6f 72 69 74 68 6d 73 2e 20 53 65  n algorithms. Se
bf60: 65 0a 20 20 74 68 65 20 73 65 63 74 69 6f 6e 20  e.  the section 
bf70: 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c  titled [ON CONFL
bf80: 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f  ICT] for additio
bf90: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
bfa0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
bfb0: 6e 74 20 72 6f 77 69 64 20 7b 49 4e 54 45 47 45  nt rowid {INTEGE
bfc0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 52  R PRIMARY KEY} R
bfd0: 4f 57 49 44 20 72 6f 77 69 64 3c 2f 74 63 6c 3e  OWID rowid</tcl>
bfe0: 0a 3c 68 33 3e 52 4f 57 49 44 73 20 61 6e 64 20  .<h3>ROWIDs and 
bff0: 74 68 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d  the INTEGER PRIM
c000: 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a 0a 3c 70  ARY KEY</h3>..<p
c010: 3e 5e 45 78 63 65 70 74 20 66 6f 72 20 5b 57 49  >^Except for [WI
c020: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
c030: 6c 65 73 2c 20 61 6c 6c 20 72 6f 77 73 20 77 69  les, all rows wi
c040: 74 68 69 6e 20 53 51 4c 69 74 65 20 74 61 62 6c  thin SQLite tabl
c050: 65 73 0a 68 61 76 65 20 61 20 36 34 2d 62 69 74  es.have a 64-bit
c060: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
c070: 6b 65 79 20 74 68 61 74 20 75 6e 69 71 75 65 6c  key that uniquel
c080: 79 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  y identifies the
c090: 20 72 6f 77 20 77 69 74 68 69 6e 20 69 74 73 20   row within its 
c0a0: 74 61 62 6c 65 2e 0a 54 68 69 73 20 69 6e 74 65  table..This inte
c0b0: 67 65 72 20 69 73 20 75 73 75 61 6c 6c 79 0a 63  ger is usually.c
c0c0: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 77 69 64  alled the "rowid
c0d0: 22 2e 20 5e 54 68 65 20 72 6f 77 69 64 20 76 61  ". ^The rowid va
c0e0: 6c 75 65 20 63 61 6e 20 62 65 20 61 63 63 65 73  lue can be acces
c0f0: 73 65 64 20 75 73 69 6e 67 20 6f 6e 65 20 6f 66  sed using one of
c100: 20 74 68 65 20 73 70 65 63 69 61 6c 0a 63 61 73   the special.cas
c110: 65 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 6e 61  e-independent na
c120: 6d 65 73 20 22 72 6f 77 69 64 22 2c 20 22 6f 69  mes "rowid", "oi
c130: 64 22 2c 20 6f 72 20 22 5f 72 6f 77 69 64 5f 22  d", or "_rowid_"
c140: 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 63   in place of a c
c150: 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 5e 49 66 20  olumn name..^If 
c160: 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  a table contains
c170: 20 61 20 75 73 65 72 20 64 65 66 69 6e 65 64 20   a user defined 
c180: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 22 72 6f  column named "ro
c190: 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22  wid", "oid" or "
c1a0: 5f 72 6f 77 69 64 5f 22 2c 0a 74 68 65 6e 20 74  _rowid_",.then t
c1b0: 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79 73 20  hat name always 
c1c0: 72 65 66 65 72 73 20 74 68 65 20 65 78 70 6c 69  refers the expli
c1d0: 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20 63  citly declared c
c1e0: 6f 6c 75 6d 6e 20 61 6e 64 20 63 61 6e 6e 6f 74  olumn and cannot
c1f0: 20 62 65 20 75 73 65 64 0a 74 6f 20 72 65 74 72   be used.to retr
c200: 69 65 76 65 20 74 68 65 20 69 6e 74 65 67 65 72  ieve the integer
c210: 20 72 6f 77 69 64 20 76 61 6c 75 65 2e 0a 0a 3c   rowid value...<
c220: 70 3e 54 68 65 20 72 6f 77 69 64 20 28 61 6e 64  p>The rowid (and
c230: 20 22 6f 69 64 22 20 61 6e 64 20 22 5f 72 6f 77   "oid" and "_row
c240: 69 64 5f 22 29 20 69 73 20 6f 6d 69 74 74 65 64  id_") is omitted
c250: 20 69 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f 57   in [WITHOUT ROW
c260: 49 44 5d 20 74 61 62 6c 65 73 2e 0a 57 49 54 48  ID] tables..WITH
c270: 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73  OUT ROWID tables
c280: 20 61 72 65 20 6f 6e 6c 79 20 61 76 61 69 6c 61   are only availa
c290: 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 5b 76  ble in SQLite [v
c2a0: 65 72 73 69 6f 6e 20 33 2e 38 2e 32 5d 0a 28 5b  ersion 3.8.2].([
c2b0: 64 61 74 65 6f 66 3a 33 2e 38 2e 32 5d 29 20 61  dateof:3.8.2]) a
c2c0: 6e 64 20 6c 61 74 65 72 2e 0a 41 20 74 61 62 6c  nd later..A tabl
c2d0: 65 20 74 68 61 74 20 6c 61 63 6b 73 20 74 68 65  e that lacks the
c2e0: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 63   WITHOUT ROWID c
c2f0: 6c 61 75 73 65 20 69 73 20 63 61 6c 6c 65 64 20  lause is called 
c300: 61 20 22 72 6f 77 69 64 20 74 61 62 6c 65 22 2e  a "rowid table".
c310: 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f  ..<p>The data fo
c320: 72 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20 69  r rowid tables i
c330: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 42 2d  s stored as a B-
c340: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 63  Tree structure c
c350: 6f 6e 74 61 69 6e 69 6e 67 0a 6f 6e 65 20 65 6e  ontaining.one en
c360: 74 72 79 20 66 6f 72 20 65 61 63 68 20 74 61 62  try for each tab
c370: 6c 65 20 72 6f 77 2c 20 75 73 69 6e 67 20 74 68  le row, using th
c380: 65 20 72 6f 77 69 64 20 76 61 6c 75 65 20 61 73  e rowid value as
c390: 20 74 68 65 20 6b 65 79 2e 20 54 68 69 73 20 6d   the key. This m
c3a0: 65 61 6e 73 20 74 68 61 74 0a 72 65 74 72 69 65  eans that.retrie
c3b0: 76 69 6e 67 20 6f 72 20 73 6f 72 74 69 6e 67 20  ving or sorting 
c3c0: 72 65 63 6f 72 64 73 20 62 79 20 72 6f 77 69 64  records by rowid
c3d0: 20 69 73 20 66 61 73 74 2e 20 53 65 61 72 63 68   is fast. Search
c3e0: 69 6e 67 20 66 6f 72 20 61 20 72 65 63 6f 72 64  ing for a record
c3f0: 20 77 69 74 68 20 61 0a 73 70 65 63 69 66 69 63   with a.specific
c400: 20 72 6f 77 69 64 2c 20 6f 72 20 66 6f 72 20 61   rowid, or for a
c410: 6c 6c 20 72 65 63 6f 72 64 73 20 77 69 74 68 20  ll records with 
c420: 72 6f 77 69 64 73 20 77 69 74 68 69 6e 20 61 20  rowids within a 
c430: 73 70 65 63 69 66 69 65 64 20 72 61 6e 67 65 20  specified range 
c440: 69 73 0a 61 72 6f 75 6e 64 20 74 77 69 63 65 20  is.around twice 
c450: 61 73 20 66 61 73 74 20 61 73 20 61 20 73 69 6d  as fast as a sim
c460: 69 6c 61 72 20 73 65 61 72 63 68 20 6d 61 64 65  ilar search made
c470: 20 62 79 20 73 70 65 63 69 66 79 69 6e 67 20 61   by specifying a
c480: 6e 79 20 6f 74 68 65 72 20 50 52 49 4d 41 52 59  ny other PRIMARY
c490: 0a 4b 45 59 20 6f 72 20 69 6e 64 65 78 65 64 20  .KEY or indexed 
c4a0: 76 61 6c 75 65 2e 0a 0a 3c 70 3e 20 5e 57 69 74  value...<p> ^Wit
c4b0: 68 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e 20  h one exception 
c4c0: 6e 6f 74 65 64 20 62 65 6c 6f 77 2c 20 69 66 20  noted below, if 
c4d0: 61 20 72 6f 77 69 64 20 74 61 62 6c 65 20 68 61  a rowid table ha
c4e0: 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
c4f0: 74 68 61 74 20 63 6f 6e 73 69 73 74 73 0a 6f 66  that consists.of
c500: 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
c510: 20 61 6e 64 20 74 68 65 20 64 65 63 6c 61 72 65   and the declare
c520: 64 20 74 79 70 65 20 6f 66 20 74 68 61 74 20 63  d type of that c
c530: 6f 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45  olumn is "INTEGE
c540: 52 22 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72  R" in any mixtur
c550: 65 20 6f 66 0a 75 70 70 65 72 20 61 6e 64 20 6c  e of.upper and l
c560: 6f 77 65 72 20 63 61 73 65 2c 20 74 68 65 6e 20  ower case, then 
c570: 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d  the column becom
c580: 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  es an alias for 
c590: 74 68 65 20 72 6f 77 69 64 2e 20 53 75 63 68 20  the rowid. Such 
c5a0: 61 0a 63 6f 6c 75 6d 6e 20 69 73 20 75 73 75 61  a.column is usua
c5b0: 6c 6c 79 20 72 65 66 65 72 72 65 64 20 74 6f 20  lly referred to 
c5c0: 61 73 20 61 6e 20 22 69 6e 74 65 67 65 72 20 70  as an "integer p
c5d0: 72 69 6d 61 72 79 20 6b 65 79 22 2e 20 41 20 50  rimary key". A P
c5e0: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d  RIMARY KEY colum
c5f0: 6e 0a 6f 6e 6c 79 20 62 65 63 6f 6d 65 73 20 61  n.only becomes a
c600: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
c610: 79 20 6b 65 79 20 69 66 20 74 68 65 20 64 65 63  y key if the dec
c620: 6c 61 72 65 64 20 74 79 70 65 20 6e 61 6d 65 20  lared type name 
c630: 69 73 20 65 78 61 63 74 6c 79 0a 22 49 4e 54 45  is exactly."INTE
c640: 47 45 52 22 2e 20 20 5e 4f 74 68 65 72 20 69 6e  GER".  ^Other in
c650: 74 65 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73  teger type names
c660: 20 6c 69 6b 65 20 22 49 4e 54 22 20 6f 72 20 22   like "INT" or "
c670: 42 49 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52  BIGINT" or "SHOR
c680: 54 20 49 4e 54 45 47 45 52 22 0a 6f 72 20 22 55  T INTEGER".or "U
c690: 4e 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22  NSIGNED INTEGER"
c6a0: 20 63 61 75 73 65 73 20 74 68 65 20 70 72 69 6d   causes the prim
c6b0: 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 74  ary key column t
c6c0: 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e 20 6f  o behave as an o
c6d0: 72 64 69 6e 61 72 79 0a 74 61 62 6c 65 20 63 6f  rdinary.table co
c6e0: 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74 65 67 65  lumn with intege
c6f0: 72 20 5b 61 66 66 69 6e 69 74 79 5d 20 61 6e 64  r [affinity] and
c700: 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2c   a unique index,
c710: 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69 61 73   not as an alias
c720: 20 66 6f 72 0a 74 68 65 20 72 6f 77 69 64 2e 0a   for.the rowid..
c730: 0a 3c 70 3e 20 54 68 65 20 65 78 63 65 70 74 69  .<p> The excepti
c740: 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 61 62 6f  on mentioned abo
c750: 76 65 20 69 73 20 74 68 61 74 20 5e 69 66 20 74  ve is that ^if t
c760: 68 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f  he declaration o
c770: 66 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a  f a column with.
c780: 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 22 49  declared type "I
c790: 4e 54 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73  NTEGER" includes
c7a0: 20 61 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59   an "PRIMARY KEY
c7b0: 20 44 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69   DESC" clause, i
c7c0: 74 20 64 6f 65 73 20 6e 6f 74 0a 62 65 63 6f 6d  t does not.becom
c7d0: 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  e an alias for t
c7e0: 68 65 20 72 6f 77 69 64 20 61 6e 64 20 69 73 20  he rowid and is 
c7f0: 6e 6f 74 20 63 6c 61 73 73 69 66 69 65 64 20 61  not classified a
c800: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69  s an integer pri
c810: 6d 61 72 79 20 6b 65 79 2e 0a 54 68 69 73 20 71  mary key..This q
c820: 75 69 72 6b 20 69 73 20 6e 6f 74 20 62 79 20 64  uirk is not by d
c830: 65 73 69 67 6e 2e 20 49 74 20 69 73 20 64 75 65  esign. It is due
c840: 20 74 6f 20 61 20 62 75 67 20 69 6e 20 65 61 72   to a bug in ear
c850: 6c 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ly versions of S
c860: 51 4c 69 74 65 2e 0a 42 75 74 20 66 69 78 69 6e  QLite..But fixin
c870: 67 20 74 68 65 20 62 75 67 20 63 6f 75 6c 64 20  g the bug could 
c880: 72 65 73 75 6c 74 20 69 6e 20 62 61 63 6b 77 61  result in backwa
c890: 72 64 73 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c  rds incompatibil
c8a0: 69 74 69 65 73 2e 0a 48 65 6e 63 65 2c 20 74 68  ities..Hence, th
c8b0: 65 20 6f 72 69 67 69 6e 61 6c 20 62 65 68 61 76  e original behav
c8c0: 69 6f 72 20 68 61 73 20 62 65 65 6e 20 72 65 74  ior has been ret
c8d0: 61 69 6e 65 64 20 28 61 6e 64 20 64 6f 63 75 6d  ained (and docum
c8e0: 65 6e 74 65 64 29 20 62 65 63 61 75 73 65 20 6f  ented) because o
c8f0: 64 64 0a 62 65 68 61 76 69 6f 72 20 69 6e 20 61  dd.behavior in a
c900: 20 63 6f 72 6e 65 72 20 63 61 73 65 20 69 73 20   corner case is 
c910: 66 61 72 20 62 65 74 74 65 72 20 74 68 61 6e 20  far better than 
c920: 61 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  a compatibility 
c930: 62 72 65 61 6b 2e 20 20 54 68 69 73 20 6d 65 61  break.  This mea
c940: 6e 73 0a 74 68 61 74 20 5e 28 74 68 65 20 66 6f  ns.that ^(the fo
c950: 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 74 61  llowing three ta
c960: 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ble declarations
c970: 20 61 6c 6c 20 63 61 75 73 65 20 74 68 65 20 63   all cause the c
c980: 6f 6c 75 6d 6e 20 22 78 22 20 74 6f 20 62 65 20  olumn "x" to be 
c990: 61 6e 0a 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an.alias for the
c9a0: 20 72 6f 77 69 64 20 28 61 6e 20 69 6e 74 65 67   rowid (an integ
c9b0: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3a  er primary key):
c9c0: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  ..<ul>.<li><tt>C
c9d0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
c9e0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
c9f0: 4b 45 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 3c  KEY ASC, y, z);<
ca00: 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43 52 45  /tt>.<li><tt>CRE
ca10: 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
ca20: 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49  TEGER, y, z, PRI
ca30: 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43 29 29  MARY KEY(x ASC))
ca40: 3b 3c 2f 74 74 3e 0a 3c 6c 69 3e 3c 74 74 3e 43  ;</tt>.<li><tt>C
ca50: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20  REATE TABLE t(x 
ca60: 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50  INTEGER, y, z, P
ca70: 52 49 4d 41 52 59 20 4b 45 59 28 78 20 44 45 53  RIMARY KEY(x DES
ca80: 43 29 29 3b 3c 2f 74 74 3e 0a 3c 2f 75 6c 3e 29  C));</tt>.</ul>)
ca90: 5e 0a 0a 3c 70 3e 42 75 74 20 5e 28 74 68 65 20  ^..<p>But ^(the 
caa0: 66 6f 6c 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72  following declar
cab0: 61 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 72  ation does not r
cac0: 65 73 75 6c 74 20 69 6e 20 22 78 22 20 62 65 69  esult in "x" bei
cad0: 6e 67 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 0a  ng an alias for.
cae0: 74 68 65 20 72 6f 77 69 64 3a 0a 3c 75 6c 3e 0a  the rowid:.<ul>.
caf0: 3c 6c 69 3e 3c 74 74 3e 43 52 45 41 54 45 20 54  <li><tt>CREATE T
cb00: 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52  ABLE t(x INTEGER
cb10: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53   PRIMARY KEY DES
cb20: 43 2c 20 79 2c 20 7a 29 3b 3c 2f 74 74 3e 0a 3c  C, y, z);</tt>.<
cb30: 2f 75 6c 3e 29 5e 0a 0a 3c 70 3e 5e 52 6f 77 69  /ul>)^..<p>^Rowi
cb40: 64 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20  d values may be 
cb50: 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67 20 61  modified using a
cb60: 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
cb70: 6e 74 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 77  nt in the same.w
cb80: 61 79 20 61 73 20 61 6e 79 20 6f 74 68 65 72 20  ay as any other 
cb90: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 63 61 6e  column value can
cba0: 2c 20 65 69 74 68 65 72 20 75 73 69 6e 67 20 6f  , either using o
cbb0: 6e 65 20 6f 66 20 74 68 65 20 62 75 69 6c 74 2d  ne of the built-
cbc0: 69 6e 20 61 6c 69 61 73 65 73 0a 28 22 72 6f 77  in aliases.("row
cbd0: 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f  id", "oid" or "_
cbe0: 72 6f 77 69 64 5f 22 29 20 6f 72 20 62 79 20 75  rowid_") or by u
cbf0: 73 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 63 72  sing an alias cr
cc00: 65 61 74 65 64 20 62 79 20 61 6e 20 69 6e 74 65  eated by an inte
cc10: 67 65 72 0a 70 72 69 6d 61 72 79 20 6b 65 79 2e  ger.primary key.
cc20: 20 5e 53 69 6d 69 6c 61 72 6c 79 2c 20 61 6e 20   ^Similarly, an 
cc30: 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
cc40: 20 6d 61 79 20 70 72 6f 76 69 64 65 20 61 20 76   may provide a v
cc50: 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20 74  alue to use as t
cc60: 68 65 0a 72 6f 77 69 64 20 66 6f 72 20 65 61 63  he.rowid for eac
cc70: 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64 2e 20  h row inserted. 
cc80: 5e 28 55 6e 6c 69 6b 65 20 6e 6f 72 6d 61 6c 20  ^(Unlike normal 
cc90: 53 51 4c 69 74 65 20 63 6f 6c 75 6d 6e 73 2c 20  SQLite columns, 
cca0: 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
ccb0: 72 79 0a 6b 65 79 20 6f 72 20 72 6f 77 69 64 20  ry.key or rowid 
ccc0: 63 6f 6c 75 6d 6e 20 6d 75 73 74 20 63 6f 6e 74  column must cont
ccd0: 61 69 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ain integer valu
cce0: 65 73 2e 20 49 6e 74 65 67 65 72 20 70 72 69 6d  es. Integer prim
ccf0: 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64  ary key or rowid
cd00: 0a 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 6f 74  .columns are not
cd10: 20 61 62 6c 65 20 74 6f 20 68 6f 6c 64 20 66 6c   able to hold fl
cd20: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
cd30: 75 65 73 2c 20 73 74 72 69 6e 67 73 2c 20 42 4c  ues, strings, BL
cd40: 4f 42 73 2c 20 6f 72 20 4e 55 4c 4c 73 2e 29 5e  OBs, or NULLs.)^
cd50: 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 55 50 44 41  ..<p>^If an UPDA
cd60: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  TE statement att
cd70: 65 6d 70 74 73 20 74 6f 20 73 65 74 20 61 6e 20  empts to set an 
cd80: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
cd90: 6b 65 79 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c  key or rowid col
cda0: 75 6d 6e 0a 74 6f 20 61 20 4e 55 4c 4c 20 6f 72  umn.to a NULL or
cdb0: 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20 6f 72 20   blob value, or 
cdc0: 74 6f 20 61 20 73 74 72 69 6e 67 20 6f 72 20 72  to a string or r
cdd0: 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63  eal value that c
cde0: 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
cdf0: 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly.converted to
ce00: 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 20 22   an integer, a "
ce10: 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63  datatype mismatc
ce20: 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20  h" error occurs 
ce30: 61 6e 64 20 74 68 65 20 73 74 61 74 65 6d 65 6e  and the statemen
ce40: 74 0a 69 73 20 61 62 6f 72 74 65 64 2e 20 5e 49  t.is aborted. ^I
ce50: 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  f an INSERT stat
ce60: 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74  ement attempts t
ce70: 6f 20 69 6e 73 65 72 74 20 61 20 62 6c 6f 62 20  o insert a blob 
ce80: 76 61 6c 75 65 2c 20 6f 72 20 61 20 73 74 72 69  value, or a stri
ce90: 6e 67 0a 6f 72 20 72 65 61 6c 20 76 61 6c 75 65  ng.or real value
cea0: 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20   that cannot be 
ceb0: 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
cec0: 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
ced0: 65 72 20 69 6e 74 6f 20 61 6e 0a 69 6e 74 65 67  er into an.integ
cee0: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  er primary key o
cef0: 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 2c 20  r rowid column, 
cf00: 61 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d  a "datatype mism
cf10: 61 74 63 68 22 20 65 72 72 6f 72 20 6f 63 63 75  atch" error occu
cf20: 72 73 20 61 6e 64 20 74 68 65 0a 73 74 61 74 65  rs and the.state
cf30: 6d 65 6e 74 20 69 73 20 61 62 6f 72 74 65 64 2e  ment is aborted.
cf40: 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 49 4e 53 45  ..<p>^If an INSE
cf50: 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  RT statement att
cf60: 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20  empts to insert 
cf70: 61 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 74  a NULL value int
cf80: 6f 20 61 20 72 6f 77 69 64 20 6f 72 0a 69 6e 74  o a rowid or.int
cf90: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
cfa0: 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 20 73 79 73   column, the sys
cfb0: 74 65 6d 20 63 68 6f 6f 73 65 73 20 61 6e 20 69  tem chooses an i
cfc0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 74 6f 20  nteger value to 
cfd0: 75 73 65 20 61 73 20 74 68 65 0a 72 6f 77 69 64  use as the.rowid
cfe0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 20   automatically. 
cff0: 41 20 64 65 74 61 69 6c 65 64 20 64 65 73 63 72  A detailed descr
d000: 69 70 74 69 6f 6e 20 6f 66 20 68 6f 77 20 74 68  iption of how th
d010: 69 73 20 69 73 20 64 6f 6e 65 20 69 73 20 70 72  is is done is pr
d020: 6f 76 69 64 65 64 0a 3c 61 20 68 72 65 66 3d 22  ovided.<a href="
d030: 61 75 74 6f 69 6e 63 2e 68 74 6d 6c 22 3e 73 65  autoinc.html">se
d040: 70 61 72 61 74 65 6c 79 3c 2f 61 3e 2e 3c 2f 70  parately</a>.</p
d050: 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 5b 70 61 72  >..<p>^(The [par
d060: 65 6e 74 20 6b 65 79 5d 20 6f 66 20 61 20 5b 66  ent key] of a [f
d070: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
d080: 72 61 69 6e 74 5d 20 69 73 20 6e 6f 74 20 61 6c  raint] is not al
d090: 6c 6f 77 65 64 20 74 6f 0a 75 73 65 20 74 68 65  lowed to.use the
d0a0: 20 72 6f 77 69 64 2e 20 20 54 68 65 20 70 61 72   rowid.  The par
d0b0: 65 6e 74 20 6b 65 79 20 6d 75 73 74 20 75 73 65  ent key must use
d0c0: 64 20 6e 61 6d 65 64 20 63 6f 6c 75 6d 6e 73 20  d named columns 
d0d0: 6f 6e 6c 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 74 63  only.)^</p>..<tc
d0e0: 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
d0f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d110: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d130: 23 0a 53 65 63 74 69 6f 6e 20 7b 43 52 45 41 54  #.Section {CREAT
d140: 45 20 54 52 49 47 47 45 52 7d 20 63 72 65 61 74  E TRIGGER} creat
d150: 65 74 72 69 67 67 65 72 20 7b 7b 43 52 45 41 54  etrigger {{CREAT
d160: 45 20 54 52 49 47 47 45 52 7d 7d 0a 0a 52 65 63  E TRIGGER}}..Rec
d170: 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
d180: 72 61 6d 20 63 72 65 61 74 65 2d 74 72 69 67 67  ram create-trigg
d190: 65 72 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  er-stmt.</tcl>..
d1a0: 3c 70 3e 5e 54 68 65 20 43 52 45 41 54 45 20 54  <p>^The CREATE T
d1b0: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
d1c0: 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20   is used to add 
d1d0: 74 72 69 67 67 65 72 73 20 74 6f 20 74 68 65 20  triggers to the 
d1e0: 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  .database schema
d1f0: 2e 20 5e 54 72 69 67 67 65 72 73 20 61 72 65 20  . ^Triggers are 
d200: 64 61 74 61 62 61 73 65 20 6f 70 65 72 61 74 69  database operati
d210: 6f 6e 73 20 0a 74 68 61 74 20 61 72 65 20 61 75  ons .that are au
d220: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 65 72 66  tomatically perf
d230: 6f 72 6d 65 64 20 77 68 65 6e 20 61 20 73 70 65  ormed when a spe
d240: 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65 20  cified database 
d250: 65 76 65 6e 74 0a 6f 63 63 75 72 73 2e 20 20 3c  event.occurs.  <
d260: 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 74 72 69 67 67  /p>..<p>^A trigg
d270: 65 72 20 6d 61 79 20 62 65 20 73 70 65 63 69 66  er may be specif
d280: 69 65 64 20 74 6f 20 66 69 72 65 20 77 68 65 6e  ied to fire when
d290: 65 76 65 72 20 61 20 5b 44 45 4c 45 54 45 5d 2c  ever a [DELETE],
d2a0: 20 5b 49 4e 53 45 52 54 5d 2c 0a 6f 72 20 5b 55   [INSERT],.or [U
d2b0: 50 44 41 54 45 5d 20 6f 66 20 61 0a 70 61 72 74  PDATE] of a.part
d2c0: 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20  icular database 
d2d0: 74 61 62 6c 65 20 6f 63 63 75 72 73 2c 20 6f 72  table occurs, or
d2e0: 20 77 68 65 6e 65 76 65 72 20 61 6e 20 5b 55 50   whenever an [UP
d2f0: 44 41 54 45 5d 20 6f 63 63 75 72 73 20 6f 6e 0a  DATE] occurs on.
d300: 6f 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73  on one or more s
d310: 70 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73  pecified columns
d320: 20 6f 66 20 61 20 74 61 62 6c 65 2e 3c 2f 70 3e   of a table.</p>
d330: 0a 0a 3c 70 3e 5e 41 74 20 74 68 69 73 20 74 69  ..<p>^At this ti
d340: 6d 65 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  me SQLite suppor
d350: 74 73 20 6f 6e 6c 79 20 46 4f 52 20 45 41 43 48  ts only FOR EACH
d360: 20 52 4f 57 20 74 72 69 67 67 65 72 73 2c 20 6e   ROW triggers, n
d370: 6f 74 20 46 4f 52 20 45 41 43 48 0a 53 54 41 54  ot FOR EACH.STAT
d380: 45 4d 45 4e 54 20 74 72 69 67 67 65 72 73 2e 20  EMENT triggers. 
d390: 5e 48 65 6e 63 65 20 65 78 70 6c 69 63 69 74 6c  ^Hence explicitl
d3a0: 79 20 73 70 65 63 69 66 79 69 6e 67 20 46 4f 52  y specifying FOR
d3b0: 20 45 41 43 48 20 52 4f 57 20 69 73 20 6f 70 74   EACH ROW is opt
d3c0: 69 6f 6e 61 6c 2e 0a 5e 46 4f 52 20 45 41 43 48  ional..^FOR EACH
d3d0: 20 52 4f 57 20 69 6d 70 6c 69 65 73 20 74 68 61   ROW implies tha
d3e0: 74 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  t the SQL statem
d3f0: 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 69  ents specified i
d400: 6e 20 74 68 65 20 74 72 69 67 67 65 72 0a 6d 61  n the trigger.ma
d410: 79 20 62 65 20 65 78 65 63 75 74 65 64 20 28 64  y be executed (d
d420: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
d430: 57 48 45 4e 20 63 6c 61 75 73 65 29 20 66 6f 72  WHEN clause) for
d440: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 72   each database r
d450: 6f 77 20 62 65 69 6e 67 0a 69 6e 73 65 72 74 65  ow being.inserte
d460: 64 2c 20 75 70 64 61 74 65 64 20 6f 72 20 64 65  d, updated or de
d470: 6c 65 74 65 64 20 62 79 20 74 68 65 20 73 74 61  leted by the sta
d480: 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67 20 74  tement causing t
d490: 68 65 20 74 72 69 67 67 65 72 20 74 6f 20 66 69  he trigger to fi
d4a0: 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 42 6f  re.</p>..<p>^(Bo
d4b0: 74 68 20 74 68 65 20 57 48 45 4e 20 63 6c 61 75  th the WHEN clau
d4c0: 73 65 20 61 6e 64 20 74 68 65 20 74 72 69 67 67  se and the trigg
d4d0: 65 72 20 61 63 74 69 6f 6e 73 20 6d 61 79 20 61  er actions may a
d4e0: 63 63 65 73 73 20 65 6c 65 6d 65 6e 74 73 20 6f  ccess elements o
d4f0: 66 20 0a 74 68 65 20 72 6f 77 20 62 65 69 6e 67  f .the row being
d500: 20 69 6e 73 65 72 74 65 64 2c 20 64 65 6c 65 74   inserted, delet
d510: 65 64 20 6f 72 20 75 70 64 61 74 65 64 20 75 73  ed or updated us
d520: 69 6e 67 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ing references o
d530: 66 20 74 68 65 20 66 6f 72 6d 20 0a 22 4e 45 57  f the form ."NEW
d540: 2e 3c 69 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  .<i>column-name<
d550: 2f 69 3e 22 20 61 6e 64 20 22 4f 4c 44 2e 3c 69  /i>" and "OLD.<i
d560: 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e  >column-name</i>
d570: 22 2c 20 77 68 65 72 65 0a 3c 69 3e 63 6f 6c 75  ", where.<i>colu
d580: 6d 6e 2d 6e 61 6d 65 3c 2f 69 3e 20 69 73 20 74  mn-name</i> is t
d590: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6c  he name of a col
d5a0: 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 74 61 62  umn from the tab
d5b0: 6c 65 20 74 68 61 74 20 74 68 65 20 74 72 69 67  le that the trig
d5c0: 67 65 72 0a 69 73 20 61 73 73 6f 63 69 61 74 65  ger.is associate
d5d0: 64 20 77 69 74 68 2e 29 5e 20 5e 28 4f 4c 44 20  d with.)^ ^(OLD 
d5e0: 61 6e 64 20 4e 45 57 20 72 65 66 65 72 65 6e 63  and NEW referenc
d5f0: 65 73 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  es may only be u
d600: 73 65 64 20 69 6e 20 74 72 69 67 67 65 72 73 20  sed in triggers 
d610: 6f 6e 0a 65 76 65 6e 74 73 20 66 6f 72 20 77 68  on.events for wh
d620: 69 63 68 20 74 68 65 79 20 61 72 65 20 72 65 6c  ich they are rel
d630: 65 76 61 6e 74 2c 20 61 73 20 66 6f 6c 6c 6f 77  evant, as follow
d640: 73 3a 3c 2f 70 3e 0a 0a 3c 74 61 62 6c 65 20 62  s:</p>..<table b
d650: 6f 72 64 65 72 3d 30 20 63 65 6c 6c 70 61 64 64  order=0 cellpadd
d660: 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 0a 3c 74 64  ing=10>.<tr>.<td
d670: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
d680: 69 67 6e 3d 22 72 69 67 68 74 22 20 77 69 64 74  ign="right" widt
d690: 68 3d 31 32 30 3e 3c 69 3e 49 4e 53 45 52 54 3c  h=120><i>INSERT<
d6a0: 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  /i></td>.<td val
d6b0: 69 67 6e 3d 22 74 6f 70 22 3e 4e 45 57 20 72 65  ign="top">NEW re
d6c0: 66 65 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c  ferences are val
d6d0: 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  id</td>.</tr>.<t
d6e0: 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  r>.<td valign="t
d6f0: 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
d700: 22 20 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 55  " width=120><i>U
d710: 50 44 41 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c  PDATE</i></td>.<
d720: 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
d730: 4e 45 57 20 61 6e 64 20 4f 4c 44 20 72 65 66 65  NEW and OLD refe
d740: 72 65 6e 63 65 73 20 61 72 65 20 76 61 6c 69 64  rences are valid
d750: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
d760: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
d770: 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  " align="right" 
d780: 77 69 64 74 68 3d 31 32 30 3e 3c 69 3e 44 45 4c  width=120><i>DEL
d790: 45 54 45 3c 2f 69 3e 3c 2f 74 64 3e 0a 3c 74 64  ETE</i></td>.<td
d7a0: 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 4f 4c   valign="top">OL
d7b0: 44 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65  D references are
d7c0: 20 76 61 6c 69 64 3c 2f 74 64 3e 0a 3c 2f 74 72   valid</td>.</tr
d7d0: 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 70 3e 29  >.</table>.</p>)
d7e0: 5e 0a 0a 3c 70 3e 5e 49 66 20 61 20 57 48 45 4e  ^..<p>^If a WHEN
d7f0: 20 63 6c 61 75 73 65 20 69 73 20 73 75 70 70 6c   clause is suppl
d800: 69 65 64 2c 20 74 68 65 20 53 51 4c 20 73 74 61  ied, the SQL sta
d810: 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
d820: 64 0a 61 72 65 20 6f 6e 6c 79 20 65 78 65 63 75  d.are only execu
d830: 74 65 64 20 69 66 20 74 68 65 20 57 48 45 4e 20  ted if the WHEN 
d840: 63 6c 61 75 73 65 20 69 73 20 74 72 75 65 2e 0a  clause is true..
d850: 5e 49 66 20 6e 6f 20 57 48 45 4e 20 63 6c 61 75  ^If no WHEN clau
d860: 73 65 20 69 73 20 73 75 70 70 6c 69 65 64 2c 20  se is supplied, 
d870: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
d880: 74 73 0a 61 72 65 20 65 78 65 63 75 74 65 64 20  ts.are executed 
d890: 65 76 65 72 79 20 74 69 6d 65 20 74 68 65 20 74  every time the t
d8a0: 72 69 67 67 65 72 20 66 69 72 65 73 2e 3c 2f 70  rigger fires.</p
d8b0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 42 45 46 4f 52  >..<p>^The BEFOR
d8c0: 45 20 6f 72 20 41 46 54 45 52 20 6b 65 79 77 6f  E or AFTER keywo
d8d0: 72 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  rd determines wh
d8e0: 65 6e 20 74 68 65 20 74 72 69 67 67 65 72 20 61  en the trigger a
d8f0: 63 74 69 6f 6e 73 0a 77 69 6c 6c 20 62 65 20 65  ctions.will be e
d900: 78 65 63 75 74 65 64 20 72 65 6c 61 74 69 76 65  xecuted relative
d910: 20 74 6f 20 74 68 65 20 69 6e 73 65 72 74 69 6f   to the insertio
d920: 6e 2c 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20  n, modification 
d930: 6f 72 20 72 65 6d 6f 76 61 6c 20 6f 66 20 74 68  or removal of th
d940: 65 0a 61 73 73 6f 63 69 61 74 65 64 20 72 6f 77  e.associated row
d950: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6e 20 5b 4f  .</p>..<p>^An [O
d960: 4e 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75  N CONFLICT] clau
d970: 73 65 20 6d 61 79 20 62 65 20 73 70 65 63 69 66  se may be specif
d980: 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  ied as part of a
d990: 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72 20 5b 49  n [UPDATE] or [I
d9a0: 4e 53 45 52 54 5d 0a 61 63 74 69 6f 6e 20 77 69  NSERT].action wi
d9b0: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
d9c0: 20 74 68 65 20 74 72 69 67 67 65 72 2e 0a 5e 48   the trigger..^H
d9d0: 6f 77 65 76 65 72 20 69 66 20 61 6e 20 5b 4f 4e  owever if an [ON
d9e0: 20 43 4f 4e 46 4c 49 43 54 5d 20 63 6c 61 75 73   CONFLICT] claus
d9f0: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  e is specified a
da00: 73 20 70 61 72 74 20 6f 66 20 0a 74 68 65 20 73  s part of .the s
da10: 74 61 74 65 6d 65 6e 74 20 63 61 75 73 69 6e 67  tatement causing
da20: 20 74 68 65 20 74 72 69 67 67 65 72 20 74 6f 20   the trigger to 
da30: 66 69 72 65 2c 20 74 68 65 6e 20 63 6f 6e 66 6c  fire, then confl
da40: 69 63 74 20 68 61 6e 64 6c 69 6e 67 0a 70 6f 6c  ict handling.pol
da50: 69 63 79 20 6f 66 20 74 68 65 20 6f 75 74 65 72  icy of the outer
da60: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
da70: 65 64 20 69 6e 73 74 65 61 64 2e 3c 2f 70 3e 0a  ed instead.</p>.
da80: 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73 20 61 72  .<p>^Triggers ar
da90: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
daa0: 5b 44 52 4f 50 20 54 52 49 47 47 45 52 20 7c 20  [DROP TRIGGER | 
dab0: 64 72 6f 70 70 65 64 5d 0a 77 68 65 6e 20 74 68  dropped].when th
dac0: 65 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  e table that the
dad0: 79 20 61 72 65 20 0a 61 73 73 6f 63 69 61 74 65  y are .associate
dae0: 64 20 77 69 74 68 20 28 74 68 65 20 3c 69 3e 74  d with (the <i>t
daf0: 61 62 6c 65 2d 6e 61 6d 65 3c 2f 69 3e 20 74 61  able-name</i> ta
db00: 62 6c 65 29 20 69 73 20 0a 5b 44 52 4f 50 20 54  ble) is .[DROP T
db10: 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64 5d 2e  ABLE | dropped].
db20: 20 20 5e 48 6f 77 65 76 65 72 20 69 66 20 74 68    ^However if th
db30: 65 20 74 72 69 67 67 65 72 20 61 63 74 69 6f 6e  e trigger action
db40: 73 20 72 65 66 65 72 65 6e 63 65 0a 6f 74 68 65  s reference.othe
db50: 72 20 74 61 62 6c 65 73 2c 20 74 68 65 20 74 72  r tables, the tr
db60: 69 67 67 65 72 20 69 73 20 6e 6f 74 20 64 72 6f  igger is not dro
db70: 70 70 65 64 20 6f 72 20 6d 6f 64 69 66 69 65 64  pped or modified
db80: 20 69 66 20 74 68 6f 73 65 20 6f 74 68 65 72 0a   if those other.
db90: 74 61 62 6c 65 73 20 61 72 65 20 5b 44 52 4f 50  tables are [DROP
dba0: 20 54 41 42 4c 45 20 7c 20 64 72 6f 70 70 65 64   TABLE | dropped
dbb0: 5d 20 6f 72 20 5b 41 4c 54 45 52 20 54 41 42 4c  ] or [ALTER TABL
dbc0: 45 20 7c 20 6d 6f 64 69 66 69 65 64 5d 2e 3c 2f  E | modified].</
dbd0: 70 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73  p>..<p>^Triggers
dbe0: 20 61 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69   are removed usi
dbf0: 6e 67 20 74 68 65 20 5b 44 52 4f 50 20 54 52 49  ng the [DROP TRI
dc00: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 2e  GGER] statement.
dc10: 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 79 6e 74 61 78  </p>..<h3>Syntax
dc20: 20 52 65 73 74 72 69 63 74 69 6f 6e 73 20 4f 6e   Restrictions On
dc30: 20 55 50 44 41 54 45 2c 20 44 45 4c 45 54 45 2c   UPDATE, DELETE,
dc40: 20 61 6e 64 20 49 4e 53 45 52 54 20 53 74 61 74   and INSERT Stat
dc50: 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 0a 20 20  ements Within.  
dc60: 20 20 54 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a    Triggers</h3>.
dc70: 0a 3c 70 3e 5e 54 68 65 20 5b 55 50 44 41 54 45  .<p>^The [UPDATE
dc80: 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64  ], [DELETE], and
dc90: 20 5b 49 4e 53 45 52 54 5d 0a 73 74 61 74 65 6d   [INSERT].statem
dca0: 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
dcb0: 67 65 72 73 20 64 6f 20 6e 6f 74 20 73 75 70 70  gers do not supp
dcc0: 6f 72 74 0a 74 68 65 20 66 75 6c 6c 20 73 79 6e  ort.the full syn
dcd0: 74 61 78 20 66 6f 72 20 5b 55 50 44 41 54 45 5d  tax for [UPDATE]
dce0: 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 61 6e 64 20  , [DELETE], and 
dcf0: 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65  [INSERT] stateme
dd00: 6e 74 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  nts.  The follow
dd10: 69 6e 67 0a 72 65 73 74 72 69 63 74 69 6f 6e 73  ing.restrictions
dd20: 20 61 70 70 6c 79 3a 3c 2f 70 3e 0a 0a 3c 75 6c   apply:</p>..<ul
dd30: 3e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 28 54 68  >.<li><p>.  ^(Th
dd40: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
dd50: 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66 69  ble to be modifi
dd60: 65 64 20 69 6e 20 61 6e 20 5b 55 50 44 41 54 45  ed in an [UPDATE
dd70: 5d 2c 20 5b 44 45 4c 45 54 45 5d 2c 20 6f 72 20  ], [DELETE], or 
dd80: 5b 49 4e 53 45 52 54 5d 0a 20 20 73 74 61 74 65  [INSERT].  state
dd90: 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61 6e 20  ment must be an 
dda0: 75 6e 71 75 61 6c 69 66 69 65 64 20 74 61 62 6c  unqualified tabl
ddb0: 65 20 6e 61 6d 65 2e 20 20 49 6e 20 6f 74 68 65  e name.  In othe
ddc0: 72 20 77 6f 72 64 73 2c 20 6f 6e 65 20 6d 75 73  r words, one mus
ddd0: 74 0a 20 20 75 73 65 20 6a 75 73 74 20 22 3c 69  t.  use just "<i
dde0: 3e 74 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 20  >tablename</i>" 
ddf0: 6e 6f 74 20 22 3c 69 3e 64 61 74 61 62 61 73 65  not "<i>database
de00: 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e 3c 69 3e 74  </i><b>.</b><i>t
de10: 61 62 6c 65 6e 61 6d 65 3c 2f 69 3e 22 0a 20 20  ablename</i>".  
de20: 77 68 65 6e 20 73 70 65 63 69 66 79 69 6e 67 20  when specifying 
de30: 74 68 65 20 74 61 62 6c 65 2e 29 5e 20 3c 2f 70  the table.)^ </p
de40: 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a  ></li>..<li><p>.
de50: 20 5e 46 6f 72 20 6e 6f 6e 2d 54 45 4d 50 20 74   ^For non-TEMP t
de60: 72 69 67 67 65 72 73 2c 0a 20 20 74 68 65 20 74  riggers,.  the t
de70: 61 62 6c 65 20 74 6f 20 62 65 20 6d 6f 64 69 66  able to be modif
de80: 69 65 64 20 6f 72 20 71 75 65 72 69 65 64 20 6d  ied or queried m
de90: 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68 65  ust exist in the
dea0: 0a 20 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  .  same database
deb0: 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 6f 72   as the table or
dec0: 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74   view to which t
ded0: 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
dee0: 74 61 63 68 65 64 2e 0a 20 20 5e 28 54 45 4d 50  tached..  ^(TEMP
def0: 20 74 72 69 67 67 65 72 73 20 61 72 65 20 6e 6f   triggers are no
df00: 74 20 73 75 62 6a 65 63 74 20 74 6f 20 74 68 65  t subject to the
df10: 20 73 61 6d 65 2d 64 61 74 61 62 61 73 65 20 72   same-database r
df20: 75 6c 65 2e 20 20 41 20 54 45 4d 50 0a 20 20 74  ule.  A TEMP.  t
df30: 72 69 67 67 65 72 20 69 73 20 61 6c 6c 6f 77 65  rigger is allowe
df40: 64 20 74 6f 20 71 75 65 72 79 20 6f 72 20 6d 6f  d to query or mo
df50: 64 69 66 79 20 61 6e 79 20 74 61 62 6c 65 20 69  dify any table i
df60: 6e 20 61 6e 79 20 5b 41 54 54 41 43 48 5d 2d 65  n any [ATTACH]-e
df70: 64 20 64 61 74 61 62 61 73 65 2e 29 5e 0a 20 20  d database.)^.  
df80: 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
df90: 70 3e 0a 20 20 5e 54 68 65 20 22 49 4e 53 45 52  p>.  ^The "INSER
dfa0: 54 20 49 4e 54 4f 20 3c 69 3e 74 61 62 6c 65 3c  T INTO <i>table<
dfb0: 2f 69 3e 20 44 45 46 41 55 4c 54 20 56 41 4c 55  /i> DEFAULT VALU
dfc0: 45 53 22 20 66 6f 72 6d 20 6f 66 20 74 68 65 20  ES" form of the 
dfd0: 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65  [INSERT] stateme
dfe0: 6e 74 0a 20 20 69 73 20 6e 6f 74 20 73 75 70 70  nt.  is not supp
dff0: 6f 72 74 65 64 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c  orted..  </p></l
e000: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 54  i>..<li><p>.  ^T
e010: 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 61 6e  he INDEXED BY an
e020: 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c  d NOT INDEXED cl
e030: 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20 73 75  auses are not su
e040: 70 70 6f 72 74 65 64 20 66 6f 72 20 5b 55 50 44  pported for [UPD
e050: 41 54 45 5d 20 61 6e 64 0a 20 20 5b 44 45 4c 45  ATE] and.  [DELE
e060: 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  TE] statements..
e070: 20 20 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69    </p></li>..<li
e080: 3e 3c 70 3e 0a 20 20 5e 28 54 68 65 20 4f 52 44  ><p>.  ^(The ORD
e090: 45 52 20 42 59 20 61 6e 64 20 4c 49 4d 49 54 20  ER BY and LIMIT 
e0a0: 63 6c 61 75 73 65 73 20 6f 6e 20 5b 55 50 44 41  clauses on [UPDA
e0b0: 54 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d  TE] and [DELETE]
e0c0: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20   statements are 
e0d0: 6e 6f 74 0a 20 20 73 75 70 70 6f 72 74 65 64 2e  not.  supported.
e0e0: 20 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c    ORDER BY and L
e0f0: 49 4d 49 54 20 61 72 65 20 6e 6f 74 20 6e 6f 72  IMIT are not nor
e100: 6d 61 6c 6c 79 20 73 75 70 70 6f 72 74 65 64 20  mally supported 
e110: 66 6f 72 20 5b 55 50 44 41 54 45 5d 20 6f 72 0a  for [UPDATE] or.
e120: 20 20 5b 44 45 4c 45 54 45 5d 20 69 6e 20 61 6e    [DELETE] in an
e130: 79 20 63 6f 6e 74 65 78 74 20 62 75 74 20 63 61  y context but ca
e140: 6e 20 62 65 20 65 6e 61 62 6c 65 64 20 66 6f 72  n be enabled for
e150: 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
e160: 6d 65 6e 74 73 0a 20 20 75 73 69 6e 67 20 74 68  ments.  using th
e170: 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e [SQLITE_ENABLE
e180: 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
e190: 49 4d 49 54 5d 20 63 6f 6d 70 69 6c 65 2d 74 69  IMIT] compile-ti
e1a0: 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 48 6f 77 65  me option.  Howe
e1b0: 76 65 72 2c 0a 20 20 74 68 61 74 20 63 6f 6d 70  ver,.  that comp
e1c0: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
e1d0: 6f 6e 6c 79 20 61 70 70 6c 69 65 73 20 74 6f 20  only applies to 
e1e0: 74 6f 70 2d 6c 65 76 65 6c 20 5b 55 50 44 41 54  top-level [UPDAT
e1f0: 45 5d 20 61 6e 64 20 5b 44 45 4c 45 54 45 5d 0a  E] and [DELETE].
e200: 20 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 6e 6f    statements, no
e210: 74 20 5b 55 50 44 41 54 45 5d 20 61 6e 64 20 5b  t [UPDATE] and [
e220: 44 45 4c 45 54 45 5d 20 73 74 61 74 65 6d 65 6e  DELETE] statemen
e230: 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
e240: 72 73 2e 29 5e 0a 20 20 3c 2f 70 3e 3c 2f 6c 69  rs.)^.  </p></li
e250: 3e 0a 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 5e 5b 63  >..<li><p>.  ^[c
e260: 6f 6d 6d 6f 6e 2d 74 61 62 6c 65 2d 65 78 70 72  ommon-table-expr
e270: 65 73 73 69 6f 6e 7c 43 6f 6d 6d 6f 6e 20 74 61  ession|Common ta
e280: 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 5d 20  ble expression] 
e290: 61 72 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65  are not supporte
e2a0: 64 20 66 6f 72 0a 20 20 73 74 61 74 65 6d 65 6e  d for.  statemen
e2b0: 74 73 20 69 6e 73 69 64 65 20 6f 66 20 74 72 69  ts inside of tri
e2c0: 67 67 65 72 73 2e 0a 20 20 3c 2f 70 3e 3c 2f 6c  ggers..  </p></l
e2d0: 69 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68  i>.</ul>..<tcl>h
e2e0: 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e 73 74 65  d_fragment inste
e2f0: 61 64 5f 6f 66 5f 74 72 69 67 67 65 72 20 7b 49  ad_of_trigger {I
e300: 4e 53 54 45 41 44 20 4f 46 7d 20 7b 49 4e 53 54  NSTEAD OF} {INST
e310: 45 41 44 20 4f 46 20 74 72 69 67 67 65 72 7d 3c  EAD OF trigger}<
e320: 2f 74 63 6c 3e 0a 3c 68 33 3e 49 4e 53 54 45 41  /tcl>.<h3>INSTEA
e330: 44 20 4f 46 20 74 72 69 67 67 65 72 73 3c 2f 68  D OF triggers</h
e340: 33 3e 0a 0a 3c 70 3e 5e 54 72 69 67 67 65 72 73  3>..<p>^Triggers
e350: 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 20   may be created 
e360: 6f 6e 20 5b 76 69 65 77 73 5d 2c 20 61 73 20 77  on [views], as w
e370: 65 6c 6c 20 61 73 20 6f 72 64 69 6e 61 72 79 20  ell as ordinary 
e380: 74 61 62 6c 65 73 2c 20 62 79 0a 73 70 65 63 69  tables, by.speci
e390: 66 79 69 6e 67 20 49 4e 53 54 45 41 44 20 4f 46  fying INSTEAD OF
e3a0: 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54   in the CREATE T
e3b0: 52 49 47 47 45 52 20 73 74 61 74 65 6d 65 6e 74  RIGGER statement
e3c0: 2e 20 0a 5e 49 66 20 6f 6e 65 20 6f 72 20 6d 6f  . .^If one or mo
e3d0: 72 65 20 4f 4e 20 49 4e 53 45 52 54 2c 20 4f 4e  re ON INSERT, ON
e3e0: 20 44 45 4c 45 54 45 0a 6f 72 20 4f 4e 20 55 50   DELETE.or ON UP
e3f0: 44 41 54 45 20 74 72 69 67 67 65 72 73 20 61 72  DATE triggers ar
e400: 65 20 64 65 66 69 6e 65 64 20 6f 6e 20 61 20 76  e defined on a v
e410: 69 65 77 2c 20 74 68 65 6e 20 69 74 20 69 73 20  iew, then it is 
e420: 6e 6f 74 20 61 6e 0a 65 72 72 6f 72 20 74 6f 20  not an.error to 
e430: 65 78 65 63 75 74 65 20 61 6e 20 49 4e 53 45 52  execute an INSER
e440: 54 2c 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  T, DELETE or UPD
e450: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 6f 6e  ATE statement on
e460: 20 74 68 65 20 76 69 65 77 2c 20 0a 72 65 73 70   the view, .resp
e470: 65 63 74 69 76 65 6c 79 2e 20 20 5e 49 6e 73 74  ectively.  ^Inst
e480: 65 61 64 2c 0a 65 78 65 63 75 74 69 6e 67 20 61  ead,.executing a
e490: 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
e4a0: 20 6f 72 20 55 50 44 41 54 45 20 6f 6e 20 74 68   or UPDATE on th
e4b0: 65 20 76 69 65 77 20 63 61 75 73 65 73 20 74 68  e view causes th
e4c0: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 74 72 69  e associated.tri
e4d0: 67 67 65 72 73 20 74 6f 20 66 69 72 65 2e 20 5e  ggers to fire. ^
e4e0: 54 68 65 20 72 65 61 6c 20 74 61 62 6c 65 73 20  The real tables 
e4f0: 75 6e 64 65 72 6c 79 69 6e 67 20 74 68 65 20 76  underlying the v
e500: 69 65 77 20 61 72 65 20 6e 6f 74 20 6d 6f 64 69  iew are not modi
e510: 66 69 65 64 0a 28 65 78 63 65 70 74 20 70 6f 73  fied.(except pos
e520: 73 69 62 6c 79 20 65 78 70 6c 69 63 69 74 6c 79  sibly explicitly
e530: 2c 20 62 79 20 61 20 74 72 69 67 67 65 72 20 70  , by a trigger p
e540: 72 6f 67 72 61 6d 29 2e 3c 2f 70 3e 0a 0a 3c 70  rogram).</p>..<p
e550: 3e 5e 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  >^Note that the 
e560: 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  [sqlite3_changes
e570: 28 29 5d 20 61 6e 64 20 5b 73 71 6c 69 74 65 33  ()] and [sqlite3
e580: 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29  _total_changes()
e590: 5d 20 69 6e 74 65 72 66 61 63 65 73 0a 64 6f 20  ] interfaces.do 
e5a0: 6e 6f 74 20 63 6f 75 6e 74 20 49 4e 53 54 45 41  not count INSTEA
e5b0: 44 20 4f 46 20 74 72 69 67 67 65 72 20 66 69 72  D OF trigger fir
e5c0: 69 6e 67 73 2c 20 62 75 74 20 74 68 65 0a 5b 63  ings, but the.[c
e5d0: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61  ount_changes pra
e5e0: 67 6d 61 5d 20 64 6f 65 73 20 63 6f 75 6e 74 20  gma] does count 
e5f0: 49 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67  INSTEAD OF trigg
e600: 65 72 20 66 69 72 69 6e 67 2e 3c 2f 70 3e 0a 0a  er firing.</p>..
e610: 3c 68 33 3e 53 6f 6d 65 20 45 78 61 6d 70 6c 65  <h3>Some Example
e620: 20 54 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a   Triggers</h3>..
e630: 3c 70 3e 5e 28 41 73 73 75 6d 69 6e 67 20 74 68  <p>^(Assuming th
e640: 61 74 20 63 75 73 74 6f 6d 65 72 20 72 65 63 6f  at customer reco
e650: 72 64 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  rds are stored i
e660: 6e 20 74 68 65 20 22 63 75 73 74 6f 6d 65 72 73  n the "customers
e670: 22 20 74 61 62 6c 65 2c 20 61 6e 64 0a 74 68 61  " table, and.tha
e680: 74 20 6f 72 64 65 72 20 72 65 63 6f 72 64 73 20  t order records 
e690: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
e6a0: 65 20 22 6f 72 64 65 72 73 22 20 74 61 62 6c 65  e "orders" table
e6b0: 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  , the following.
e6c0: 55 50 44 41 54 45 20 74 72 69 67 67 65 72 0a 65  UPDATE trigger.e
e6d0: 6e 73 75 72 65 73 20 74 68 61 74 20 61 6c 6c 20  nsures that all 
e6e0: 61 73 73 6f 63 69 61 74 65 64 20 6f 72 64 65 72  associated order
e6f0: 73 20 61 72 65 20 72 65 64 69 72 65 63 74 65 64  s are redirected
e700: 20 77 68 65 6e 20 61 20 63 75 73 74 6f 6d 65 72   when a customer
e710: 20 63 68 61 6e 67 65 73 0a 68 69 73 20 6f 72 20   changes.his or 
e720: 68 65 72 20 61 64 64 72 65 73 73 3a 3c 2f 70 3e  her address:</p>
e730: 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65 20 7b  ..<tcl>Example {
e740: 0a 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20  .CREATE TRIGGER 
e750: 75 70 64 61 74 65 5f 63 75 73 74 6f 6d 65 72 5f  update_customer_
e760: 61 64 64 72 65 73 73 20 55 50 44 41 54 45 20 4f  address UPDATE O
e770: 46 20 61 64 64 72 65 73 73 20 4f 4e 20 63 75 73  F address ON cus
e780: 74 6f 6d 65 72 73 20 0a 20 20 42 45 47 49 4e 0a  tomers .  BEGIN.
e790: 20 20 20 20 55 50 44 41 54 45 20 6f 72 64 65 72      UPDATE order
e7a0: 73 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20  s SET address = 
e7b0: 6e 65 77 2e 61 64 64 72 65 73 73 20 57 48 45 52  new.address WHER
e7c0: 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20  E customer_name 
e7d0: 3d 20 6f 6c 64 2e 6e 61 6d 65 3b 0a 20 20 45 4e  = old.name;.  EN
e7e0: 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 57  D;.}</tcl>..<p>W
e7f0: 69 74 68 20 74 68 69 73 20 74 72 69 67 67 65 72  ith this trigger
e800: 20 69 6e 73 74 61 6c 6c 65 64 2c 20 65 78 65 63   installed, exec
e810: 75 74 69 6e 67 20 74 68 65 20 73 74 61 74 65 6d  uting the statem
e820: 65 6e 74 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45  ent:</p>..<tcl>E
e830: 78 61 6d 70 6c 65 20 7b 0a 55 50 44 41 54 45 20  xample {.UPDATE 
e840: 63 75 73 74 6f 6d 65 72 73 20 53 45 54 20 61 64  customers SET ad
e850: 64 72 65 73 73 20 3d 20 27 31 20 4d 61 69 6e 20  dress = '1 Main 
e860: 53 74 2e 27 20 57 48 45 52 45 20 6e 61 6d 65 20  St.' WHERE name 
e870: 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a  = 'Jack Jones';.
e880: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 63 61 75 73  }</tcl>..<p>caus
e890: 65 73 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  es the following
e8a0: 20 74 6f 20 62 65 20 61 75 74 6f 6d 61 74 69 63   to be automatic
e8b0: 61 6c 6c 79 20 65 78 65 63 75 74 65 64 3a 3c 2f  ally executed:</
e8c0: 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d 70 6c 65  p>..<tcl>Example
e8d0: 20 7b 0a 55 50 44 41 54 45 20 6f 72 64 65 72 73   {.UPDATE orders
e8e0: 20 53 45 54 20 61 64 64 72 65 73 73 20 3d 20 27   SET address = '
e8f0: 31 20 4d 61 69 6e 20 53 74 2e 27 20 57 48 45 52  1 Main St.' WHER
e900: 45 20 63 75 73 74 6f 6d 65 72 5f 6e 61 6d 65 20  E customer_name 
e910: 3d 20 27 4a 61 63 6b 20 4a 6f 6e 65 73 27 3b 0a  = 'Jack Jones';.
e920: 7d 3c 2f 74 63 6c 3e 29 5e 0a 0a 3c 70 3e 46 6f  }</tcl>)^..<p>Fo
e930: 72 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20  r an example of 
e940: 61 6e 20 49 4e 53 54 45 41 44 20 4f 46 20 74 72  an INSTEAD OF tr
e950: 69 67 67 65 72 2c 20 63 6f 6e 73 69 64 65 72 20  igger, consider 
e960: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63  the following sc
e970: 68 65 6d 61 3a 0a 0a 3c 74 63 6c 3e 45 78 61 6d  hema:..<tcl>Exam
e980: 70 6c 65 20 7b 0a 43 52 45 41 54 45 20 54 41 42  ple {.CREATE TAB
e990: 4c 45 20 63 75 73 74 6f 6d 65 72 28 0a 20 20 63  LE customer(.  c
e9a0: 75 73 74 5f 69 64 20 49 4e 54 45 47 45 52 20 50  ust_id INTEGER P
e9b0: 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 63 75  RIMARY KEY,.  cu
e9c0: 73 74 5f 6e 61 6d 65 20 54 45 58 54 2c 0a 20 20  st_name TEXT,.  
e9d0: 63 75 73 74 5f 61 64 64 72 20 54 45 58 54 0a 29  cust_addr TEXT.)
e9e0: 3b 0a 43 52 45 41 54 45 20 56 49 45 57 20 63 75  ;.CREATE VIEW cu
e9f0: 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 41  stomer_address A
ea00: 53 0a 20 20 20 53 45 4c 45 43 54 20 63 75 73 74  S.   SELECT cust
ea10: 5f 69 64 2c 20 63 75 73 74 5f 61 64 64 72 20 46  _id, cust_addr F
ea20: 52 4f 4d 20 63 75 73 74 6f 6d 65 72 3b 0a 43 52  ROM customer;.CR
ea30: 45 41 54 45 20 54 52 49 47 47 45 52 20 63 75 73  EATE TRIGGER cus
ea40: 74 5f 61 64 64 72 5f 63 68 6e 67 0a 49 4e 53 54  t_addr_chng.INST
ea50: 45 41 44 20 4f 46 20 55 50 44 41 54 45 20 4f 46  EAD OF UPDATE OF
ea60: 20 63 75 73 74 5f 61 64 64 72 20 4f 4e 20 63 75   cust_addr ON cu
ea70: 73 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 0a 42  stomer_address.B
ea80: 45 47 49 4e 0a 20 20 55 50 44 41 54 45 20 63 75  EGIN.  UPDATE cu
ea90: 73 74 6f 6d 65 72 20 53 45 54 20 63 75 73 74 5f  stomer SET cust_
eaa0: 61 64 64 72 3d 4e 45 57 2e 63 75 73 74 5f 61 64  addr=NEW.cust_ad
eab0: 64 72 0a 20 20 20 57 48 45 52 45 20 63 75 73 74  dr.   WHERE cust
eac0: 5f 69 64 3d 4e 45 57 2e 63 75 73 74 5f 69 64 3b  _id=NEW.cust_id;
ead0: 0a 45 4e 44 3b 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c  .END;.}</tcl>..<
eae0: 70 3e 57 69 74 68 20 74 68 65 20 73 63 68 65 6d  p>With the schem
eaf0: 61 20 61 62 6f 76 65 2c 20 61 20 73 74 61 74 65  a above, a state
eb00: 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d  ment of the form
eb10: 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 45 78 61 6d  :</p>..<tcl>Exam
eb20: 70 6c 65 20 7b 0a 55 50 44 41 54 45 20 63 75 73  ple {.UPDATE cus
eb30: 74 6f 6d 65 72 5f 61 64 64 72 65 73 73 20 53 45  tomer_address SE
eb40: 54 20 63 75 73 74 5f 61 64 64 72 3d 24 6e 65 77  T cust_addr=$new
eb50: 5f 61 64 64 72 65 73 73 20 57 48 45 52 45 20 63  _address WHERE c
eb60: 75 73 74 5f 69 64 3d 24 63 75 73 74 5f 69 64 3b  ust_id=$cust_id;
eb70: 0a 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 75  .}</tcl>..<p>Cau
eb80: 73 65 73 20 74 68 65 20 63 75 73 74 6f 6d 65 72  ses the customer
eb90: 2e 63 75 73 74 5f 61 64 64 72 20 66 69 65 6c 64  .cust_addr field
eba0: 20 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 66   to be updated f
ebb0: 6f 72 20 61 20 73 70 65 63 69 66 69 63 0a 63 75  or a specific.cu
ebc0: 73 74 6f 6d 65 72 20 65 6e 74 72 79 20 74 68 61  stomer entry tha
ebd0: 74 20 68 61 73 20 63 75 73 74 6f 6d 65 72 2e 63  t has customer.c
ebe0: 75 73 74 5f 69 64 20 65 71 75 61 6c 20 74 6f 20  ust_id equal to 
ebf0: 74 68 65 20 24 63 75 73 74 5f 69 64 20 70 61 72  the $cust_id par
ec00: 61 6d 65 74 65 72 2e 0a 4e 6f 74 65 20 68 6f 77  ameter..Note how
ec10: 20 74 68 65 20 76 61 6c 75 65 73 20 61 73 73 69   the values assi
ec20: 67 6e 65 64 20 74 6f 20 74 68 65 20 76 69 65 77  gned to the view
ec30: 20 61 72 65 20 6d 61 64 65 20 61 76 61 69 6c 61   are made availa
ec40: 62 6c 65 20 61 73 20 66 69 65 6c 64 0a 69 6e 20  ble as field.in 
ec50: 74 68 65 20 73 70 65 63 69 61 6c 20 22 4e 45 57  the special "NEW
ec60: 22 20 74 61 62 6c 65 20 77 69 74 68 69 6e 20 74  " table within t
ec70: 68 65 20 74 72 69 67 67 65 72 20 62 6f 64 79 2e  he trigger body.
ec80: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
ec90: 61 67 6d 65 6e 74 20 75 6e 64 65 66 5f 62 65 66  agment undef_bef
eca0: 6f 72 65 20 7b 75 6e 64 65 66 69 6e 65 64 20 42  ore {undefined B
ecb0: 45 46 4f 52 45 20 74 72 69 67 67 65 72 20 62 65  EFORE trigger be
ecc0: 68 61 76 69 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  havior}</tcl>.<h
ecd0: 33 3e 43 61 75 74 69 6f 6e 73 20 4f 6e 20 54 68  3>Cautions On Th
ece0: 65 20 55 73 65 20 4f 66 20 42 45 46 4f 52 45 20  e Use Of BEFORE 
ecf0: 74 72 69 67 67 65 72 73 3c 2f 68 33 3e 0a 0a 3c  triggers</h3>..<
ed00: 70 3e 49 66 20 61 20 42 45 46 4f 52 45 20 55 50  p>If a BEFORE UP
ed10: 44 41 54 45 20 6f 72 20 42 45 46 4f 52 45 20 44  DATE or BEFORE D
ed20: 45 4c 45 54 45 20 74 72 69 67 67 65 72 20 6d 6f  ELETE trigger mo
ed30: 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74 65  difies or delete
ed40: 73 20 61 20 72 6f 77 0a 74 68 61 74 20 77 61 73  s a row.that was
ed50: 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 75 70   to have been up
ed60: 64 61 74 65 64 20 6f 72 20 64 65 6c 65 74 65 64  dated or deleted
ed70: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
ed80: 74 20 6f 66 20 74 68 65 20 73 75 62 73 65 71 75  t of the subsequ
ed90: 65 6e 74 0a 75 70 64 61 74 65 20 6f 72 20 64 65  ent.update or de
eda0: 6c 65 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69  lete operation i
edb0: 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 46 75  s undefined.  Fu
edc0: 72 74 68 65 72 6d 6f 72 65 2c 20 69 66 20 61 20  rthermore, if a 
edd0: 42 45 46 4f 52 45 20 74 72 69 67 67 65 72 0a 6d  BEFORE trigger.m
ede0: 6f 64 69 66 69 65 73 20 6f 72 20 64 65 6c 65 74  odifies or delet
edf0: 65 73 20 61 20 72 6f 77 2c 20 74 68 65 6e 20 69  es a row, then i
ee00: 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64 20 77  t is undefined w
ee10: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 41 46  hether or not AF
ee20: 54 45 52 20 74 72 69 67 67 65 72 73 0a 74 68 61  TER triggers.tha
ee30: 74 20 77 6f 75 6c 64 20 68 61 76 65 20 6f 74 68  t would have oth
ee40: 65 72 77 69 73 65 20 72 75 6e 20 6f 6e 20 74 68  erwise run on th
ee50: 6f 73 65 20 72 6f 77 73 20 77 69 6c 6c 20 69 6e  ose rows will in
ee60: 20 66 61 63 74 20 72 75 6e 2e 0a 3c 2f 70 3e 0a   fact run..</p>.
ee70: 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65 20 6f 66  .<p>The value of
ee80: 20 4e 45 57 2e 72 6f 77 69 64 20 69 73 20 75 6e   NEW.rowid is un
ee90: 64 65 66 69 6e 65 64 20 69 6e 20 61 20 42 45 46  defined in a BEF
eea0: 4f 52 45 20 49 4e 53 45 52 54 20 74 72 69 67 67  ORE INSERT trigg
eeb0: 65 72 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20  er in which.the 
eec0: 72 6f 77 69 64 20 69 73 20 6e 6f 74 20 65 78 70  rowid is not exp
eed0: 6c 69 63 69 74 6c 79 20 73 65 74 20 74 6f 20 61  licitly set to a
eee0: 6e 20 69 6e 74 65 67 65 72 2e 3c 2f 70 3e 0a 0a  n integer.</p>..
eef0: 3c 70 3e 42 65 63 61 75 73 65 20 6f 66 20 74 68  <p>Because of th
ef00: 65 20 62 65 68 61 76 69 6f 72 73 20 64 65 73 63  e behaviors desc
ef10: 72 69 62 65 64 20 61 62 6f 76 65 2c 20 70 72 6f  ribed above, pro
ef20: 67 72 61 6d 6d 65 72 73 20 61 72 65 20 65 6e 63  grammers are enc
ef30: 6f 75 72 61 67 65 64 20 74 6f 0a 70 72 65 66 65  ouraged to.prefe
ef40: 72 20 41 46 54 45 52 20 74 72 69 67 67 65 72 73  r AFTER triggers
ef50: 20 6f 76 65 72 20 42 45 46 4f 52 45 20 74 72 69   over BEFORE tri
ef60: 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  ggers.</p>..<tcl
ef70: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 61 69  >hd_fragment rai
ef80: 73 65 20 7b 52 41 49 53 45 20 66 75 6e 63 74 69  se {RAISE functi
ef90: 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  on}</tcl>.<h3>Th
efa0: 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
efb0: 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20  on</h3>..<p>^(A 
efc0: 73 70 65 63 69 61 6c 20 53 51 4c 20 66 75 6e 63  special SQL func
efd0: 74 69 6f 6e 20 52 41 49 53 45 28 29 20 6d 61 79  tion RAISE() may
efe0: 20 62 65 20 75 73 65 64 20 77 69 74 68 69 6e 20   be used within 
eff0: 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  a trigger-progra
f000: 6d 2c 29 5e 0a 77 69 74 68 20 74 68 65 20 66 6f  m,)^.with the fo
f010: 6c 6c 6f 77 69 6e 67 20 73 79 6e 74 61 78 3c 2f  llowing syntax</
f020: 70 3e 20 0a 0a 3c 74 63 6c 3e 42 75 62 62 6c 65  p> ..<tcl>Bubble
f030: 44 69 61 67 72 61 6d 20 72 61 69 73 65 2d 66 75  Diagram raise-fu
f040: 6e 63 74 69 6f 6e 3c 2f 74 63 6c 3e 0a 0a 3c 70  nction</tcl>..<p
f050: 3e 5e 28 57 68 65 6e 20 6f 6e 65 20 6f 66 20 52  >^(When one of R
f060: 41 49 53 45 28 52 4f 4c 4c 42 41 43 4b 2c 2e 2e  AISE(ROLLBACK,..
f070: 2e 29 2c 20 52 41 49 53 45 28 41 42 4f 52 54 2c  .), RAISE(ABORT,
f080: 2e 2e 2e 29 20 6f 72 20 52 41 49 53 45 28 46 41  ...) or RAISE(FA
f090: 49 4c 2c 2e 2e 2e 29 0a 69 73 20 63 61 6c 6c 65  IL,...).is calle
f0a0: 64 20 64 75 72 69 6e 67 20 74 72 69 67 67 65 72  d during trigger
f0b0: 2d 70 72 6f 67 72 61 6d 0a 65 78 65 63 75 74 69  -program.executi
f0c0: 6f 6e 2c 20 74 68 65 20 73 70 65 63 69 66 69 65  on, the specifie
f0d0: 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 5d 20  d [ON CONFLICT] 
f0e0: 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 70 65  processing is pe
f0f0: 72 66 6f 72 6d 65 64 0a 74 68 65 20 63 75 72 72  rformed.the curr
f100: 65 6e 74 20 71 75 65 72 79 20 74 65 72 6d 69 6e  ent query termin
f110: 61 74 65 73 2e 29 5e 0a 41 6e 20 65 72 72 6f 72  ates.)^.An error
f120: 20 63 6f 64 65 20 6f 66 20 5b 53 51 4c 49 54 45   code of [SQLITE
f130: 5f 43 4f 4e 53 54 52 41 49 4e 54 5d 20 69 73 20  _CONSTRAINT] is 
f140: 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
f150: 61 70 70 6c 69 63 61 74 69 6f 6e 2c 0a 61 6c 6f  application,.alo
f160: 6e 67 20 77 69 74 68 20 74 68 65 20 73 70 65 63  ng with the spec
f170: 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
f180: 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68  age.</p>..<p>^Wh
f190: 65 6e 20 52 41 49 53 45 28 49 47 4e 4f 52 45 29  en RAISE(IGNORE)
f1a0: 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65 20   is called, the 
f1b0: 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65  remainder of the
f1c0: 20 63 75 72 72 65 6e 74 20 74 72 69 67 67 65 72   current trigger
f1d0: 20 70 72 6f 67 72 61 6d 2c 0a 74 68 65 20 73 74   program,.the st
f1e0: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 63 61 75  atement that cau
f1f0: 73 65 64 20 74 68 65 20 74 72 69 67 67 65 72 20  sed the trigger 
f200: 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75  program to execu
f210: 74 65 20 61 6e 64 20 61 6e 79 20 73 75 62 73 65  te and any subse
f220: 71 75 65 6e 74 0a 74 72 69 67 67 65 72 20 70 72  quent.trigger pr
f230: 6f 67 72 61 6d 73 20 74 68 61 74 20 77 6f 75 6c  ograms that woul
f240: 64 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63  d have been exec
f250: 75 74 65 64 20 61 72 65 20 61 62 61 6e 64 6f 6e  uted are abandon
f260: 65 64 2e 20 5e 4e 6f 20 64 61 74 61 62 61 73 65  ed. ^No database
f270: 0a 63 68 61 6e 67 65 73 20 61 72 65 20 72 6f 6c  .changes are rol
f280: 6c 65 64 20 62 61 63 6b 2e 20 20 5e 49 66 20 74  led back.  ^If t
f290: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  he statement tha
f2a0: 74 20 63 61 75 73 65 64 20 74 68 65 20 74 72 69  t caused the tri
f2b0: 67 67 65 72 20 70 72 6f 67 72 61 6d 0a 74 6f 20  gger program.to 
f2c0: 65 78 65 63 75 74 65 20 69 73 20 69 74 73 65 6c  execute is itsel
f2d0: 66 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  f part of a trig
f2e0: 67 65 72 20 70 72 6f 67 72 61 6d 2c 20 74 68 65  ger program, the
f2f0: 6e 20 74 68 61 74 20 74 72 69 67 67 65 72 20 70  n that trigger p
f300: 72 6f 67 72 61 6d 0a 72 65 73 75 6d 65 73 20 65  rogram.resumes e
f310: 78 65 63 75 74 69 6f 6e 20 61 74 20 74 68 65 20  xecution at the 
f320: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
f330: 20 6e 65 78 74 20 73 74 65 70 2e 0a 3c 2f 70 3e   next step..</p>
f340: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
f350: 6e 74 20 74 65 6d 70 74 72 69 67 20 7b 54 45 4d  nt temptrig {TEM
f360: 50 20 74 72 69 67 67 65 72 73 20 6f 6e 20 6e 6f  P triggers on no
f370: 6e 2d 54 45 4d 50 20 74 61 62 6c 65 73 7d 3c 2f  n-TEMP tables}</
f380: 74 63 6c 3e 0a 3c 68 33 3e 54 45 4d 50 20 54 72  tcl>.<h3>TEMP Tr
f390: 69 67 67 65 72 73 20 6f 6e 20 4e 6f 6e 2d 54 45  iggers on Non-TE
f3a0: 4d 50 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a  MP Tables</h3>..
f3b0: 3c 70 3e 5e 28 41 20 74 72 69 67 67 65 72 20 6e  <p>^(A trigger n
f3c0: 6f 72 6d 61 6c 6c 79 20 65 78 69 73 74 73 20 69  ormally exists i
f3d0: 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
f3e0: 61 73 65 20 61 73 20 74 68 65 20 74 61 62 6c 65  ase as the table
f3f0: 20 6e 61 6d 65 64 0a 61 66 74 65 72 20 74 68 65   named.after the
f400: 20 22 4f 4e 22 20 6b 65 79 77 6f 72 64 20 69 6e   "ON" keyword in
f410: 20 74 68 65 20 43 52 45 41 54 45 20 54 52 49 47   the CREATE TRIG
f420: 47 45 52 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  GER statement.  
f430: 45 78 63 65 70 74 2c 20 69 74 20 69 73 0a 70 6f  Except, it is.po
f440: 73 73 69 62 6c 65 20 74 6f 20 63 72 65 61 74 65  ssible to create
f450: 20 61 20 54 45 4d 50 20 54 52 49 47 47 45 52 20   a TEMP TRIGGER 
f460: 6f 6e 20 61 20 74 61 62 6c 65 20 69 6e 20 61 6e  on a table in an
f470: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 2e 29  other database.)
f480: 5e 20 20 0a 53 75 63 68 20 61 20 74 72 69 67 67  ^  .Such a trigg
f490: 65 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 66 69 72  er will only fir
f4a0: 65 20 77 68 65 6e 20 63 68 61 6e 67 65 73 0a 61  e when changes.a
f4b0: 72 65 20 6d 61 64 65 20 74 6f 20 74 68 65 20 74  re made to the t
f4c0: 61 72 67 65 74 20 74 61 62 6c 65 20 62 79 20 74  arget table by t
f4d0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 74  he application t
f4e0: 68 61 74 20 64 65 66 69 6e 65 64 20 74 68 65 20  hat defined the 
f4f0: 74 72 69 67 67 65 72 2e 0a 4f 74 68 65 72 20 61  trigger..Other a
f500: 70 70 6c 69 63 61 74 69 6f 6e 73 20 74 68 61 74  pplications that
f510: 20 6d 6f 64 69 66 79 20 74 68 65 20 64 61 74 61   modify the data
f520: 62 61 73 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  base will not be
f530: 20 61 62 6c 65 20 74 6f 20 73 65 65 20 74 68 65   able to see the
f540: 0a 54 45 4d 50 20 74 72 69 67 67 65 72 20 61 6e  .TEMP trigger an
f550: 64 20 68 65 6e 63 65 20 63 61 6e 6e 6f 74 20 72  d hence cannot r
f560: 75 6e 20 74 68 65 20 74 72 69 67 67 65 72 2e 3c  un the trigger.<
f570: 2f 70 3e 0a 0a 3c 70 3e 57 68 65 6e 20 64 65 66  /p>..<p>When def
f580: 69 6e 69 6e 67 20 61 20 54 45 4d 50 20 74 72 69  ining a TEMP tri
f590: 67 67 65 72 20 6f 6e 20 61 20 6e 6f 6e 2d 54 45  gger on a non-TE
f5a0: 4d 50 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20  MP table, it is 
f5b0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 73 70 65  important to.spe
f5c0: 63 69 66 79 20 74 68 65 20 64 61 74 61 62 61 73  cify the databas
f5d0: 65 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 6e 6f  e holding the no
f5e0: 6e 2d 54 45 4d 50 20 74 61 62 6c 65 2e 20 20 46  n-TEMP table.  F
f5f0: 6f 72 20 65 78 61 6d 70 6c 65 2c 0a 69 6e 20 74  or example,.in t
f600: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
f610: 74 65 6d 65 6e 74 2c 20 69 74 20 69 73 20 69 6d  tement, it is im
f620: 70 6f 72 74 61 6e 74 20 74 6f 20 73 61 79 20 22  portant to say "
f630: 6d 61 69 6e 2e 74 61 62 31 22 20 69 6e 73 74 65  main.tab1" inste
f640: 61 64 0a 6f 66 20 6a 75 73 74 20 22 74 61 62 31  ad.of just "tab1
f650: 22 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ":</p>..<blockqu
f660: 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
f670: 20 54 45 4d 50 20 54 52 49 47 47 45 52 20 65 78   TEMP TRIGGER ex
f680: 31 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f  1 AFTER INSERT O
f690: 4e 20 3c 62 3e 6d 61 69 6e 2e 3c 2f 62 3e 74 61  N <b>main.</b>ta
f6a0: 62 31 20 42 45 47 49 4e 20 2e 2e 2e 0a 3c 2f 70  b1 BEGIN ....</p
f6b0: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
f6c0: 0a 0a 3c 70 3e 46 61 69 6c 75 72 65 20 74 6f 20  ..<p>Failure to 
f6d0: 73 70 65 63 69 66 79 20 74 68 65 20 73 63 68 65  specify the sche
f6e0: 6d 61 20 6e 61 6d 65 20 6f 6e 20 74 68 65 20 74  ma name on the t
f6f0: 61 72 67 65 74 20 74 61 62 6c 65 20 63 6f 75 6c  arget table coul
f700: 64 20 72 65 73 75 6c 74 0a 69 6e 20 74 68 65 20  d result.in the 
f710: 54 45 4d 50 20 74 72 69 67 67 65 72 20 62 65 69  TEMP trigger bei
f720: 6e 67 20 72 65 61 74 74 61 63 68 65 64 20 74 6f  ng reattached to
f730: 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 74 68   a table with th
f740: 65 20 73 61 6d 65 20 6e 61 6d 65 20 69 6e 0a 61  e same name in.a
f750: 6e 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20  nother database 
f760: 77 68 65 6e 65 76 65 72 20 61 6e 79 20 73 63 68  whenever any sch
f770: 65 6d 61 20 63 68 61 6e 67 65 20 6f 63 63 75 72  ema change occur
f780: 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 0a 23 23  s.</p>..<tcl>.##
f790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f7a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f7b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
f7e0: 63 74 69 6f 6e 20 7b 43 52 45 41 54 45 20 56 49  ction {CREATE VI
f7f0: 45 57 7d 20 7b 63 72 65 61 74 65 76 69 65 77 7d  EW} {createview}
f800: 20 7b 7b 43 52 45 41 54 45 20 56 49 45 57 7d 20   {{CREATE VIEW} 
f810: 76 69 65 77 20 56 49 45 57 20 2a 76 69 65 77 73  view VIEW *views
f820: 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
f830: 6c 65 44 69 61 67 72 61 6d 20 63 72 65 61 74 65  leDiagram create
f840: 2d 76 69 65 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c  -view-stmt.</tcl
f850: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 43 52 45 41 54  >..<p>^The CREAT
f860: 45 20 56 49 45 57 20 63 6f 6d 6d 61 6e 64 20 61  E VIEW command a
f870: 73 73 69 67 6e 73 20 61 20 6e 61 6d 65 20 74 6f  ssigns a name to
f880: 20 61 20 70 72 65 2d 70 61 63 6b 61 67 65 64 20   a pre-packaged 
f890: 0a 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d  .[SELECT] statem
f8a0: 65 6e 74 2e 20 0a 5e 4f 6e 63 65 20 74 68 65 20  ent. .^Once the 
f8b0: 76 69 65 77 20 69 73 20 63 72 65 61 74 65 64 2c  view is created,
f8c0: 20 69 74 20 63 61 6e 20 62 65 20 75 73 65 64 20   it can be used 
f8d0: 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
f8e0: 73 65 0a 6f 66 20 61 6e 6f 74 68 65 72 20 5b 53  se.of another [S
f8f0: 45 4c 45 43 54 5d 20 69 6e 20 70 6c 61 63 65 20  ELECT] in place 
f900: 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e  of a table name.
f910: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68  .</p>..<p>^If th
f920: 65 20 22 54 45 4d 50 22 20 6f 72 20 22 54 45 4d  e "TEMP" or "TEM
f930: 50 4f 52 41 52 59 22 20 6b 65 79 77 6f 72 64 20  PORARY" keyword 
f940: 6f 63 63 75 72 73 20 69 6e 20 62 65 74 77 65 65  occurs in betwee
f950: 6e 20 22 43 52 45 41 54 45 22 0a 61 6e 64 20 22  n "CREATE".and "
f960: 56 49 45 57 22 20 74 68 65 6e 20 74 68 65 20 76  VIEW" then the v
f970: 69 65 77 20 74 68 61 74 20 69 73 20 63 72 65 61  iew that is crea
f980: 74 65 64 20 69 73 20 6f 6e 6c 79 20 76 69 73 69  ted is only visi
f990: 62 6c 65 20 74 6f 20 74 68 65 0a 5b 64 61 74 61  ble to the.[data
f9a0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
f9b0: 20 74 68 61 74 20 63 72 65 61 74 65 64 20 69 74   that created it
f9c0: 20 61 6e 64 20 69 73 20 61 75 74 6f 6d 61 74 69   and is automati
f9d0: 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 20 77 68  cally deleted wh
f9e0: 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65 20  en.the database 
f9f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c  connection is cl
fa00: 6f 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  osed.</p>..<p> ^
fa10: 49 66 20 61 20 3c 79 79 74 65 72 6d 3e 73 63 68  If a <yyterm>sch
fa20: 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ema-name</yyterm
fa30: 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  > is specified, 
fa40: 74 68 65 6e 20 74 68 65 20 76 69 65 77 20 0a 69  then the view .i
fa50: 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  s created in the
fa60: 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62   specified datab
fa70: 61 73 65 2e 0a 5e 49 74 20 69 73 20 61 6e 20 65  ase..^It is an e
fa80: 72 72 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20  rror to specify 
fa90: 62 6f 74 68 20 61 20 3c 79 79 74 65 72 6d 3e 73  both a <yyterm>s
faa0: 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65  chema-name</yyte
fab0: 72 6d 3e 0a 61 6e 64 20 74 68 65 20 54 45 4d 50  rm>.and the TEMP
fac0: 20 6b 65 79 77 6f 72 64 20 6f 6e 20 61 20 56 49   keyword on a VI
fad0: 45 57 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 3c  EW, unless the <
fae0: 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61  yyterm>schema-na
faf0: 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 0a 69 73 20  me</yyterm> .is 
fb00: 22 74 65 6d 70 22 2e 0a 5e 49 66 20 6e 6f 20 73  "temp"..^If no s
fb10: 63 68 65 6d 61 20 6e 61 6d 65 20 69 73 20 73 70  chema name is sp
fb20: 65 63 69 66 69 65 64 2c 20 61 6e 64 20 74 68 65  ecified, and the
fb30: 20 54 45 4d 50 20 6b 65 79 77 6f 72 64 20 69 73   TEMP keyword is
fb40: 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 0a 74 68   not present,.th
fb50: 65 20 56 49 45 57 20 69 73 20 63 72 65 61 74 65  e VIEW is create
fb60: 64 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  d in the main da
fb70: 74 61 62 61 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  tabase.</p>..<p>
fb80: 5e 59 6f 75 20 63 61 6e 6e 6f 74 20 5b 44 45 4c  ^You cannot [DEL
fb90: 45 54 45 5d 2c 20 5b 49 4e 53 45 52 54 5d 2c 20  ETE], [INSERT], 
fba0: 6f 72 20 5b 55 50 44 41 54 45 5d 20 61 20 76 69  or [UPDATE] a vi
fbb0: 65 77 2e 20 20 5e 56 69 65 77 73 20 61 72 65 20  ew.  ^Views are 
fbc0: 72 65 61 64 2d 6f 6e 6c 79 20 0a 69 6e 20 53 51  read-only .in SQ
fbd0: 4c 69 74 65 2e 20 20 5e 48 6f 77 65 76 65 72 2c  Lite.  ^However,
fbe0: 20 69 6e 20 6d 61 6e 79 20 63 61 73 65 73 20 79   in many cases y
fbf0: 6f 75 20 63 61 6e 20 75 73 65 20 61 6e 0a 5b 49  ou can use an.[I
fc00: 4e 53 54 45 41 44 20 4f 46 20 74 72 69 67 67 65  NSTEAD OF trigge
fc10: 72 5d 20 6f 6e 20 74 68 65 20 76 69 65 77 20 74  r] on the view t
fc20: 6f 20 61 63 63 6f 6d 70 6c 69 73 68 20 0a 74 68  o accomplish .th
fc30: 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20 20 5e  e same thing.  ^
fc40: 56 69 65 77 73 20 61 72 65 20 72 65 6d 6f 76 65  Views are remove
fc50: 64 20 0a 77 69 74 68 20 74 68 65 20 5b 44 52 4f  d .with the [DRO
fc60: 50 20 56 49 45 57 5d 20 63 6f 6d 6d 61 6e 64 2e  P VIEW] command.
fc70: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 3c  </p>..<p>^If a <
fc80: 79 79 74 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61  yyterm>column-na
fc90: 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6c 69 73 74  me</yyterm> list
fca0: 20 66 6f 6c 6c 6f 77 73 20 0a 74 68 65 20 3c 79   follows .the <y
fcb0: 79 74 65 72 6d 3e 76 69 65 77 2d 6e 61 6d 65 3c  yterm>view-name<
fcc0: 2f 79 79 74 65 72 6d 3e 2c 20 74 68 65 6e 20 74  /yyterm>, then t
fcd0: 68 61 74 20 6c 69 73 74 20 64 65 74 65 72 6d 69  hat list determi
fce0: 6e 65 73 0a 74 68 65 20 6e 61 6d 65 73 20 6f 66  nes.the names of
fcf0: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   the columns for
fd00: 20 74 68 65 20 76 69 65 77 2e 20 20 5e 49 66 20   the view.  ^If 
fd10: 74 68 65 20 3c 79 79 74 65 72 6d 3e 63 6f 6c 75  the <yyterm>colu
fd20: 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  mn-name</yyterm>
fd30: 0a 6c 69 73 74 20 69 73 20 6f 6d 69 74 74 65 64  .list is omitted
fd40: 2c 20 74 68 65 6e 20 74 68 65 20 6e 61 6d 65 73  , then the names
fd50: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
fd60: 69 6e 20 74 68 65 20 76 69 65 77 20 61 72 65 20  in the view are 
fd70: 64 65 72 69 76 65 64 0a 66 72 6f 6d 20 74 68 65  derived.from the
fd80: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 72 65   names of the re
fd90: 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73  sult-set columns
fda0: 20 69 6e 20 74 68 65 20 5b 73 65 6c 65 63 74 2d   in the [select-
fdb0: 73 74 6d 74 5d 2e 0a 4e 6f 74 65 20 74 68 61 74  stmt]..Note that
fdc0: 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 63 6f 6c   the <yyterm>col
fdd0: 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  umn-name</yyterm
fde0: 3e 20 6c 69 73 74 20 73 79 6e 74 61 78 20 69 73  > list syntax is
fdf0: 20 6f 6e 6c 79 0a 73 75 70 70 6f 72 74 65 64 20   only.supported 
fe00: 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  in SQLite versio
fe10: 6e 73 20 33 2e 39 2e 30 20 28 5b 64 61 74 65 6f  ns 3.9.0 ([dateo
fe20: 66 3a 33 2e 39 2e 30 5d 29 20 61 6e 64 20 6c 61  f:3.9.0]) and la
fe30: 74 65 72 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  ter...<tcl>.####
fe40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fe50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fe60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fe70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fe80: 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
fe90: 6f 6e 20 7b 43 52 45 41 54 45 20 56 49 52 54 55  on {CREATE VIRTU
fea0: 41 4c 20 54 41 42 4c 45 7d 20 7b 63 72 65 61 74  AL TABLE} {creat
feb0: 65 76 74 61 62 7d 20 7b 7b 43 52 45 41 54 45 20  evtab} {{CREATE 
fec0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 7d 7d 0a  VIRTUAL TABLE}}.
fed0: 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
fee0: 44 69 61 67 72 61 6d 20 63 72 65 61 74 65 2d 76  Diagram create-v
fef0: 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d  irtual-table-stm
ff00: 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 5b  t.</tcl>..<p>A [
ff10: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20 69  virtual table] i
ff20: 73 20 61 6e 20 69 6e 74 65 72 66 61 63 65 20 74  s an interface t
ff30: 6f 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 73 74  o an external st
ff40: 6f 72 61 67 65 20 6f 72 20 63 6f 6d 70 75 74 61  orage or computa
ff50: 74 69 6f 6e 0a 65 6e 67 69 6e 65 20 74 68 61 74  tion.engine that
ff60: 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61   appears to be a
ff70: 20 74 61 62 6c 65 20 62 75 74 20 64 6f 65 73 20   table but does 
ff80: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 73 74 6f  not actually sto
ff90: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69  re information.i
ffa0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
ffb0: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20  ile.</p>..<p>In 
ffc0: 67 65 6e 65 72 61 6c 2c 20 79 6f 75 20 63 61 6e  general, you can
ffd0: 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 77 69 74   do anything wit
ffe0: 68 20 61 20 5b 76 69 72 74 75 61 6c 20 74 61 62  h a [virtual tab
fff0: 6c 65 5d 20 74 68 61 74 20 63 61 6e 20 62 65 20  le] that can be 
10000 64 6f 6e 65 0a 77 69 74 68 20 61 6e 20 6f 72 64  done.with an ord
10010 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 65 78 63  inary table, exc
10020 65 70 74 20 74 68 61 74 20 5e 79 6f 75 20 63 61  ept that ^you ca
10030 6e 6e 6f 74 20 63 72 65 61 74 65 20 69 6e 64 69  nnot create indi
10040 63 65 73 20 6f 72 20 74 72 69 67 67 65 72 73 20  ces or triggers 
10050 6f 6e 20 61 0a 76 69 72 74 75 61 6c 20 74 61 62  on a.virtual tab
10060 6c 65 2e 20 20 5e 53 6f 6d 65 20 76 69 72 74 75  le.  ^Some virtu
10070 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
10080 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 69  ntations might i
10090 6d 70 6f 73 65 20 61 64 64 69 74 69 6f 6e 61 6c  mpose additional
100a0 0a 72 65 73 74 72 69 63 74 69 6f 6e 73 2e 20 20  .restrictions.  
100b0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 6d 61 6e  For example, man
100c0 79 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  y virtual tables
100d0 20 61 72 65 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c   are read-only.<
100e0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 3c 79 79 74  /p>..<p>The <yyt
100f0 65 72 6d 3e 6d 6f 64 75 6c 65 2d 6e 61 6d 65 3c  erm>module-name<
10100 2f 79 79 74 65 72 6d 3e 20 69 73 20 74 68 65 20  /yyterm> is the 
10110 6e 61 6d 65 20 6f 66 20 61 6e 20 6f 62 6a 65 63  name of an objec
10120 74 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  t that implement
10130 73 0a 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s.the virtual ta
10140 62 6c 65 2e 20 20 5e 54 68 65 20 3c 79 79 74 65  ble.  ^The <yyte
10150 72 6d 3e 6d 6f 64 75 6c 65 2d 6e 61 6d 65 3c 2f  rm>module-name</
10160 79 79 74 65 72 6d 3e 20 6d 75 73 74 20 62 65 20  yyterm> must be 
10170 72 65 67 69 73 74 65 72 65 64 20 77 69 74 68 0a  registered with.
10180 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62  the SQLite datab
10190 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75  ase connection u
101a0 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 63 72  sing.[sqlite3_cr
101b0 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 5d 20 6f  eate_module()] o
101c0 72 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  r [sqlite3_creat
101d0 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 5d 0a 70  e_module_v2()].p
101e0 72 69 6f 72 20 74 6f 20 69 73 73 75 69 6e 67 20  rior to issuing 
101f0 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55  the CREATE VIRTU
10200 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
10210 6e 74 2e 0a 5e 54 68 65 20 6d 6f 64 75 6c 65 20  nt..^The module 
10220 74 61 6b 65 73 20 7a 65 72 6f 20 6f 72 20 6d 6f  takes zero or mo
10230 72 65 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74  re comma-separat
10240 65 64 20 61 72 67 75 6d 65 6e 74 73 2e 0a 5e 54  ed arguments..^T
10250 68 65 20 61 72 67 75 6d 65 6e 74 73 20 63 61 6e  he arguments can
10260 20 62 65 20 6a 75 73 74 20 61 62 6f 75 74 20 61   be just about a
10270 6e 79 20 74 65 78 74 20 61 73 20 6c 6f 6e 67 20  ny text as long 
10280 61 73 20 69 74 20 68 61 73 20 62 61 6c 61 6e 63  as it has balanc
10290 65 64 0a 70 61 72 65 6e 74 68 65 73 65 73 2e 20  ed.parentheses. 
102a0 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 73 79   The argument sy
102b0 6e 74 61 78 20 69 73 20 73 75 66 66 69 63 69 65  ntax is sufficie
102c0 6e 74 6c 79 20 67 65 6e 65 72 61 6c 20 74 68 61  ntly general tha
102d0 74 20 74 68 65 0a 61 72 67 75 6d 65 6e 74 73 20  t the.arguments 
102e0 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 61  can be made to a
102f0 70 70 65 61 72 20 61 73 20 5b 63 6f 6c 75 6d 6e  ppear as [column
10300 20 64 65 66 69 6e 69 74 69 6f 6e 73 5d 20 69 6e   definitions] in
10310 20 61 20 74 72 61 64 69 74 69 6f 6e 61 6c 0a 5b   a traditional.[
10320 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74  CREATE TABLE] st
10330 61 74 65 6d 65 6e 74 2e 20 20 0a 5e 53 51 4c 69  atement.  .^SQLi
10340 74 65 20 70 61 73 73 65 73 20 74 68 65 20 6d 6f  te passes the mo
10350 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 73 20 64  dule arguments d
10360 69 72 65 63 74 6c 79 0a 74 6f 20 74 68 65 20 5b  irectly.to the [
10370 78 43 72 65 61 74 65 5d 20 61 6e 64 20 5b 78 43  xCreate] and [xC
10380 6f 6e 6e 65 63 74 5d 20 6d 65 74 68 6f 64 73 20  onnect] methods 
10390 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  of the module im
103a0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 0a 77 69 74  plementation.wit
103b0 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 70 72  hout any interpr
103c0 65 74 61 74 69 6f 6e 2e 20 20 49 74 20 69 73 20  etation.  It is 
103d0 74 68 65 20 72 65 73 70 6f 6e 73 69 62 69 6c 69  the responsibili
103e0 74 79 0a 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  ty.of the module
103f0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
10400 74 6f 20 70 61 72 73 65 20 61 6e 64 20 69 6e 74  to parse and int
10410 65 72 70 72 65 74 20 69 74 73 20 6f 77 6e 20 61  erpret its own a
10420 72 67 75 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c  rguments.</p>..<
10430 70 3e 5e 41 20 76 69 72 74 75 61 6c 20 74 61 62  p>^A virtual tab
10440 6c 65 20 69 73 20 64 65 73 74 72 6f 79 65 64 20  le is destroyed 
10450 75 73 69 6e 67 20 74 68 65 20 6f 72 64 69 6e 61  using the ordina
10460 72 79 0a 5b 44 52 4f 50 20 54 41 42 4c 45 5d 20  ry.[DROP TABLE] 
10470 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 72  statement.  Ther
10480 65 20 69 73 20 6e 6f 0a 44 52 4f 50 20 56 49 52  e is no.DROP VIR
10490 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
104a0 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ment.</p>..<tcl>
104b0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
104c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
104f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
10500 53 65 63 74 69 6f 6e 20 44 45 4c 45 54 45 20 64  Section DELETE d
10510 65 6c 65 74 65 20 7b 44 45 4c 45 54 45 20 2a 44  elete {DELETE *D
10520 45 4c 45 54 45 73 7d 0a 0a 52 65 63 75 72 73 69  ELETEs}..Recursi
10530 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
10540 64 65 6c 65 74 65 2d 73 74 6d 74 0a 3c 2f 74 63  delete-stmt.</tc
10550 6c 3e 0a 0a 3c 70 3e 54 68 65 20 44 45 4c 45 54  l>..<p>The DELET
10560 45 20 63 6f 6d 6d 61 6e 64 20 72 65 6d 6f 76 65  E command remove
10570 73 20 72 65 63 6f 72 64 73 20 66 72 6f 6d 20 74  s records from t
10580 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66  he table identif
10590 69 65 64 20 62 79 20 74 68 65 0a 20 20 20 5b 71  ied by the.   [q
105a0 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e  ualified-table-n
105b0 61 6d 65 5d 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ame]...<p>^If th
105c0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  e WHERE clause i
105d0 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 2c 20 61  s not present, a
105e0 6c 6c 20 72 65 63 6f 72 64 73 20 69 6e 20 74 68  ll records in th
105f0 65 20 74 61 62 6c 65 20 61 72 65 20 64 65 6c 65  e table are dele
10600 74 65 64 2e 0a 20 20 20 5e 49 66 20 61 20 57 48  ted..   ^If a WH
10610 45 52 45 20 63 6c 61 75 73 65 20 69 73 20 73 75  ERE clause is su
10620 70 70 6c 69 65 64 2c 20 74 68 65 6e 20 6f 6e 6c  pplied, then onl
10630 79 20 74 68 6f 73 65 20 72 6f 77 73 20 66 6f 72  y those rows for
10640 20 77 68 69 63 68 20 74 68 65 0a 20 20 20 57 48   which the.   WH
10650 45 52 45 20 63 6c 61 75 73 65 20 5b 62 6f 6f 6c  ERE clause [bool
10660 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 20  ean expression] 
10670 69 73 20 74 72 75 65 20 61 72 65 20 64 65 6c 65  is true are dele
10680 74 65 64 2e 0a 20 20 20 5e 52 6f 77 73 20 66 6f  ted..   ^Rows fo
10690 72 20 77 68 69 63 68 20 74 68 65 20 65 78 70 72  r which the expr
106a0 65 73 73 69 6f 6e 20 69 73 20 66 61 6c 73 65 20  ession is false 
106b0 6f 72 20 4e 55 4c 4c 20 61 72 65 20 72 65 74 61  or NULL are reta
106c0 69 6e 65 64 2e 0a 0a 3c 68 33 3e 52 65 73 74 72  ined...<h3>Restr
106d0 69 63 74 69 6f 6e 73 20 6f 6e 20 44 45 4c 45 54  ictions on DELET
106e0 45 20 53 74 61 74 65 6d 65 6e 74 73 20 57 69 74  E Statements Wit
106f0 68 69 6e 20 43 52 45 41 54 45 20 54 52 49 47 47  hin CREATE TRIGG
10700 45 52 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  ER</h3>..<p>The 
10710 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74 72 69  following restri
10720 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20  ctions apply to 
10730 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
10740 73 20 74 68 61 74 20 6f 63 63 75 72 20 77 69 74  s that occur wit
10750 68 69 6e 20 74 68 65 0a 20 20 20 62 6f 64 79 20  hin the.   body 
10760 6f 66 20 61 20 5b 43 52 45 41 54 45 20 54 52 49  of a [CREATE TRI
10770 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 3a  GGER] statement:
10780 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
10790 5e 54 68 65 20 3c 79 79 74 65 72 6d 3e 74 61 62  ^The <yyterm>tab
107a0 6c 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e  le-name</yyterm>
107b0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
107c0 72 74 20 6f 66 20 61 20 0a 20 20 20 20 44 45 4c  rt of a .    DEL
107d0 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 77 69  ETE statement wi
107e0 74 68 69 6e 0a 20 20 20 20 61 20 74 72 69 67 67  thin.    a trigg
107f0 65 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20  er body must be 
10800 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 20 5e 28  unqualified.  ^(
10810 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
10820 74 68 65 0a 20 20 20 20 3c 69 3e 73 63 68 65 6d  the.    <i>schem
10830 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f  a-name</i><b>.</
10840 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65  b> prefix on the
10850 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 73 20 6e   table name is n
10860 6f 74 20 61 6c 6c 6f 77 65 64 20 0a 20 20 20 20  ot allowed .    
10870 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
10880 29 5e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65  )^ ^If the table
10890 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72   to which the tr
108a0 69 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65  igger is attache
108b0 64 20 69 73 0a 20 20 20 20 6e 6f 74 20 69 6e 20  d is.    not in 
108c0 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
108d0 65 2c 20 74 68 65 6e 20 44 45 4c 45 54 45 20 73  e, then DELETE s
108e0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
108f0 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20   the trigger.   
10900 20 62 6f 64 79 20 6d 75 73 74 20 6f 70 65 72 61   body must opera
10910 74 65 20 6f 6e 20 74 61 62 6c 65 73 20 77 69 74  te on tables wit
10920 68 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  hin the same dat
10930 61 62 61 73 65 20 61 73 20 69 74 2e 20 5e 49 66  abase as it. ^If
10940 20 74 68 65 20 74 61 62 6c 65 0a 20 20 20 20 74   the table.    t
10950 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
10960 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20  ger is attached 
10970 69 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64  is in the TEMP d
10980 61 74 61 62 61 73 65 2c 20 74 68 65 6e 20 74 68  atabase, then th
10990 65 0a 20 20 20 20 75 6e 71 75 61 6c 69 66 69 65  e.    unqualifie
109a0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
109b0 62 6c 65 20 62 65 69 6e 67 20 64 65 6c 65 74 65  ble being delete
109c0 64 20 69 73 20 72 65 73 6f 6c 76 65 64 20 69 6e  d is resolved in
109d0 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73   the same way as
109e0 0a 20 20 20 20 69 74 20 69 73 20 66 6f 72 20 61  .    it is for a
109f0 20 74 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65   top-level state
10a00 6d 65 6e 74 20 28 62 79 20 73 65 61 72 63 68 69  ment (by searchi
10a10 6e 67 20 66 69 72 73 74 20 74 68 65 20 54 45 4d  ng first the TEM
10a20 50 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 6e  P database, then
10a30 0a 20 20 20 20 74 68 65 20 6d 61 69 6e 20 64 61  .    the main da
10a40 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79  tabase, then any
10a50 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73   other databases
10a60 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
10a70 65 79 20 77 65 72 65 0a 20 20 20 20 61 74 74 61  ey were.    atta
10a80 63 68 65 64 29 2e 0a 20 20 20 20 0a 20 20 3c 6c  ched)..    .  <l
10a90 69 3e 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45  i><p>^The INDEXE
10aa0 44 20 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44  D BY and NOT IND
10ab0 45 58 45 44 20 63 6c 61 75 73 65 73 20 61 72 65  EXED clauses are
10ac0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20   not allowed on 
10ad0 44 45 4c 45 54 45 0a 20 20 20 20 73 74 61 74 65  DELETE.    state
10ae0 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
10af0 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c  ggers.</p>..  <l
10b00 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  i><p>^The LIMIT 
10b10 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
10b20 75 73 65 73 20 28 64 65 73 63 72 69 62 65 64 20  uses (described 
10b30 62 65 6c 6f 77 29 20 61 72 65 20 75 6e 73 75 70  below) are unsup
10b40 70 6f 72 74 65 64 20 66 6f 72 0a 20 20 20 20 44  ported for.    D
10b50 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 73  ELETE statements
10b60 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
10b70 2e 3c 2f 70 3e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33  .</p>.</ul>..<h3
10b80 3e 4f 70 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20  >Optional LIMIT 
10b90 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
10ba0 75 73 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  uses</h3>..<p>^(
10bb0 49 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  If SQLite is com
10bc0 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 5b  piled with the [
10bd0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
10be0 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
10bf0 54 5d 0a 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  T].compile-time 
10c00 6f 70 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  option, then the
10c10 20 73 79 6e 74 61 78 20 6f 66 20 74 68 65 20 44   syntax of the D
10c20 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
10c30 69 73 0a 65 78 74 65 6e 64 65 64 20 62 79 20 74  is.extended by t
10c40 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6f  he addition of o
10c50 70 74 69 6f 6e 61 6c 20 4f 52 44 45 52 20 42 59  ptional ORDER BY
10c60 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73   and LIMIT claus
10c70 65 73 3a 29 5e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  es:)^</p>..<tcl>
10c80 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 64 65  BubbleDiagram de
10c90 6c 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65  lete-stmt-limite
10ca0 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 49 66 20  d</tcl>..<p>^If 
10cb0 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65  a DELETE stateme
10cc0 6e 74 20 68 61 73 20 61 20 4c 49 4d 49 54 20 63  nt has a LIMIT c
10cd0 6c 61 75 73 65 2c 20 74 68 65 20 6d 61 78 69 6d  lause, the maxim
10ce0 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  um number of row
10cf0 73 20 74 68 61 74 0a 77 69 6c 6c 20 62 65 20 64  s that.will be d
10d00 65 6c 65 74 65 64 20 69 73 20 66 6f 75 6e 64 20  eleted is found 
10d10 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
10d20 65 20 61 63 63 6f 6d 70 61 6e 79 69 6e 67 20 65  e accompanying e
10d30 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 63 61  xpression and ca
10d40 73 74 69 6e 67 0a 69 74 20 74 6f 20 61 6e 20 69  sting.it to an i
10d50 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 5e 49  nteger value. ^I
10d60 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  f the result of 
10d70 74 68 65 20 65 76 61 6c 75 61 74 69 6e 67 20 74  the evaluating t
10d80 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a  he LIMIT clause.
10d90 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
10da0 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
10db0 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  o an integer val
10dc0 75 65 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72  ue, it is an err
10dd0 6f 72 2e 20 5e 41 20 0a 6e 65 67 61 74 69 76 65  or. ^A .negative
10de0 20 4c 49 4d 49 54 20 76 61 6c 75 65 20 69 73 20   LIMIT value is 
10df0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 22  interpreted as "
10e00 6e 6f 20 6c 69 6d 69 74 22 2e 20 5e 28 49 66 20  no limit". ^(If 
10e10 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
10e20 6d 65 6e 74 20 0a 61 6c 73 6f 20 68 61 73 20 61  ment .also has a
10e30 6e 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c  n OFFSET clause,
10e40 20 74 68 65 6e 20 69 74 20 69 73 20 73 69 6d 69   then it is simi
10e50 6c 61 72 6c 79 20 65 76 61 6c 75 61 74 65 64 20  larly evaluated 
10e60 61 6e 64 20 63 61 73 74 20 74 6f 20 61 6e 0a 69  and cast to an.i
10e70 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 41 67  nteger value. Ag
10e80 61 69 6e 2c 20 69 74 20 69 73 20 61 6e 20 65 72  ain, it is an er
10e90 72 6f 72 20 69 66 20 74 68 65 20 76 61 6c 75 65  ror if the value
10ea0 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
10eb0 65 73 73 6c 79 0a 63 6f 6e 76 65 72 74 65 64 20  essly.converted 
10ec0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e 29 5e  to an integer.)^
10ed0 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f   ^If there is no
10ee0 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 2c 20   OFFSET clause, 
10ef0 6f 72 20 74 68 65 20 63 61 6c 63 75 6c 61 74 65  or the calculate
10f00 64 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  d.integer value 
10f10 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
10f20 20 65 66 66 65 63 74 69 76 65 20 4f 46 46 53 45   effective OFFSE
10f30 54 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2e  T value is zero.
10f40 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 44 45  ..<p>^(If the DE
10f50 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 68  LETE statement h
10f60 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63  as an ORDER BY c
10f70 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c 20  lause, then all 
10f80 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c 64 20  rows that would 
10f90 0a 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74  .be deleted in t
10fa0 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
10fb0 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
10fc0 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72 64  re sorted accord
10fd0 69 6e 67 20 74 6f 20 74 68 65 20 0a 4f 52 44 45  ing to the .ORDE
10fe0 52 20 42 59 2e 20 54 68 65 20 66 69 72 73 74 20  R BY. The first 
10ff0 3c 69 3e 4d 3c 2f 69 3e 20 72 6f 77 73 2c 20 77  <i>M</i> rows, w
11000 68 65 72 65 20 3c 69 3e 4d 3c 2f 69 3e 20 69 73  here <i>M</i> is
11010 20 74 68 65 20 76 61 6c 75 65 20 66 6f 75 6e 64   the value found
11020 20 62 79 0a 65 76 61 6c 75 61 74 69 6e 67 20 74   by.evaluating t
11030 68 65 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65  he OFFSET clause
11040 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65   expression, are
11050 20 73 6b 69 70 70 65 64 2c 20 61 6e 64 20 74 68   skipped, and th
11060 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 3c 69 3e  e following .<i>
11070 4e 3c 2f 69 3e 2c 20 77 68 65 72 65 20 3c 69 3e  N</i>, where <i>
11080 4e 3c 2f 69 3e 20 69 73 20 74 68 65 20 76 61 6c  N</i> is the val
11090 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ue of the LIMIT 
110a0 65 78 70 72 65 73 73 69 6f 6e 2c 20 61 72 65 20  expression, are 
110b0 64 65 6c 65 74 65 64 2e 29 5e 0a 5e 49 66 20 74  deleted.)^.^If t
110c0 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68  here are less th
110d0 61 6e 20 3c 69 3e 4e 3c 2f 69 3e 20 72 6f 77 73  an <i>N</i> rows
110e0 20 72 65 6d 61 69 6e 69 6e 67 20 61 66 74 65 72   remaining after
110f0 20 74 61 6b 69 6e 67 20 74 68 65 20 4f 46 46 53   taking the OFFS
11100 45 54 20 63 6c 61 75 73 65 0a 69 6e 74 6f 20 61  ET clause.into a
11110 63 63 6f 75 6e 74 2c 20 6f 72 20 69 66 20 74 68  ccount, or if th
11120 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 65  e LIMIT clause e
11130 76 61 6c 75 61 74 65 64 20 74 6f 20 61 20 6e 65  valuated to a ne
11140 67 61 74 69 76 65 20 76 61 6c 75 65 2c 20 74 68  gative value, th
11150 65 6e 20 61 6c 6c 0a 72 65 6d 61 69 6e 69 6e 67  en all.remaining
11160 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65 74 65   rows are delete
11170 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 44  d...<p>^If the D
11180 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
11190 68 61 73 20 6e 6f 20 4f 52 44 45 52 20 42 59 20  has no ORDER BY 
111a0 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c 6c  clause, then all
111b0 20 72 6f 77 73 20 74 68 61 74 0a 77 6f 75 6c 64   rows that.would
111c0 20 62 65 20 64 65 6c 65 74 65 64 20 69 6e 20 74   be deleted in t
111d0 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74 68  he absence of th
111e0 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  e LIMIT clause a
111f0 72 65 20 61 73 73 65 6d 62 6c 65 64 20 69 6e 20  re assembled in 
11200 61 6e 0a 61 72 62 69 74 72 61 72 79 20 6f 72 64  an.arbitrary ord
11210 65 72 20 62 65 66 6f 72 65 20 61 70 70 6c 79 69  er before applyi
11220 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64  ng the LIMIT and
11230 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 73 20   OFFSET clauses 
11240 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 0a 74 68  to determine .th
11250 65 20 73 75 62 73 65 74 20 74 68 61 74 20 61 72  e subset that ar
11260 65 20 61 63 74 75 61 6c 6c 79 20 64 65 6c 65 74  e actually delet
11270 65 64 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52  ed...<p>^(The OR
11280 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e  DER BY clause on
11290 20 61 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d   a DELETE statem
112a0 65 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79  ent is used only
112b0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
112c0 69 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69  ich.rows fall wi
112d0 74 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20  thin the LIMIT. 
112e0 54 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69  The order in whi
112f0 63 68 20 72 6f 77 73 20 61 72 65 20 64 65 6c 65  ch rows are dele
11300 74 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ted is arbitrary
11310 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c  .and is not infl
11320 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52  uenced by the OR
11330 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e  DER BY clause.)^
11340 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
11350 6e 74 20 74 72 75 6e 63 61 74 65 6f 70 74 20 7b  nt truncateopt {
11360 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
11370 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ation}</tcl>.<h3
11380 3e 54 68 65 20 54 72 75 6e 63 61 74 65 20 4f 70  >The Truncate Op
11390 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 68 33 3e 0a  timization</h3>.
113a0 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 57 48  .<p>^When the WH
113b0 45 52 45 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ERE is omitted f
113c0 72 6f 6d 20 61 20 44 45 4c 45 54 45 20 73 74 61  rom a DELETE sta
113d0 74 65 6d 65 6e 74 20 61 6e 64 20 74 68 65 20 74  tement and the t
113e0 61 62 6c 65 0a 62 65 69 6e 67 20 64 65 6c 65 74  able.being delet
113f0 65 64 20 68 61 73 20 6e 6f 20 74 72 69 67 67 65  ed has no trigge
11400 72 73 2c 0a 53 51 4c 69 74 65 20 75 73 65 73 20  rs,.SQLite uses 
11410 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  an optimization 
11420 74 6f 20 65 72 61 73 65 20 74 68 65 20 65 6e 74  to erase the ent
11430 69 72 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e  ire table conten
11440 74 0a 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  t.without having
11450 20 74 6f 20 76 69 73 69 74 20 65 61 63 68 20 72   to visit each r
11460 6f 77 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ow of the table 
11470 69 6e 64 69 76 69 64 75 61 6c 6c 79 2e 0a 54 68  individually..Th
11480 69 73 20 22 74 72 75 6e 63 61 74 65 22 20 6f 70  is "truncate" op
11490 74 69 6d 69 7a 61 74 69 6f 6e 20 6d 61 6b 65 73  timization makes
114a0 20 74 68 65 20 64 65 6c 65 74 65 20 72 75 6e 20   the delete run 
114b0 6d 75 63 68 20 66 61 73 74 65 72 2e 0a 50 72 69  much faster..Pri
114c0 6f 72 20 74 6f 20 53 51 4c 69 74 65 20 5b 76 65  or to SQLite [ve
114d0 72 73 69 6f 6e 20 33 2e 36 2e 35 5d 20 28 5b 64  rsion 3.6.5] ([d
114e0 61 74 65 6f 66 3a 33 2e 36 2e 35 5d 29 2c 20 74  ateof:3.6.5]), t
114f0 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69  he truncate opti
11500 6d 69 7a 61 74 69 6f 6e 0a 61 6c 73 6f 20 6d 65  mization.also me
11510 61 6e 74 20 74 68 61 74 20 74 68 65 20 5b 73 71  ant that the [sq
11520 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 5d  lite3_changes()]
11530 20 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 74 6f   and.[sqlite3_to
11540 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 5d 20 69  tal_changes()] i
11550 6e 74 65 72 66 61 63 65 73 0a 61 6e 64 20 74 68  nterfaces.and th
11560 65 20 5b 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  e [count_changes
11570 20 70 72 61 67 6d 61 5d 0a 77 69 6c 6c 20 6e 6f   pragma].will no
11580 74 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72  t actually retur
11590 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
115a0 64 65 6c 65 74 65 64 20 72 6f 77 73 2e 20 20 0a  deleted rows.  .
115b0 54 68 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73  That problem has
115c0 20 62 65 65 6e 20 66 69 78 65 64 20 61 73 20 6f   been fixed as o
115d0 66 20 5b 76 65 72 73 69 6f 6e 20 33 2e 36 2e 35  f [version 3.6.5
115e0 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 36 2e 35  ] ([dateof:3.6.5
115f0 5d 29 2e 0a 0a 3c 70 3e 5e 54 68 65 20 74 72 75  ])...<p>^The tru
11600 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a 61 74 69  ncate optimizati
11610 6f 6e 20 63 61 6e 20 62 65 20 70 65 72 6d 61 6e  on can be perman
11620 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 64 20 66  ently disabled f
11630 6f 72 20 61 6c 6c 20 71 75 65 72 69 65 73 0a 62  or all queries.b
11640 79 20 72 65 63 6f 6d 70 69 6c 69 6e 67 0a 53 51  y recompiling.SQ
11650 4c 69 74 65 20 77 69 74 68 20 74 68 65 20 5b 53  Lite with the [S
11660 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43  QLITE_OMIT_TRUNC
11670 41 54 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  ATE_OPTIMIZATION
11680 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 73  ] compile-time s
11690 77 69 74 63 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  witch.</p>..<p>T
116a0 68 65 20 74 72 75 6e 63 61 74 65 20 6f 70 74 69  he truncate opti
116b0 6d 69 7a 61 74 69 6f 6e 20 63 61 6e 20 61 6c 73  mization can als
116c0 6f 20 62 65 20 64 69 73 61 62 6c 65 64 20 61 74  o be disabled at
116d0 20 72 75 6e 74 69 6d 65 20 75 73 69 6e 67 0a 74   runtime using.t
116e0 68 65 20 5b 73 71 6c 69 74 65 33 5f 73 65 74 5f  he [sqlite3_set_
116f0 61 75 74 68 6f 72 69 7a 65 72 28 29 5d 20 69 6e  authorizer()] in
11700 74 65 72 66 61 63 65 2e 20 20 5e 49 66 20 61 6e  terface.  ^If an
11710 20 61 75 74 68 6f 72 69 7a 65 72 20 63 61 6c 6c   authorizer call
11720 62 61 63 6b 0a 72 65 74 75 72 6e 73 20 5b 53 51  back.returns [SQ
11730 4c 49 54 45 5f 49 47 4e 4f 52 45 5d 20 66 6f 72  LITE_IGNORE] for
11740 20 61 6e 20 5b 53 51 4c 49 54 45 5f 44 45 4c 45   an [SQLITE_DELE
11750 54 45 5d 20 61 63 74 69 6f 6e 20 63 6f 64 65 2c  TE] action code,
11760 20 74 68 65 6e 0a 74 68 65 20 44 45 4c 45 54 45   then.the DELETE
11770 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20   operation will 
11780 70 72 6f 63 65 65 64 20 62 75 74 20 74 68 65 20  proceed but the 
11790 74 72 75 6e 63 61 74 65 20 6f 70 74 69 6d 69 7a  truncate optimiz
117a0 61 74 69 6f 6e 20 77 69 6c 6c 0a 62 65 20 62 79  ation will.be by
117b0 70 61 73 73 65 64 20 61 6e 64 20 72 6f 77 73 20  passed and rows 
117c0 77 69 6c 6c 20 62 65 20 64 65 6c 65 74 65 64 20  will be deleted 
117d0 6f 6e 65 20 62 79 20 6f 6e 65 2e 3c 2f 70 3e 0a  one by one.</p>.
117e0 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
117f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11830 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
11840 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 7d  DETACH DATABASE}
11850 20 64 65 74 61 63 68 20 2a 44 45 54 41 43 48 0a   detach *DETACH.
11860 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
11870 44 69 61 67 72 61 6d 20 64 65 74 61 63 68 2d 73  Diagram detach-s
11880 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  tmt.</tcl>..<p>^
11890 54 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 64  This statement d
118a0 65 74 61 63 68 65 73 20 61 6e 20 61 64 64 69 74  etaches an addit
118b0 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 63  ional database c
118c0 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f  onnection previo
118d0 75 73 6c 79 20 0a 61 74 74 61 63 68 65 64 20 75  usly .attached u
118e0 73 69 6e 67 20 74 68 65 20 5b 41 54 54 41 43 48  sing the [ATTACH
118f0 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 5e  ] statement.  .^
11900 57 68 65 6e 20 6e 6f 74 20 69 6e 20 5b 73 68 61  When not in [sha
11910 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 5d 2c  red cache mode],
11920 20 0a 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65   .it is possible
11930 20 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d   to have the sam
11940 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
11950 61 74 74 61 63 68 65 64 20 6d 75 6c 74 69 70 6c  attached multipl
11960 65 20 74 69 6d 65 73 20 75 73 69 6e 67 20 0a 64  e times using .d
11970 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 2c 20  ifferent names, 
11980 61 6e 64 20 64 65 74 61 63 68 69 6e 67 20 6f 6e  and detaching on
11990 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
119a0 61 20 66 69 6c 65 20 77 69 6c 6c 20 6c 65 61 76  a file will leav
119b0 65 20 74 68 65 20 0a 6f 74 68 65 72 73 20 69 6e  e the .others in
119c0 74 61 63 74 2e 3c 2f 70 3e 0a 5e 49 6e 20 5b 73  tact.</p>.^In [s
119d0 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
119e0 5d 2c 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f  ], attempting to
119f0 20 61 74 74 61 63 68 20 74 68 65 20 73 61 6d 65   attach the same
11a00 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
11a10 6f 72 65 0a 74 68 61 6e 20 6f 6e 63 65 20 72 65  ore.than once re
11a20 73 75 6c 74 73 20 69 6e 20 61 6e 20 65 72 72 6f  sults in an erro
11a30 72 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  r....<tcl>.#####
11a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11a80 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f  #########.Sectio
11a90 6e 20 7b 44 52 4f 50 20 49 4e 44 45 58 7d 20 64  n {DROP INDEX} d
11aa0 72 6f 70 69 6e 64 65 78 20 7b 7b 44 52 4f 50 20  ropindex {{DROP 
11ab0 49 4e 44 45 58 7d 7d 0a 0a 52 65 63 75 72 73 69  INDEX}}..Recursi
11ac0 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
11ad0 64 72 6f 70 2d 69 6e 64 65 78 2d 73 74 6d 74 0a  drop-index-stmt.
11ae0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  </tcl>..<p>^The 
11af0 44 52 4f 50 20 49 4e 44 45 58 20 73 74 61 74 65  DROP INDEX state
11b00 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 6e 20  ment removes an 
11b10 69 6e 64 65 78 20 61 64 64 65 64 0a 77 69 74 68  index added.with
11b20 20 74 68 65 20 5b 43 52 45 41 54 45 20 49 4e 44   the [CREATE IND
11b30 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  EX] statement.  
11b40 54 68 65 20 69 6e 64 65 78 20 69 73 20 63 6f 6d  The index is com
11b50 70 6c 65 74 65 6c 79 20 72 65 6d 6f 76 65 64 20  pletely removed 
11b60 66 72 6f 6d 0a 74 68 65 20 64 69 73 6b 2e 20 20  from.the disk.  
11b70 54 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20  The only way to 
11b80 72 65 63 6f 76 65 72 20 74 68 65 20 69 6e 64 65  recover the inde
11b90 78 20 69 73 20 74 6f 20 72 65 65 6e 74 65 72 20  x is to reenter 
11ba0 74 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20  the.appropriate 
11bb0 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 63  [CREATE INDEX] c
11bc0 6f 6d 6d 61 6e 64 2e 3c 2f 70 3e 0a 0a 3c 74 63  ommand.</p>..<tc
11bd0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
11be0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11c20 23 0a 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20  #.Section {DROP 
11c30 54 41 42 4c 45 7d 20 64 72 6f 70 74 61 62 6c 65  TABLE} droptable
11c40 20 7b 7b 44 52 4f 50 20 54 41 42 4c 45 7d 7d 0a   {{DROP TABLE}}.
11c50 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
11c60 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 74 61 62  Diagram drop-tab
11c70 6c 65 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  le-stmt.</tcl>..
11c80 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 54 41 42  <p>^The DROP TAB
11c90 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d  LE statement rem
11ca0 6f 76 65 73 20 61 20 74 61 62 6c 65 20 61 64 64  oves a table add
11cb0 65 64 20 77 69 74 68 20 74 68 65 0a 5b 43 52 45  ed with the.[CRE
11cc0 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
11cd0 6d 65 6e 74 2e 20 20 54 68 65 20 6e 61 6d 65 20  ment.  The name 
11ce0 73 70 65 63 69 66 69 65 64 20 69 73 20 74 68 65  specified is the
11cf0 0a 74 61 62 6c 65 20 6e 61 6d 65 2e 20 20 5e 54  .table name.  ^T
11d00 68 65 20 64 72 6f 70 70 65 64 20 74 61 62 6c 65  he dropped table
11d10 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 72   is completely r
11d20 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
11d30 64 61 74 61 62 61 73 65 20 0a 73 63 68 65 6d 61  database .schema
11d40 20 61 6e 64 20 74 68 65 20 64 69 73 6b 20 66 69   and the disk fi
11d50 6c 65 2e 20 20 54 68 65 20 74 61 62 6c 65 20 63  le.  The table c
11d60 61 6e 20 6e 6f 74 20 62 65 20 72 65 63 6f 76 65  an not be recove
11d70 72 65 64 2e 20 20 0a 5e 41 6c 6c 20 69 6e 64 69  red.  .^All indi
11d80 63 65 73 20 61 6e 64 20 74 72 69 67 67 65 72 73  ces and triggers
11d90 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68  .associated with
11da0 20 74 68 65 20 74 61 62 6c 65 20 61 72 65 20 61   the table are a
11db0 6c 73 6f 20 64 65 6c 65 74 65 64 2e 3c 2f 70 3e  lso deleted.</p>
11dc0 0a 0a 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e  ..<p>^The option
11dd0 61 6c 20 49 46 20 45 58 49 53 54 53 20 63 6c 61  al IF EXISTS cla
11de0 75 73 65 20 73 75 70 70 72 65 73 73 65 73 20 74  use suppresses t
11df0 68 65 20 65 72 72 6f 72 20 74 68 61 74 20 77 6f  he error that wo
11e00 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0a 72 65 73  uld normally.res
11e10 75 6c 74 20 69 66 20 74 68 65 20 74 61 62 6c 65  ult if the table
11e20 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e   does not exist.
11e30 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 5b 66 6f  </p>..<p>^If [fo
11e40 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
11e50 61 69 6e 74 73 5d 20 61 72 65 20 65 6e 61 62 6c  aints] are enabl
11e60 65 64 2c 20 61 20 44 52 4f 50 20 54 41 42 4c 45  ed, a DROP TABLE
11e70 20 63 6f 6d 6d 61 6e 64 20 70 65 72 66 6f 72 6d   command perform
11e80 73 20 61 6e 0a 69 6d 70 6c 69 63 69 74 20 5b 44  s an.implicit [D
11e90 45 4c 45 54 45 20 7c 20 44 45 4c 45 54 45 20 46  ELETE | DELETE F
11ea0 52 4f 4d 5d 20 63 6f 6d 6d 61 6e 64 20 62 65 66  ROM] command bef
11eb0 6f 72 65 20 72 65 6d 6f 76 69 6e 67 20 74 68 65  ore removing the
11ec0 0a 74 61 62 6c 65 20 66 72 6f 6d 20 74 68 65 20  .table from the 
11ed0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
11ee0 20 5e 41 6e 79 20 74 72 69 67 67 65 72 73 20 61   ^Any triggers a
11ef0 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 74  ttached to the t
11f00 61 62 6c 65 20 61 72 65 0a 64 72 6f 70 70 65 64  able are.dropped
11f10 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
11f20 73 65 20 73 63 68 65 6d 61 20 62 65 66 6f 72 65  se schema before
11f30 20 74 68 65 20 69 6d 70 6c 69 63 69 74 20 44 45   the implicit DE
11f40 4c 45 54 45 20 46 52 4f 4d 0a 69 73 20 65 78 65  LETE FROM.is exe
11f50 63 75 74 65 64 2c 20 73 6f 20 74 68 69 73 20 63  cuted, so this c
11f60 61 6e 6e 6f 74 20 63 61 75 73 65 20 61 6e 79 20  annot cause any 
11f70 74 72 69 67 67 65 72 73 20 74 6f 20 66 69 72 65  triggers to fire
11f80 2e 20 42 79 20 63 6f 6e 74 72 61 73 74 2c 20 5e  . By contrast, ^
11f90 61 6e 0a 69 6d 70 6c 69 63 69 74 20 44 45 4c 45  an.implicit DELE
11fa0 54 45 20 46 52 4f 4d 20 64 6f 65 73 20 63 61 75  TE FROM does cau
11fb0 73 65 20 61 6e 79 20 63 6f 6e 66 69 67 75 72 65  se any configure
11fc0 64 0a 5b 66 6f 72 65 69 67 6e 20 6b 65 79 20 61  d.[foreign key a
11fd0 63 74 69 6f 6e 73 5d 20 74 6f 20 74 61 6b 65 20  ctions] to take 
11fe0 70 6c 61 63 65 2e 20 0a 5e 49 66 20 74 68 65 20  place. .^If the 
11ff0 69 6d 70 6c 69 63 69 74 20 44 45 4c 45 54 45 20  implicit DELETE 
12000 46 52 4f 4d 20 65 78 65 63 75 74 65 64 0a 61 73  FROM executed.as
12010 20 70 61 72 74 20 6f 66 20 61 20 44 52 4f 50 20   part of a DROP 
12020 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 20 76 69  TABLE command vi
12030 6f 6c 61 74 65 73 20 61 6e 79 20 69 6d 6d 65 64  olates any immed
12040 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
12050 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 0a 61 6e   constraints,.an
12060 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
12070 65 64 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  ed and the table
12080 20 69 73 20 6e 6f 74 20 64 72 6f 70 70 65 64 2e   is not dropped.
12090 20 5e 49 66 20 0a 74 68 65 20 69 6d 70 6c 69 63   ^If .the implic
120a0 69 74 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 63  it DELETE FROM c
120b0 61 75 73 65 73 20 61 6e 79 20 0a 64 65 66 65 72  auses any .defer
120c0 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  red foreign key 
120d0 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 6f 20 62  constraints to b
120e0 65 20 76 69 6f 6c 61 74 65 64 2c 20 61 6e 64 20  e violated, and 
120f0 74 68 65 20 76 69 6f 6c 61 74 69 6f 6e 73 20 73  the violations s
12100 74 69 6c 6c 0a 65 78 69 73 74 20 77 68 65 6e 20  till.exist when 
12110 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
12120 69 73 20 63 6f 6d 6d 69 74 74 65 64 2c 20 61 6e  is committed, an
12130 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
12140 65 64 20 61 74 20 74 68 65 20 74 69 6d 65 0a 6f  ed at the time.o
12150 66 20 63 6f 6d 6d 69 74 2e 0a 0a 3c 74 63 6c 3e  f commit...<tcl>
12160 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
12170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
121a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
121b0 53 65 63 74 69 6f 6e 20 7b 44 52 4f 50 20 54 52  Section {DROP TR
121c0 49 47 47 45 52 7d 20 64 72 6f 70 74 72 69 67 67  IGGER} droptrigg
121d0 65 72 20 7b 7b 44 52 4f 50 20 54 52 49 47 47 45  er {{DROP TRIGGE
121e0 52 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  R}}..RecursiveBu
121f0 62 62 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70  bbleDiagram drop
12200 2d 74 72 69 67 67 65 72 2d 73 74 6d 74 0a 3c 2f  -trigger-stmt.</
12210 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 44 52  tcl>..<p>^The DR
12220 4f 50 20 54 52 49 47 47 45 52 20 73 74 61 74 65  OP TRIGGER state
12230 6d 65 6e 74 20 72 65 6d 6f 76 65 73 20 61 20 74  ment removes a t
12240 72 69 67 67 65 72 20 63 72 65 61 74 65 64 20 62  rigger created b
12250 79 20 74 68 65 20 0a 5b 43 52 45 41 54 45 20 54  y the .[CREATE T
12260 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
12270 74 2e 20 5e 4f 6e 63 65 20 72 65 6d 6f 76 65 64  t. ^Once removed
12280 2c 20 74 68 65 20 74 72 69 67 67 65 72 20 64 65  , the trigger de
12290 66 69 6e 69 74 69 6f 6e 20 69 73 20 6e 6f 0a 6c  finition is no.l
122a0 6f 6e 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e  onger present in
122b0 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
122c0 65 72 20 28 6f 72 20 73 71 6c 69 74 65 5f 74 65  er (or sqlite_te
122d0 6d 70 5f 6d 61 73 74 65 72 29 20 74 61 62 6c 65  mp_master) table
122e0 20 61 6e 64 20 69 73 0a 6e 6f 74 20 66 69 72 65   and is.not fire
122f0 64 20 62 79 20 61 6e 79 20 73 75 62 73 65 71 75  d by any subsequ
12300 65 6e 74 20 49 4e 53 45 52 54 2c 20 55 50 44 41  ent INSERT, UPDA
12310 54 45 20 6f 72 20 44 45 4c 45 54 45 20 73 74 61  TE or DELETE sta
12320 74 65 6d 65 6e 74 73 2e 0a 0a 3c 70 3e 5e 4e 6f  tements...<p>^No
12330 74 65 20 74 68 61 74 20 74 72 69 67 67 65 72 73  te that triggers
12340 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
12350 6c 79 20 64 72 6f 70 70 65 64 20 77 68 65 6e 20  ly dropped when 
12360 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 74  the associated t
12370 61 62 6c 65 20 69 73 0a 64 72 6f 70 70 65 64 2e  able is.dropped.
12380 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
12390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
123a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
123b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
123c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
123d0 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
123e0 44 52 4f 50 20 56 49 45 57 7d 20 64 72 6f 70 76  DROP VIEW} dropv
123f0 69 65 77 20 7b 7b 44 52 4f 50 20 56 49 45 57 7d  iew {{DROP VIEW}
12400 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62  }..RecursiveBubb
12410 6c 65 44 69 61 67 72 61 6d 20 64 72 6f 70 2d 76  leDiagram drop-v
12420 69 65 77 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a  iew-stmt.</tcl>.
12430 0a 3c 70 3e 5e 54 68 65 20 44 52 4f 50 20 56 49  .<p>^The DROP VI
12440 45 57 20 73 74 61 74 65 6d 65 6e 74 20 72 65 6d  EW statement rem
12450 6f 76 65 73 20 61 20 76 69 65 77 20 63 72 65 61  oves a view crea
12460 74 65 64 20 62 79 20 74 68 65 20 5b 43 52 45 41  ted by the [CREA
12470 54 45 20 56 49 45 57 5d 20 0a 20 20 73 74 61 74  TE VIEW] .  stat
12480 65 6d 65 6e 74 2e 20 5e 54 68 65 20 76 69 65 77  ement. ^The view
12490 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 73 20 72   definition is r
124a0 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
124b0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
124c0 20 62 75 74 20 0a 20 20 6e 6f 20 61 63 74 75 61   but .  no actua
124d0 6c 20 64 61 74 61 20 69 6e 20 74 68 65 20 75 6e  l data in the un
124e0 64 65 72 6c 79 69 6e 67 20 62 61 73 65 20 74 61  derlying base ta
124f0 62 6c 65 73 20 69 73 20 6d 6f 64 69 66 69 65 64  bles is modified
12500 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 76 69 65 77  ...<p>^(The view
12510 20 74 6f 20 64 72 6f 70 20 69 73 20 69 64 65 6e   to drop is iden
12520 74 69 66 69 65 64 20 62 79 20 74 68 65 20 76 69  tified by the vi
12530 65 77 2d 6e 61 6d 65 20 61 6e 64 20 6f 70 74 69  ew-name and opti
12540 6f 6e 61 6c 20 0a 20 20 73 63 68 65 6d 61 2d 6e  onal .  schema-n
12550 61 6d 65 20 73 70 65 63 69 66 69 65 64 20 61 73  ame specified as
12560 20 70 61 72 74 20 6f 66 20 74 68 65 20 44 52 4f   part of the DRO
12570 50 20 56 49 45 57 20 73 74 61 74 65 6d 65 6e 74  P VIEW statement
12580 2e 20 54 68 69 73 20 0a 20 20 72 65 66 65 72 65  . This .  refere
12590 6e 63 65 20 69 73 20 72 65 73 6f 6c 76 65 64 20  nce is resolved 
125a0 75 73 69 6e 67 20 74 68 65 20 73 74 61 6e 64 61  using the standa
125b0 72 64 20 70 72 6f 63 65 64 75 72 65 20 66 6f 72  rd procedure for
125c0 20 5b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 75 74   [object resolut
125d0 69 6f 6e 5d 2e 29 5e 0a 0a 3c 70 3e 0a 20 20 5e  ion].)^..<p>.  ^
125e0 49 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  If the specified
125f0 20 76 69 65 77 20 63 61 6e 6e 6f 74 20 62 65 20   view cannot be 
12600 66 6f 75 6e 64 20 61 6e 64 20 74 68 65 20 49 46  found and the IF
12610 20 45 58 49 53 54 53 20 63 6c 61 75 73 65 20 69   EXISTS clause i
12620 73 20 6e 6f 74 20 0a 20 20 70 72 65 73 65 6e 74  s not .  present
12630 2c 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  , it is an error
12640 2e 20 5e 49 66 20 74 68 65 20 73 70 65 63 69 66  . ^If the specif
12650 69 65 64 20 76 69 65 77 20 63 61 6e 6e 6f 74 20  ied view cannot 
12660 62 65 20 66 6f 75 6e 64 20 61 6e 64 20 61 6e 20  be found and an 
12670 49 46 0a 20 20 45 58 49 53 54 53 20 63 6c 61 75  IF.  EXISTS clau
12680 73 65 20 69 73 20 70 72 65 73 65 6e 74 20 69 6e  se is present in
12690 20 74 68 65 20 44 52 4f 50 20 56 49 45 57 20 73   the DROP VIEW s
126a0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74  tatement, then t
126b0 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 69  he statement.  i
126c0 73 20 61 20 6e 6f 2d 6f 70 2e 0a 0a 0a 3c 74 63  s a no-op....<tc
126d0 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  l>.#############
126e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
126f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12720 23 0a 53 65 63 74 69 6f 6e 20 7b 44 61 74 61 62  #.Section {Datab
12730 61 73 65 20 4f 62 6a 65 63 74 20 4e 61 6d 65 20  ase Object Name 
12740 52 65 73 6f 6c 75 74 69 6f 6e 7d 20 7b 6e 61 6d  Resolution} {nam
12750 69 6e 67 7d 20 7b 7b 6f 62 6a 65 63 74 20 72 65  ing} {{object re
12760 73 6f 6c 75 74 69 6f 6e 7d 7d 0a 3c 2f 74 63 6c  solution}}.</tcl
12770 3e 0a 0a 3c 70 3e 0a 20 20 49 6e 20 53 51 4c 69  >..<p>.  In SQLi
12780 74 65 2c 20 61 20 64 61 74 61 62 61 73 65 20 6f  te, a database o
12790 62 6a 65 63 74 20 28 61 20 74 61 62 6c 65 2c 20  bject (a table, 
127a0 69 6e 64 65 78 2c 20 74 72 69 67 67 65 72 20 6f  index, trigger o
127b0 72 20 76 69 65 77 29 20 69 73 20 69 64 65 6e 74  r view) is ident
127c0 69 66 69 65 64 0a 20 20 62 79 20 74 68 65 20 6e  ified.  by the n
127d0 61 6d 65 20 6f 66 20 74 68 65 20 6f 62 6a 65 63  ame of the objec
127e0 74 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f  t and the name o
127f0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
12800 68 61 74 20 69 74 20 72 65 73 69 64 65 73 20 69  hat it resides i
12810 6e 2e 20 0a 20 20 44 61 74 61 62 61 73 65 20 6f  n. .  Database o
12820 62 6a 65 63 74 73 20 6d 61 79 20 72 65 73 69 64  bjects may resid
12830 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  e in the main da
12840 74 61 62 61 73 65 2c 20 74 68 65 20 74 65 6d 70  tabase, the temp
12850 20 64 61 74 61 62 61 73 65 2c 20 6f 72 20 69 6e   database, or in
12860 0a 20 20 61 6e 20 5b 41 54 54 41 43 48 7c 61 74  .  an [ATTACH|at
12870 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 5d  tached database]
12880 2e 0a 0a 3c 70 3e 0a 20 20 54 68 65 20 73 79 6e  ...<p>.  The syn
12890 74 61 78 20 6f 66 20 74 68 65 20 5b 44 52 4f 50  tax of the [DROP
128a0 20 54 41 42 4c 45 5d 2c 20 5b 44 52 4f 50 20 49   TABLE], [DROP I
128b0 4e 44 45 58 5d 2c 20 5b 44 52 4f 50 20 56 49 45  NDEX], [DROP VIE
128c0 57 5d 2c 20 5b 44 52 4f 50 20 54 52 49 47 47 45  W], [DROP TRIGGE
128d0 52 5d 2c 0a 20 20 5b 52 45 49 4e 44 45 58 5d 2c  R],.  [REINDEX],
128e0 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 61   [ALTER TABLE] a
128f0 6e 64 20 6d 61 6e 79 20 6f 74 68 65 72 20 63 6f  nd many other co
12900 6d 6d 61 6e 64 73 20 61 6c 6c 20 70 65 72 6d 69  mmands all permi
12910 74 20 74 68 65 20 75 73 65 72 20 74 6f 0a 20 20  t the user to.  
12920 73 70 65 63 69 66 79 20 61 20 64 61 74 61 62 61  specify a databa
12930 73 65 20 6f 62 6a 65 63 74 20 65 69 74 68 65 72  se object either
12940 20 62 79 20 69 74 73 20 6e 61 6d 65 20 61 6c 6f   by its name alo
12950 6e 65 2c 20 6f 72 20 62 79 20 61 20 63 6f 6d 62  ne, or by a comb
12960 69 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 69 74 73  ination of.  its
12970 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 20 6e 61   name and the na
12980 6d 65 20 6f 66 20 69 74 73 20 64 61 74 61 62 61  me of its databa
12990 73 65 2e 20 5e 28 49 66 20 6e 6f 20 64 61 74 61  se. ^(If no data
129a0 62 61 73 65 20 69 73 20 73 70 65 63 69 66 69 65  base is specifie
129b0 64 20 61 73 20 70 61 72 74 0a 20 20 6f 66 20 74  d as part.  of t
129c0 68 65 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  he object refere
129d0 6e 63 65 2c 20 74 68 65 6e 20 53 51 4c 69 74 65  nce, then SQLite
129e0 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6d 61   searches the ma
129f0 69 6e 2c 20 74 65 6d 70 20 61 6e 64 20 61 6c 6c  in, temp and all
12a00 20 61 74 74 61 63 68 65 64 0a 20 20 64 61 74 61   attached.  data
12a10 62 61 73 65 73 20 66 6f 72 20 61 6e 20 6f 62 6a  bases for an obj
12a20 65 63 74 20 77 69 74 68 20 61 20 6d 61 74 63 68  ect with a match
12a30 69 6e 67 20 6e 61 6d 65 2e 20 54 68 65 20 74 65  ing name. The te
12a40 6d 70 20 64 61 74 61 62 61 73 65 20 69 73 20 73  mp database is s
12a50 65 61 72 63 68 65 64 0a 20 20 66 69 72 73 74 2c  earched.  first,
12a60 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65   followed by the
12a70 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
12a80 66 6f 6c 6c 6f 77 65 64 20 61 6c 6c 20 61 74 74  followed all att
12a90 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
12aa0 69 6e 20 74 68 65 0a 20 20 6f 72 64 65 72 20 74  in the.  order t
12ab0 68 61 74 20 74 68 65 79 20 77 65 72 65 20 61 74  hat they were at
12ac0 74 61 63 68 65 64 2e 20 54 68 65 20 72 65 66 65  tached. The refe
12ad0 72 65 6e 63 65 20 72 65 73 6f 6c 76 65 73 20 74  rence resolves t
12ae0 6f 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  o the first matc
12af0 68 0a 20 20 66 6f 75 6e 64 2e 29 5e 20 46 6f 72  h.  found.)^ For
12b00 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c 70 72 65 3e   example:..<pre>
12b10 5e 28 0a 20 20 20 20 20 20 2f 2a 20 41 64 64 20  ^(.      /* Add 
12b20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 27 74  a table named 't
12b30 31 27 20 74 6f 20 74 68 65 20 74 65 6d 70 2c 20  1' to the temp, 
12b40 6d 61 69 6e 20 61 6e 64 20 61 6e 20 61 74 74 61  main and an atta
12b50 63 68 65 64 20 64 61 74 61 62 61 73 65 20 2a 2f  ched database */
12b60 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27 66  .      ATTACH 'f
12b70 69 6c 65 2e 64 62 27 20 41 53 20 61 75 78 3b 0a  ile.db' AS aux;.
12b80 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
12b90 4c 45 20 74 31 28 78 2c 20 79 29 3b 0a 20 20 20  LE t1(x, y);.   
12ba0 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54     CREATE TEMP T
12bb0 41 42 4c 45 20 74 31 28 78 2c 20 79 29 3b 0a 20  ABLE t1(x, y);. 
12bc0 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
12bd0 45 20 61 75 78 2e 74 31 28 78 2c 20 79 29 3b 0a  E aux.t1(x, y);.
12be0 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c  .      DROP TABL
12bf0 45 20 74 31 3b 20 20 20 20 20 20 20 20 20 2f 2a  E t1;         /*
12c00 20 44 72 6f 70 20 74 61 62 6c 65 20 69 6e 20 74   Drop table in t
12c10 65 6d 70 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  emp database */.
12c20 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45        DROP TABLE
12c30 20 74 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   t1;         /* 
12c40 44 72 6f 70 20 74 61 62 6c 65 20 69 6e 20 6d 61  Drop table in ma
12c50 69 6e 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  in database */. 
12c60 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20       DROP TABLE 
12c70 74 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  t1;         /* D
12c80 72 6f 70 20 74 61 62 6c 65 20 69 6e 20 61 75 78  rop table in aux
12c90 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 29 5e 3c   database */.)^<
12ca0 2f 70 72 65 3e 0a 0a 3c 70 3e 0a 20 20 5e 49 66  /pre>..<p>.  ^If
12cb0 20 61 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69   a schema name i
12cc0 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
12cd0 61 72 74 20 6f 66 20 61 6e 20 6f 62 6a 65 63 74  art of an object
12ce0 20 72 65 66 65 72 65 6e 63 65 2c 20 69 74 20 6d   reference, it m
12cf0 75 73 74 20 62 65 0a 20 20 65 69 74 68 65 72 20  ust be.  either 
12d00 22 6d 61 69 6e 22 2c 20 6f 72 20 22 74 65 6d 70  "main", or "temp
12d10 22 20 6f 72 20 74 68 65 20 73 63 68 65 6d 61 2d  " or the schema-
12d20 6e 61 6d 65 20 6f 66 20 61 6e 20 61 74 74 61 63  name of an attac
12d30 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 20 20  hed database..  
12d40 5e 4c 69 6b 65 20 6f 74 68 65 72 20 53 51 4c 20  ^Like other SQL 
12d50 69 64 65 6e 74 69 66 69 65 72 73 2c 20 73 63 68  identifiers, sch
12d60 65 6d 61 20 6e 61 6d 65 73 20 61 72 65 20 63 61  ema names are ca
12d70 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 2e 0a  se-insensitive..
12d80 20 20 5e 49 66 20 61 20 73 63 68 65 6d 61 20 6e    ^If a schema n
12d90 61 6d 65 20 69 73 20 73 70 65 63 69 66 69 65 64  ame is specified
12da0 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 61 74  , then only that
12db0 20 6f 6e 65 20 73 63 68 65 6d 61 20 69 73 20 73   one schema is s
12dc0 65 61 72 63 68 65 64 20 66 6f 72 0a 20 20 74 68  earched for.  th
12dd0 65 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a  e named object..
12de0 0a 3c 70 3e 0a 20 20 4d 6f 73 74 20 6f 62 6a 65  .<p>.  Most obje
12df0 63 74 20 72 65 66 65 72 65 6e 63 65 73 20 6d 61  ct references ma
12e00 79 20 6f 6e 6c 79 20 72 65 73 6f 6c 76 65 20 74  y only resolve t
12e10 6f 20 61 20 73 70 65 63 69 66 69 63 20 74 79 70  o a specific typ
12e20 65 20 6f 66 20 6f 62 6a 65 63 74 20 28 66 6f 72  e of object (for
12e30 0a 20 20 65 78 61 6d 70 6c 65 20 61 20 72 65 66  .  example a ref
12e40 65 72 65 6e 63 65 20 74 68 61 74 20 69 73 20 70  erence that is p
12e50 61 72 74 20 6f 66 20 61 20 44 52 4f 50 20 54 41  art of a DROP TA
12e60 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 6d 61  BLE statement ma
12e70 79 20 6f 6e 6c 79 20 72 65 73 6f 6c 76 65 0a 20  y only resolve. 
12e80 20 74 6f 20 61 20 74 61 62 6c 65 20 6f 62 6a 65   to a table obje
12e90 63 74 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  ct, not an index
12ea0 2c 20 74 72 69 67 67 65 72 20 6f 72 20 76 69 65  , trigger or vie
12eb0 77 29 2e 20 48 6f 77 65 76 65 72 20 69 6e 20 73  w). However in s
12ec0 6f 6d 65 20 63 6f 6e 74 65 78 74 73 20 0a 20 20  ome contexts .  
12ed0 28 65 2e 67 2e 20 5b 52 45 49 4e 44 45 58 5d 29  (e.g. [REINDEX])
12ee0 20 61 6e 20 6f 62 6a 65 63 74 20 72 65 66 65 72   an object refer
12ef0 65 6e 63 65 20 6d 61 79 20 62 65 20 72 65 73 6f  ence may be reso
12f00 6c 76 65 20 74 6f 20 6d 6f 72 65 20 74 68 61 6e  lve to more than
12f10 20 6f 6e 65 20 74 79 70 65 0a 20 20 6f 66 20 6f   one type.  of o
12f20 62 6a 65 63 74 2e 20 5e 57 68 65 6e 20 73 65 61  bject. ^When sea
12f30 72 63 68 69 6e 67 20 64 61 74 61 62 61 73 65 20  rching database 
12f40 73 63 68 65 6d 61 73 20 66 6f 72 20 61 20 6e 61  schemas for a na
12f50 6d 65 64 20 6f 62 6a 65 63 74 2c 20 6f 62 6a 65  med object, obje
12f60 63 74 73 20 6f 66 0a 20 20 74 79 70 65 73 20 74  cts of.  types t
12f70 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 75 73  hat cannot be us
12f80 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ed in the contex
12f90 74 20 6f 66 20 74 68 65 20 72 65 66 65 72 65 6e  t of the referen
12fa0 63 65 20 61 72 65 20 61 6c 77 61 79 73 20 0a 20  ce are always . 
12fb0 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e   ignored...<tcl>
12fc0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
12fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
13010 53 65 63 74 69 6f 6e 20 45 58 50 4c 41 49 4e 20  Section EXPLAIN 
13020 65 78 70 6c 61 69 6e 20 45 58 50 4c 41 49 4e 0a  explain EXPLAIN.
13030 0a 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  .BubbleDiagram s
13040 71 6c 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ql-stmt.</tcl>..
13050 3c 70 3e 5e 41 6e 20 53 51 4c 20 73 74 61 74 65  <p>^An SQL state
13060 6d 65 6e 74 20 63 61 6e 20 62 65 20 70 72 65 63  ment can be prec
13070 65 64 65 64 20 62 79 20 74 68 65 20 6b 65 79 77  eded by the keyw
13080 6f 72 64 20 22 45 58 50 4c 41 49 4e 22 20 6f 72  ord "EXPLAIN" or
13090 0a 62 79 20 74 68 65 20 70 68 72 61 73 65 20 22  .by the phrase "
130a0 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
130b0 41 4e 22 2e 20 20 5e 45 69 74 68 65 72 20 6d 6f  AN".  ^Either mo
130c0 64 69 66 69 63 61 74 69 6f 6e 20 63 61 75 73 65  dification cause
130d0 73 20 74 68 65 0a 53 51 4c 20 73 74 61 74 65 6d  s the.SQL statem
130e0 65 6e 74 20 74 6f 20 62 65 68 61 76 65 20 61 73  ent to behave as
130f0 20 61 20 71 75 65 72 79 20 61 6e 64 20 74 6f 20   a query and to 
13100 72 65 74 75 72 6e 20 69 6e 66 6f 72 6d 61 74 69  return informati
13110 6f 6e 20 61 62 6f 75 74 0a 68 6f 77 20 74 68 65  on about.how the
13120 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77   SQL statement w
13130 6f 75 6c 64 20 68 61 76 65 20 6f 70 65 72 61 74  ould have operat
13140 65 64 20 69 66 20 74 68 65 20 45 58 50 4c 41 49  ed if the EXPLAI
13150 4e 20 6b 65 79 77 6f 72 64 20 6f 72 0a 70 68 72  N keyword or.phr
13160 61 73 65 20 68 61 64 20 62 65 65 6e 20 6f 6d 69  ase had been omi
13170 74 74 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  tted.</p>..<p>Th
13180 65 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 45 58  e output from EX
13190 50 4c 41 49 4e 20 61 6e 64 20 45 58 50 4c 41 49  PLAIN and EXPLAI
131a0 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 69 73 20  N QUERY PLAN is 
131b0 69 6e 74 65 6e 64 65 64 20 66 6f 72 0a 69 6e 74  intended for.int
131c0 65 72 61 63 74 69 76 65 20 61 6e 61 6c 79 73 69  eractive analysi
131d0 73 20 61 6e 64 20 74 72 6f 75 62 6c 65 73 68 6f  s and troublesho
131e0 6f 74 69 6e 67 20 6f 6e 6c 79 2e 20 20 54 68 65  oting only.  The
131f0 20 64 65 74 61 69 6c 73 20 6f 66 20 74 68 65 20   details of the 
13200 0a 6f 75 74 70 75 74 20 66 6f 72 6d 61 74 20 61  .output format a
13210 72 65 20 73 75 62 6a 65 63 74 20 74 6f 20 63 68  re subject to ch
13220 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 72 65  ange from one re
13230 6c 65 61 73 65 20 6f 66 20 53 51 4c 69 74 65 20  lease of SQLite 
13240 74 6f 20 74 68 65 20 6e 65 78 74 2e 0a 41 70 70  to the next..App
13250 6c 69 63 61 74 69 6f 6e 73 20 73 68 6f 75 6c 64  lications should
13260 20 6e 6f 74 20 75 73 65 20 45 58 50 4c 41 49 4e   not use EXPLAIN
13270 20 6f 72 20 45 58 50 4c 41 49 4e 20 51 55 45 52   or EXPLAIN QUER
13280 59 20 50 4c 41 4e 20 73 69 6e 63 65 0a 74 68 65  Y PLAN since.the
13290 69 72 20 65 78 61 63 74 20 62 65 68 61 76 69 6f  ir exact behavio
132a0 72 20 69 73 20 76 61 72 69 61 62 6c 65 20 61 6e  r is variable an
132b0 64 20 6f 6e 6c 79 20 70 61 72 74 69 61 6c 6c 79  d only partially
132c0 20 64 6f 63 75 6d 65 6e 74 65 64 2e 3c 2f 70 3e   documented.</p>
132d0 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 45  ..<p>^When the E
132e0 58 50 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 61  XPLAIN keyword a
132f0 70 70 65 61 72 73 20 62 79 20 69 74 73 65 6c 66  ppears by itself
13300 20 69 74 20 63 61 75 73 65 73 20 74 68 65 20 73   it causes the s
13310 74 61 74 65 6d 65 6e 74 0a 74 6f 20 62 65 68 61  tatement.to beha
13320 76 65 20 61 73 20 61 20 71 75 65 72 79 20 74 68  ve as a query th
13330 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 73  at returns the s
13340 65 71 75 65 6e 63 65 20 6f 66 20 0a 5b 76 69 72  equence of .[vir
13350 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73  tual machine ins
13360 74 72 75 63 74 69 6f 6e 73 5d 20 69 74 20 77 6f  tructions] it wo
13370 75 6c 64 20 68 61 76 65 20 75 73 65 64 20 74 6f  uld have used to
13380 20 65 78 65 63 75 74 65 20 74 68 65 20 63 6f 6d   execute the com
13390 6d 61 6e 64 20 68 61 64 0a 74 68 65 20 45 58 50  mand had.the EXP
133a0 4c 41 49 4e 20 6b 65 79 77 6f 72 64 20 6e 6f 74  LAIN keyword not
133b0 20 62 65 65 6e 20 70 72 65 73 65 6e 74 2e 20 5e   been present. ^
133c0 57 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49 4e  When the EXPLAIN
133d0 20 51 55 45 52 59 20 50 4c 41 4e 20 70 68 72 61   QUERY PLAN phra
133e0 73 65 0a 61 70 70 65 61 72 73 2c 20 74 68 65 20  se.appears, the 
133f0 73 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e  statement return
13400 73 20 68 69 67 68 2d 6c 65 76 65 6c 20 69 6e 66  s high-level inf
13410 6f 72 6d 61 74 69 6f 6e 20 72 65 67 61 72 64 69  ormation regardi
13420 6e 67 20 74 68 65 20 71 75 65 72 79 0a 70 6c 61  ng the query.pla
13430 6e 20 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76  n that would hav
13440 65 20 62 65 65 6e 20 75 73 65 64 2e 0a 0a 54 68  e been used...Th
13450 65 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20  e EXPLAIN QUERY 
13460 50 4c 41 4e 20 63 6f 6d 6d 61 6e 64 20 69 73 20  PLAN command is 
13470 64 65 73 63 72 69 62 65 64 20 69 6e 20 0a 5b 65  described in .[e
13480 78 70 6c 61 69 6e 20 71 75 65 72 79 20 70 6c 61  xplain query pla
13490 6e 7c 6d 6f 72 65 20 64 65 74 61 69 6c 20 68 65  n|more detail he
134a0 72 65 5d 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  re]...<tcl>.####
134b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
134c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
134d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
134e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
134f0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
13500 6f 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 65 78  on expression ex
13510 70 72 20 7b 2a 65 78 70 72 65 73 73 69 6f 6e 20  pr {*expression 
13520 7b 65 78 70 72 65 73 73 69 6f 6e 20 73 79 6e 74  {expression synt
13530 61 78 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42  ax}}..RecursiveB
13540 75 62 62 6c 65 44 69 61 67 72 61 6d 20 65 78 70  ubbleDiagram exp
13550 72 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 69  r.</tcl>..<p>Thi
13560 73 20 73 65 63 74 69 6f 6e 20 69 73 20 64 69 66  s section is dif
13570 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20  ferent from the 
13580 6f 74 68 65 72 73 2e 20 20 4d 6f 73 74 20 6f 74  others.  Most ot
13590 68 65 72 20 73 65 63 74 69 6f 6e 73 20 6f 66 0a  her sections of.
135a0 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 74 61  this document ta
135b0 6c 6b 73 20 61 62 6f 75 74 20 61 20 70 61 72 74  lks about a part
135c0 69 63 75 6c 61 72 20 53 51 4c 20 63 6f 6d 6d 61  icular SQL comma
135d0 6e 64 2e 20 20 54 68 69 73 20 73 65 63 74 69 6f  nd.  This sectio
135e0 6e 20 64 6f 65 73 0a 6e 6f 74 20 74 61 6c 6b 20  n does.not talk 
135f0 61 62 6f 75 74 20 61 20 73 74 61 6e 64 61 6c 6f  about a standalo
13600 6e 65 20 63 6f 6d 6d 61 6e 64 20 62 75 74 20 61  ne command but a
13610 62 6f 75 74 20 22 65 78 70 72 65 73 73 69 6f 6e  bout "expression
13620 73 22 20 77 68 69 63 68 20 61 72 65 20 0a 73 75  s" which are .su
13630 62 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 6d  bcomponents of m
13640 6f 73 74 20 6f 74 68 65 72 20 63 6f 6d 6d 61 6e  ost other comman
13650 64 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ds.</p>..<tcl>hd
13660 5f 66 72 61 67 6d 65 6e 74 20 62 69 6e 61 72 79  _fragment binary
13670 6f 70 73 20 7b 62 69 6e 61 72 79 20 6f 70 65 72  ops {binary oper
13680 61 74 6f 72 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ators}</tcl>.<h3
13690 3e 4f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a  >Operators</h3>.
136a0 3c 70 3e 5e 28 53 51 4c 69 74 65 20 75 6e 64 65  <p>^(SQLite unde
136b0 72 73 74 61 6e 64 73 20 74 68 65 20 66 6f 6c 6c  rstands the foll
136c0 6f 77 69 6e 67 20 62 69 6e 61 72 79 20 6f 70 65  owing binary ope
136d0 72 61 74 6f 72 73 2c 20 69 6e 20 6f 72 64 65 72  rators, in order
136e0 20 66 72 6f 6d 0a 68 69 67 68 65 73 74 20 74 6f   from.highest to
136f0 20 6c 6f 77 65 73 74 20 70 72 65 63 65 64 65 6e   lowest preceden
13700 63 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ce:</p>..<blockq
13710 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74  uote><pre>.<font
13720 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22   color="#2c2cf0"
13730 3e 3c 62 69 67 3e 7c 7c 0a 2a 20 20 20 20 2f 20  ><big>||.*    / 
13740 20 20 20 25 0a 2b 20 20 20 20 2d 0a 26 6c 74 3b     %.+    -.&lt;
13750 26 6c 74 3b 20 20 20 26 67 74 3b 26 67 74 3b 20  &lt;   &gt;&gt; 
13760 20 20 26 61 6d 70 3b 20 20 20 20 7c 0a 26 6c 74    &amp;    |.&lt
13770 3b 20 20 20 20 26 6c 74 3b 3d 20 20 20 26 67 74  ;    &lt;=   &gt
13780 3b 20 20 20 20 26 67 74 3b 3d 0a 3d 20 20 20 20  ;    &gt;=.=    
13790 3d 3d 20 20 20 21 3d 20 20 20 26 6c 74 3b 26 67  ==   !=   &lt;&g
137a0 74 3b 20 20 20 3c 2f 62 69 67 3e 49 53 20 20 20  t;   </big>IS   
137b0 49 53 20 4e 4f 54 20 20 20 49 4e 20 20 20 4c 49  IS NOT   IN   LI
137c0 4b 45 20 20 20 47 4c 4f 42 20 20 20 4d 41 54 43  KE   GLOB   MATC
137d0 48 20 20 20 52 45 47 45 58 50 0a 41 4e 44 20 20  H   REGEXP.AND  
137e0 20 0a 4f 52 3c 2f 66 6f 6e 74 3e 0a 3c 2f 70 72   .OR</font>.</pr
137f0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
13800 5e 0a 0a 3c 70 3e 5e 28 53 75 70 70 6f 72 74 65  ^..<p>^(Supporte
13810 64 20 75 6e 61 72 79 20 70 72 65 66 69 78 20 6f  d unary prefix o
13820 70 65 72 61 74 6f 72 73 20 61 72 65 20 74 68 65  perators are the
13830 73 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  se:</p>..<blockq
13840 75 6f 74 65 3e 3c 70 72 65 3e 0a 3c 66 6f 6e 74  uote><pre>.<font
13850 20 63 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22   color="#2c2cf0"
13860 3e 3c 62 69 67 3e 2d 20 20 20 20 2b 20 20 20 20  ><big>-    +    
13870 7e 20 20 20 20 4e 4f 54 3c 2f 62 69 67 3e 3c 2f  ~    NOT</big></
13880 66 6f 6e 74 3e 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  font>.</pre></bl
13890 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 74 63  ockquote>)^..<tc
138a0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f  l>hd_fragment co
138b0 6c 6c 61 74 65 6f 70 20 7b 43 4f 4c 4c 41 54 45  llateop {COLLATE
138c0 20 6f 70 65 72 61 74 6f 72 7d 3c 2f 74 63 6c 3e   operator}</tcl>
138d0 0a 3c 70 3e 5e 54 68 65 20 43 4f 4c 4c 41 54 45  .<p>^The COLLATE
138e0 20 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20 75   operator is a u
138f0 6e 61 72 79 20 70 6f 73 74 66 69 78 0a 6f 70 65  nary postfix.ope
13900 72 61 74 6f 72 20 74 68 61 74 20 61 73 73 69 67  rator that assig
13910 6e 73 20 61 20 5b 63 6f 6c 6c 61 74 69 6e 67 20  ns a [collating 
13920 73 65 71 75 65 6e 63 65 5d 20 74 6f 20 61 6e 20  sequence] to an 
13930 65 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 54 68 65  expression..^The
13940 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f   COLLATE operato
13950 72 20 68 61 73 20 61 20 68 69 67 68 65 72 20 70  r has a higher p
13960 72 65 63 65 64 65 6e 63 65 20 28 62 69 6e 64 73  recedence (binds
13970 20 6d 6f 72 65 20 74 69 67 68 74 6c 79 29 20 74   more tightly) t
13980 68 61 6e 20 61 6e 79 0a 62 69 6e 61 72 79 20 6f  han any.binary o
13990 70 65 72 61 74 6f 72 20 61 6e 64 20 61 6e 79 20  perator and any 
139a0 75 6e 61 72 79 20 70 72 65 66 69 78 20 6f 70 65  unary prefix ope
139b0 72 61 74 6f 72 20 65 78 63 65 70 74 20 22 7e 22  rator except "~"
139c0 2e 0a 28 43 4f 4c 4c 41 54 45 20 61 6e 64 20 22  ..(COLLATE and "
139d0 7e 22 20 61 72 65 20 61 73 73 6f 63 69 61 74 69  ~" are associati
139e0 76 65 20 73 6f 20 74 68 65 69 72 20 62 69 6e 64  ve so their bind
139f0 69 6e 67 20 6f 72 64 65 72 20 64 6f 65 73 20 6e  ing order does n
13a00 6f 74 20 6d 61 74 74 65 72 2e 29 0a 5e 54 68 65  ot matter.).^The
13a10 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
13a20 6e 63 65 20 73 65 74 20 62 79 20 74 68 65 20 43  nce set by the C
13a30 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
13a40 6f 76 65 72 72 69 64 65 73 20 74 68 65 0a 63 6f  overrides the.co
13a50 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
13a60 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
13a70 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73  he COLLATE claus
13a80 65 20 69 6e 20 61 20 74 61 62 6c 65 0a 5b 63 6f  e in a table.[co
13a90 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d  lumn definition]
13aa0 2e 0a 53 65 65 20 74 68 65 20 5b 63 6f 6c 6c 61  ..See the [colla
13ab0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 7c 20 64  ting sequence| d
13ac0 65 74 61 69 6c 65 64 20 64 69 73 63 75 73 73 69  etailed discussi
13ad0 6f 6e 20 6f 6e 20 63 6f 6c 6c 61 74 69 6e 67 20  on on collating 
13ae0 73 65 71 75 65 6e 63 65 73 5d 0a 69 6e 20 74 68  sequences].in th
13af0 65 20 5b 64 61 74 61 74 79 70 65 20 7c 20 44 61  e [datatype | Da
13b00 74 61 74 79 70 65 20 49 6e 20 53 51 4c 69 74 65  tatype In SQLite
13b10 33 5d 20 64 6f 63 75 6d 65 6e 74 20 66 6f 72 20  3] document for 
13b20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
13b30 6d 61 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 74  mation..</p>..<t
13b40 63 6c 3e 68 64 5f 70 75 74 73 20 22 0a 3c 70 3e  cl>hd_puts ".<p>
13b50 5e 54 68 65 20 75 6e 61 72 79 20 6f 70 65 72 61  ^The unary opera
13b60 74 6f 72 20 5b 4f 70 65 72 61 74 6f 72 20 2b 5d  tor [Operator +]
13b70 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 5e 49   is a no-op.  ^I
13b80 74 20 63 61 6e 20 62 65 20 61 70 70 6c 69 65 64  t can be applied
13b90 0a 74 6f 20 73 74 72 69 6e 67 73 2c 20 6e 75 6d  .to strings, num
13ba0 62 65 72 73 2c 20 62 6c 6f 62 73 20 6f 72 20 4e  bers, blobs or N
13bb0 55 4c 4c 20 61 6e 64 20 69 74 20 61 6c 77 61 79  ULL and it alway
13bc0 73 20 72 65 74 75 72 6e 73 20 61 20 72 65 73 75  s returns a resu
13bd0 6c 74 0a 77 69 74 68 20 74 68 65 20 73 61 6d 65  lt.with the same
13be0 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 6f 70   value as the op
13bf0 65 72 61 6e 64 2e 3c 2f 70 3e 22 3c 2f 74 63 6c  erand.</p>"</tcl
13c00 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20  >..<p>Note that 
13c10 74 68 65 72 65 20 61 72 65 20 74 77 6f 20 76 61  there are two va
13c20 72 69 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  riations of the 
13c30 65 71 75 61 6c 73 20 61 6e 64 20 6e 6f 74 20 65  equals and not e
13c40 71 75 61 6c 73 0a 6f 70 65 72 61 74 6f 72 73 2e  quals.operators.
13c50 20 20 5e 45 71 75 61 6c 73 20 63 61 6e 20 62 65    ^Equals can be
13c60 20 65 69 74 68 65 72 0a 0a 3c 74 63 6c 3e 0a 68   either..<tcl>.h
13c70 64 5f 70 75 74 73 20 22 5b 4f 70 65 72 61 74 6f  d_puts "[Operato
13c80 72 20 3d 5d 20 6f 72 20 5b 4f 70 65 72 61 74 6f  r =] or [Operato
13c90 72 20 3d 3d 5d 2e 0a 5e 54 68 65 20 6e 6f 6e 2d  r ==]..^The non-
13ca0 65 71 75 61 6c 73 20 6f 70 65 72 61 74 6f 72 20  equals operator 
13cb0 63 61 6e 20 62 65 20 65 69 74 68 65 72 0a 5b 4f  can be either.[O
13cc0 70 65 72 61 74 6f 72 20 21 3d 5d 20 6f 72 20 5b  perator !=] or [
13cd0 4f 70 65 72 61 74 6f 72 20 7b 26 6c 74 3b 26 67  Operator {&lt;&g
13ce0 74 3b 7d 5d 2e 0a 5e 54 68 65 20 5b 4f 70 65 72  t;}]..^The [Oper
13cf0 61 74 6f 72 20 7c 7c 5d 20 6f 70 65 72 61 74 6f  ator ||] operato
13d00 72 20 69 73 20 5c 22 63 6f 6e 63 61 74 65 6e 61  r is \"concatena
13d10 74 65 5c 22 20 2d 20 69 74 20 6a 6f 69 6e 73 20  te\" - it joins 
13d20 74 6f 67 65 74 68 65 72 0a 74 68 65 20 74 77 6f  together.the two
13d30 20 73 74 72 69 6e 67 73 20 6f 66 20 69 74 73 20   strings of its 
13d40 6f 70 65 72 61 6e 64 73 2e 0a 5e 54 68 65 20 6f  operands..^The o
13d50 70 65 72 61 74 6f 72 20 5b 4f 70 65 72 61 74 6f  perator [Operato
13d60 72 20 25 5d 20 6f 75 74 70 75 74 73 20 74 68 65  r %] outputs the
13d70 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   integer value o
13d80 66 20 69 74 73 20 6c 65 66 74 20 0a 6f 70 65 72  f its left .oper
13d90 61 6e 64 20 6d 6f 64 75 6c 6f 20 69 74 73 20 72  and modulo its r
13da0 69 67 68 74 20 6f 70 65 72 61 6e 64 2e 20 20 49  ight operand.  I
13db0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
13dc0 68 65 0a 6f 70 65 72 61 74 6f 72 20 5b 4f 70 65  he.operator [Ope
13dd0 72 61 74 6f 72 20 25 5d 20 77 6f 72 6b 73 20 69  rator %] works i
13de0 6e 20 53 51 4c 69 74 65 20 74 68 65 20 73 61 6d  n SQLite the sam
13df0 65 20 61 73 20 69 74 20 64 6f 65 73 0a 69 6e 20  e as it does.in 
13e00 41 4e 53 49 2d 43 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ANSI-C.</p>..<p>
13e10 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61  ^The result of a
13e20 6e 79 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74  ny binary operat
13e30 6f 72 20 69 73 20 65 69 74 68 65 72 20 61 20 6e  or is either a n
13e40 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 72 20  umeric value or 
13e50 0a 4e 55 4c 4c 2c 20 65 78 63 65 70 74 20 66 6f  .NULL, except fo
13e60 72 20 74 68 65 20 5b 4f 70 65 72 61 74 6f 72 20  r the [Operator 
13e70 7c 7c 5d 20 63 6f 6e 63 61 74 65 6e 61 74 69 6f  ||] concatenatio
13e80 6e 20 6f 70 65 72 61 74 6f 72 20 77 68 69 63 68  n operator which
13e90 20 61 6c 77 61 79 73 20 0a 65 76 61 6c 75 61 74   always .evaluat
13ea0 65 73 20 74 6f 20 65 69 74 68 65 72 20 4e 55 4c  es to either NUL
13eb0 4c 20 6f 72 20 61 20 74 65 78 74 20 76 61 6c 75  L or a text valu
13ec0 65 2e 3c 2f 70 3e 22 0a 0a 68 64 5f 66 72 61 67  e.</p>"..hd_frag
13ed0 6d 65 6e 74 20 7b 69 73 69 73 6e 6f 74 7d 20 7b  ment {isisnot} {
13ee0 49 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b 49 53  IS operator} {IS
13ef0 20 4e 4f 54 20 6f 70 65 72 61 74 6f 72 7d 0a 0a   NOT operator}..
13f00 68 64 5f 70 75 74 73 20 22 3c 70 3e 5e 54 68 65  hd_puts "<p>^The
13f10 20 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d 20 61   [Operator IS] a
13f20 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b 49 53  nd [Operator {IS
13f30 20 4e 4f 54 7d 5d 20 6f 70 65 72 61 74 6f 72 73   NOT}] operators
13f40 20 77 6f 72 6b 0a 6c 69 6b 65 20 5b 4f 70 65 72   work.like [Oper
13f50 61 74 6f 72 20 3d 5d 20 61 6e 64 20 5b 4f 70 65  ator =] and [Ope
13f60 72 61 74 6f 72 20 21 3d 5d 20 65 78 63 65 70 74  rator !=] except
13f70 20 77 68 65 6e 20 6f 6e 65 20 6f 72 20 62 6f 74   when one or bot
13f80 68 20 6f 66 20 74 68 65 0a 6f 70 65 72 61 6e 64  h of the.operand
13f90 73 20 61 72 65 20 4e 55 4c 4c 2e 20 5e 49 6e 20  s are NULL. ^In 
13fa0 74 68 69 73 20 63 61 73 65 2c 20 69 66 20 62 6f  this case, if bo
13fb0 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
13fc0 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 49  NULL, then the.I
13fd0 53 20 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75  S operator evalu
13fe0 61 74 65 73 20 74 6f 20 31 20 28 74 72 75 65 29  ates to 1 (true)
13ff0 20 61 6e 64 20 74 68 65 20 49 53 20 4e 4f 54 20   and the IS NOT 
14000 6f 70 65 72 61 74 6f 72 20 65 76 61 6c 75 61 74  operator evaluat
14010 65 73 0a 74 6f 20 30 20 28 66 61 6c 73 65 29 2e  es.to 0 (false).
14020 20 5e 49 66 20 6f 6e 65 20 6f 70 65 72 61 6e 64   ^If one operand
14030 20 69 73 20 4e 55 4c 4c 20 61 6e 64 20 74 68 65   is NULL and the
14040 20 6f 74 68 65 72 20 69 73 20 6e 6f 74 2c 20 74   other is not, t
14050 68 65 6e 20 74 68 65 0a 49 53 20 6f 70 65 72 61  hen the.IS opera
14060 74 6f 72 20 65 76 61 6c 75 61 74 65 73 20 74 6f  tor evaluates to
14070 20 30 20 28 66 61 6c 73 65 29 20 61 6e 64 20 74   0 (false) and t
14080 68 65 20 49 53 20 4e 4f 54 20 6f 70 65 72 61 74  he IS NOT operat
14090 6f 72 20 69 73 20 31 20 28 74 72 75 65 29 2e 0a  or is 1 (true)..
140a0 5e 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  ^It is not possi
140b0 62 6c 65 20 66 6f 72 20 61 6e 20 49 53 20 6f 72  ble for an IS or
140c0 20 49 53 20 4e 4f 54 20 65 78 70 72 65 73 73 69   IS NOT expressi
140d0 6f 6e 20 74 6f 20 65 76 61 6c 75 61 74 65 20 74  on to evaluate t
140e0 6f 20 4e 55 4c 4c 2e 0a 5e 4f 70 65 72 61 74 6f  o NULL..^Operato
140f0 72 73 20 5b 4f 70 65 72 61 74 6f 72 20 49 53 5d  rs [Operator IS]
14100 20 61 6e 64 20 5b 4f 70 65 72 61 74 6f 72 20 7b   and [Operator {
14110 49 53 20 4e 4f 54 7d 5d 20 68 61 76 65 20 74 68  IS NOT}] have th
14120 65 20 73 61 6d 65 20 0a 70 72 65 63 65 64 65 6e  e same .preceden
14130 63 65 20 61 73 20 5b 4f 70 65 72 61 74 6f 72 20  ce as [Operator 
14140 3d 5d 2e 22 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  =]."..<tcl>hd_fr
14150 61 67 6d 65 6e 74 20 6c 69 74 76 61 6c 75 65 20  agment litvalue 
14160 7b 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 7d 3c  {literal value}<
14170 2f 74 63 6c 3e 0a 3c 68 33 3e 4c 69 74 65 72 61  /tcl>.<h3>Litera
14180 6c 20 56 61 6c 75 65 73 20 28 43 6f 6e 73 74 61  l Values (Consta
14190 6e 74 73 29 3c 2f 68 33 3e 0a 3c 70 3e 0a 41 20  nts)</h3>.<p>.A 
141a0 6c 69 74 65 72 61 6c 20 76 61 6c 75 65 20 72 65  literal value re
141b0 70 72 65 73 65 6e 74 73 20 61 20 63 6f 6e 73 74  presents a const
141c0 61 6e 74 2e 0a 5e 4c 69 74 65 72 61 6c 20 76 61  ant..^Literal va
141d0 6c 75 65 73 20 6d 61 79 20 62 65 20 69 6e 74 65  lues may be inte
141e0 67 65 72 73 2c 20 66 6c 6f 61 74 69 6e 67 20 70  gers, floating p
141f0 6f 69 6e 74 20 6e 75 6d 62 65 72 73 2c 20 73 74  oint numbers, st
14200 72 69 6e 67 73 2c 0a 42 4c 4f 42 73 2c 20 6f 72  rings,.BLOBs, or
14210 20 4e 55 4c 4c 73 2e 0a 3c 70 3e 0a 54 68 65 20   NULLs..<p>.The 
14220 73 79 6e 74 61 78 20 66 6f 72 20 69 6e 74 65 67  syntax for integ
14230 65 72 20 61 6e 64 20 66 6c 6f 61 74 69 6e 67 20  er and floating 
14240 70 6f 69 6e 74 20 6c 69 74 65 72 61 6c 73 20 28  point literals (
14250 63 6f 6c 6c 65 63 74 69 76 65 6c 79 0a 22 6e 75  collectively."nu
14260 6d 65 72 69 63 20 6c 69 74 65 72 61 6c 73 22 29  meric literals")
14270 20 69 73 20 73 68 6f 77 6e 20 62 79 20 74 68 65   is shown by the
14280 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72   following diagr
14290 61 6d 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 42 75  am:</p>..<tcl>Bu
142a0 62 62 6c 65 44 69 61 67 72 61 6d 20 6e 75 6d 65  bbleDiagram nume
142b0 72 69 63 2d 6c 69 74 65 72 61 6c 3c 2f 74 63 6c  ric-literal</tcl
142c0 3e 0a 0a 3c 70 3e 0a 5e 28 49 66 20 61 20 6e 75  >..<p>.^(If a nu
142d0 6d 65 72 69 63 20 6c 69 74 65 72 61 6c 20 68 61  meric literal ha
142e0 73 20 61 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e  s a decimal poin
142f0 74 20 6f 72 20 61 6e 20 65 78 70 6f 6e 65 6e 74  t or an exponent
14300 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65 20 6f 72  iation.clause or
14310 20 69 66 20 69 74 73 20 6d 61 67 6e 69 74 75 64   if its magnitud
14320 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 2d  e is less than -
14330 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
14340 38 30 38 20 6f 72 0a 67 72 65 61 74 65 72 20 74  808 or.greater t
14350 68 61 6e 20 39 32 32 33 33 37 32 30 33 36 38 35  han 922337203685
14360 34 37 37 35 38 30 37 2c 20 74 68 65 6e 20 69 74  4775807, then it
14370 20 69 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   is a floating p
14380 6f 69 6e 74 20 6c 69 74 65 72 61 6c 2e 0a 4f 74  oint literal..Ot
14390 68 65 72 77 69 73 65 20 69 73 20 69 74 20 69 73  herwise is it is
143a0 20 61 6e 20 20 69 6e 74 65 67 65 72 20 6c 69 74   an  integer lit
143b0 65 72 61 6c 2e 29 5e 0a 5e 54 68 65 20 22 45 22  eral.)^.^The "E"
143c0 20 63 68 61 72 61 63 74 65 72 20 74 68 61 74 20   character that 
143d0 62 65 67 69 6e 73 20 74 68 65 20 65 78 70 6f 6e  begins the expon
143e0 65 6e 74 69 61 74 69 6f 6e 0a 63 6c 61 75 73 65  entiation.clause
143f0 20 6f 66 20 61 20 66 6c 6f 61 74 69 6e 67 20 70   of a floating p
14400 6f 69 6e 74 20 6c 69 74 65 72 61 6c 20 63 61 6e  oint literal can
14410 20 62 65 20 65 69 74 68 65 72 20 75 70 70 65 72   be either upper
14420 20 6f 72 20 6c 6f 77 65 72 20 63 61 73 65 2e 0a   or lower case..
14430 5e 28 54 68 65 20 22 2e 22 20 63 68 61 72 61 63  ^(The "." charac
14440 74 65 72 20 69 73 20 61 6c 77 61 79 73 20 75 73  ter is always us
14450 65 64 20 0a 61 73 20 74 68 65 20 64 65 63 69 6d  ed .as the decim
14460 61 6c 20 70 6f 69 6e 74 20 65 76 65 6e 20 69 66  al point even if
14470 20 74 68 65 20 6c 6f 63 61 6c 65 20 73 65 74 74   the locale sett
14480 69 6e 67 20 73 70 65 63 69 66 69 65 73 20 22 2c  ing specifies ",
14490 22 20 66 6f 72 0a 74 68 69 73 20 72 6f 6c 65 20  " for.this role 
144a0 2d 20 74 68 65 20 75 73 65 20 6f 66 20 22 2c 22  - the use of ","
144b0 20 66 6f 72 20 74 68 65 20 64 65 63 69 6d 61 6c   for the decimal
144c0 20 70 6f 69 6e 74 20 77 6f 75 6c 64 20 72 65 73   point would res
144d0 75 6c 74 20 69 6e 0a 73 79 6e 74 61 63 74 69 63  ult in.syntactic
144e0 20 61 6d 62 69 67 75 69 74 79 2e 29 5e 0a 0a 3c   ambiguity.)^..<
144f0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
14500 68 65 78 69 6e 74 20 7b 68 65 78 61 64 65 63 69  hexint {hexadeci
14510 6d 61 6c 20 69 6e 74 65 67 65 72 20 6c 69 74 65  mal integer lite
14520 72 61 6c 73 7d 20 7b 68 65 78 61 64 65 63 69 6d  rals} {hexadecim
14530 61 6c 20 69 6e 74 65 67 65 72 73 7d 3c 2f 74 63  al integers}</tc
14540 6c 3e 0a 3c 70 3e 5e 48 65 78 61 64 65 63 69 6d  l>.<p>^Hexadecim
14550 61 6c 20 69 6e 74 65 67 65 72 20 6c 69 74 65 72  al integer liter
14560 61 6c 73 20 66 6f 6c 6c 6f 77 20 74 68 65 20 43  als follow the C
14570 2d 6c 61 6e 67 75 61 67 65 20 6e 6f 74 61 74 69  -language notati
14580 6f 6e 20 6f 66 0a 22 30 78 22 20 6f 72 20 22 30  on of."0x" or "0
14590 58 22 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 68  X" followed by h
145a0 65 78 61 64 65 63 69 6d 61 6c 20 64 69 67 69 74  exadecimal digit
145b0 73 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  s..^For example,
145c0 20 30 78 31 32 33 34 20 6d 65 61 6e 73 20 74 68   0x1234 means th
145d0 65 20 73 61 6d 65 20 61 73 20 34 36 36 30 0a 61  e same as 4660.a
145e0 6e 64 20 30 78 38 30 30 30 30 30 30 30 30 30 30  nd 0x80000000000
145f0 30 30 30 30 30 20 6d 65 61 6e 73 20 74 68 65 20  00000 means the 
14600 73 61 6d 65 20 61 73 20 2d 39 32 32 33 33 37 32  same as -9223372
14610 30 33 36 38 35 34 37 37 35 38 30 38 2e 0a 20 5e  036854775808.. ^
14620 28 48 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74  (Hexadecimal int
14630 65 67 65 72 20 6c 69 74 65 72 61 6c 73 20 61 72  eger literals ar
14640 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
14650 20 36 34 2d 62 69 74 0a 74 77 6f 27 73 2d 63 6f   64-bit.two's-co
14660 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
14670 73 20 61 6e 64 20 61 72 65 20 74 68 75 73 20 6c  s and are thus l
14680 69 6d 69 74 65 64 0a 74 6f 20 73 69 78 74 65 65  imited.to sixtee
14690 6e 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64 69  n significant di
146a0 67 69 74 73 20 6f 66 20 70 72 65 63 69 73 69 6f  gits of precisio
146b0 6e 2e 29 5e 0a 53 75 70 70 6f 72 74 20 66 6f 72  n.)^.Support for
146c0 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74   hexadecimal int
146d0 65 67 65 72 73 20 77 61 73 20 61 64 64 65 64 20  egers was added 
146e0 74 6f 20 53 51 4c 69 74 65 0a 76 65 72 73 69 6f  to SQLite.versio
146f0 6e 20 33 2e 38 2e 36 20 28 5b 64 61 74 65 6f 66  n 3.8.6 ([dateof
14700 3a 33 2e 38 2e 36 5d 29 2e 0a 5e 46 6f 72 20 62  :3.8.6])..^For b
14710 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69  ackwards compati
14720 62 69 6c 69 74 79 2c 20 74 68 65 20 22 30 78 22  bility, the "0x"
14730 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74   hexadecimal int
14740 65 67 65 72 0a 6e 6f 74 61 74 69 6f 6e 20 69 73  eger.notation is
14750 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74 6f 6f 64   only understood
14760 20 62 79 20 74 68 65 20 53 51 4c 20 6c 61 6e 67   by the SQL lang
14770 75 61 67 65 20 70 61 72 73 65 72 2c 20 6e 6f 74  uage parser, not
14780 20 62 79 20 74 68 65 0a 74 79 70 65 20 63 6f 6e   by the.type con
14790 76 65 72 73 69 6f 6e 73 20 72 6f 75 74 69 6e 65  versions routine
147a0 73 2e 0a 5e 28 53 74 72 69 6e 67 20 76 61 72 69  s..^(String vari
147b0 61 62 6c 65 73 20 74 68 61 74 0a 63 6f 6e 74 61  ables that.conta
147c0 69 6e 20 74 65 78 74 20 66 6f 72 6d 61 74 74 65  in text formatte
147d0 64 20 6c 69 6b 65 20 68 65 78 61 64 65 63 69 6d  d like hexadecim
147e0 61 6c 20 69 6e 74 65 67 65 72 73 20 61 72 65 20  al integers are 
147f0 6e 6f 74 0a 69 6e 74 65 72 70 72 65 74 65 64 20  not.interpreted 
14800 61 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69  as hexadecimal i
14810 6e 74 65 67 65 72 73 20 77 68 65 6e 20 63 6f 65  ntegers when coe
14820 72 63 69 6e 67 20 74 68 65 20 73 74 72 69 6e 67  rcing the string
14830 20 76 61 6c 75 65 0a 69 6e 74 6f 20 61 6e 20 69   value.into an i
14840 6e 74 65 67 65 72 20 64 75 65 20 74 6f 20 61 20  nteger due to a 
14850 5b 43 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e  [CAST expression
14860 5d 20 6f 72 20 66 6f 72 20 61 20 5b 63 6f 6c 75  ] or for a [colu
14870 6d 6e 20 61 66 66 69 6e 69 74 79 5d 0a 74 72 61  mn affinity].tra
14880 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 6f 72 20 70  nsformation or p
14890 72 69 6f 72 20 74 6f 20 70 65 72 66 6f 72 6d 69  rior to performi
148a0 6e 67 20 61 20 6e 75 6d 65 72 69 63 20 6f 70 65  ng a numeric ope
148b0 72 61 74 69 6f 6e 20 6f 72 20 66 6f 72 0a 61 6e  ration or for.an
148c0 79 20 6f 74 68 65 72 20 72 75 6e 2d 74 69 6d 65  y other run-time
148d0 20 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 29 5e 20   conversions.)^ 
148e0 20 5e 28 57 68 65 6e 20 63 6f 65 72 63 69 6e 67   ^(When coercing
148f0 20 61 0a 73 74 72 69 6e 67 20 76 61 6c 75 65 20   a.string value 
14900 69 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  in the format of
14910 20 61 20 68 65 78 61 64 65 63 69 6d 61 6c 20 69   a hexadecimal i
14920 6e 74 65 67 65 72 20 69 6e 74 6f 20 61 6e 20 69  nteger into an i
14930 6e 74 65 67 65 72 0a 76 61 6c 75 65 2c 20 74 68  nteger.value, th
14940 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 70 72 6f  e conversion pro
14950 63 65 73 73 20 73 74 6f 70 73 20 77 68 65 6e 20  cess stops when 
14960 74 68 65 20 27 78 27 20 63 68 61 72 61 63 74 65  the 'x' characte
14970 72 20 69 73 20 73 65 65 6e 0a 73 6f 20 74 68 65  r is seen.so the
14980 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 74 65 67   resulting integ
14990 65 72 20 76 61 6c 75 65 20 69 73 20 61 6c 77 61  er value is alwa
149a0 79 73 20 7a 65 72 6f 2e 29 5e 0a 5e 28 53 51 4c  ys zero.)^.^(SQL
149b0 69 74 65 20 6f 6e 6c 79 20 75 6e 64 65 72 73 74  ite only underst
149c0 61 6e 64 73 20 74 68 65 20 68 65 78 61 64 65 63  ands the hexadec
149d0 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 6e 6f 74  imal integer not
149e0 61 74 69 6f 6e 20 77 68 65 6e 20 69 74 0a 61 70  ation when it.ap
149f0 70 65 61 72 73 20 69 6e 20 74 68 65 20 53 51 4c  pears in the SQL
14a00 20 73 74 61 74 65 6d 65 6e 74 20 74 65 78 74 2c   statement text,
14a10 20 6e 6f 74 20 77 68 65 6e 20 69 74 20 61 70 70   not when it app
14a20 65 61 72 73 20 61 73 0a 70 61 72 74 20 6f 66 20  ears as.part of 
14a30 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
14a40 68 65 20 64 61 74 61 62 61 73 65 2e 29 5e 0a 0a  he database.)^..
14a50 3c 70 3e 20 5e 41 20 73 74 72 69 6e 67 20 63 6f  <p> ^A string co
14a60 6e 73 74 61 6e 74 20 69 73 20 66 6f 72 6d 65 64  nstant is formed
14a70 20 62 79 20 65 6e 63 6c 6f 73 69 6e 67 20 74 68   by enclosing th
14a80 65 0a 73 74 72 69 6e 67 20 69 6e 20 73 69 6e 67  e.string in sing
14a90 6c 65 20 71 75 6f 74 65 73 20 28 27 29 2e 20 20  le quotes (').  
14aa0 5e 41 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 20  ^A single quote 
14ab0 77 69 74 68 69 6e 20 74 68 65 20 73 74 72 69 6e  within the strin
14ac0 67 20 63 61 6e 0a 62 65 20 65 6e 63 6f 64 65 64  g can.be encoded
14ad0 20 62 79 20 70 75 74 74 69 6e 67 20 74 77 6f 20   by putting two 
14ae0 73 69 6e 67 6c 65 20 71 75 6f 74 65 73 20 69 6e  single quotes in
14af0 20 61 20 72 6f 77 20 2d 20 61 73 20 69 6e 20 50   a row - as in P
14b00 61 73 63 61 6c 2e 0a 43 2d 73 74 79 6c 65 20 65  ascal..C-style e
14b10 73 63 61 70 65 73 20 75 73 69 6e 67 20 74 68 65  scapes using the
14b20 20 62 61 63 6b 73 6c 61 73 68 20 63 68 61 72 61   backslash chara
14b30 63 74 65 72 20 61 72 65 20 6e 6f 74 20 73 75 70  cter are not sup
14b40 70 6f 72 74 65 64 20 62 65 63 61 75 73 65 0a 74  ported because.t
14b50 68 65 79 20 61 72 65 20 6e 6f 74 20 73 74 61 6e  hey are not stan
14b60 64 61 72 64 20 53 51 4c 2e 0a 0a 3c 70 3e 20 5e  dard SQL...<p> ^
14b70 42 4c 4f 42 20 6c 69 74 65 72 61 6c 73 20 61 72  BLOB literals ar
14b80 65 20 73 74 72 69 6e 67 20 6c 69 74 65 72 61 6c  e string literal
14b90 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 68 65 78  s containing hex
14ba0 61 64 65 63 69 6d 61 6c 20 64 61 74 61 20 61 6e  adecimal data an
14bb0 64 0a 70 72 65 63 65 64 65 64 20 62 79 20 61 20  d.preceded by a 
14bc0 73 69 6e 67 6c 65 20 22 78 22 20 6f 72 20 22 58  single "x" or "X
14bd0 22 20 63 68 61 72 61 63 74 65 72 2e 20 20 5e 28  " character.  ^(
14be0 45 78 61 6d 70 6c 65 3a 20 58 27 35 33 35 31 34  Example: X'53514
14bf0 43 36 39 37 34 36 35 27 29 5e 0a 0a 3c 70 3e 0a  C697465')^..<p>.
14c00 5e 41 20 6c 69 74 65 72 61 6c 20 76 61 6c 75 65  ^A literal value
14c10 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 74 68 65   can also be the
14c20 20 74 6f 6b 65 6e 20 22 4e 55 4c 4c 22 2e 0a 3c   token "NULL"..<
14c30 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
14c40 67 6d 65 6e 74 20 76 61 72 70 61 72 61 6d 20 70  gment varparam p
14c50 61 72 61 6d 65 74 65 72 20 70 61 72 61 6d 65 74  arameter paramet
14c60 65 72 73 20 7b 62 6f 75 6e 64 20 70 61 72 61 6d  ers {bound param
14c70 65 74 65 72 7d 20 7b 62 6f 75 6e 64 20 70 61 72  eter} {bound par
14c80 61 6d 65 74 65 72 73 7d 3c 2f 74 63 6c 3e 0a 3c  ameters}</tcl>.<
14c90 68 33 3e 50 61 72 61 6d 65 74 65 72 73 3c 2f 68  h3>Parameters</h
14ca0 33 3e 0a 3c 70 3e 0a 41 20 22 76 61 72 69 61 62  3>.<p>.A "variab
14cb0 6c 65 22 20 6f 72 20 22 70 61 72 61 6d 65 74 65  le" or "paramete
14cc0 72 22 20 74 6f 6b 65 6e 0a 73 70 65 63 69 66 69  r" token.specifi
14cd0 65 73 20 61 20 70 6c 61 63 65 68 6f 6c 64 65 72  es a placeholder
14ce0 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
14cf0 6f 6e 20 66 6f 72 20 61 20 0a 76 61 6c 75 65 20  on for a .value 
14d00 74 68 61 74 20 69 73 20 66 69 6c 6c 65 64 20 69  that is filled i
14d10 6e 20 61 74 20 72 75 6e 74 69 6d 65 20 75 73 69  n at runtime usi
14d20 6e 67 20 74 68 65 0a 5b 73 71 6c 69 74 65 33 5f  ng the.[sqlite3_
14d30 62 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71  bind_blob() | sq
14d40 6c 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 66 61  lite3_bind()] fa
14d50 6d 69 6c 79 20 6f 66 20 43 2f 43 2b 2b 20 69 6e  mily of C/C++ in
14d60 74 65 72 66 61 63 65 73 2e 0a 50 61 72 61 6d 65  terfaces..Parame
14d70 74 65 72 73 20 63 61 6e 20 74 61 6b 65 20 73 65  ters can take se
14d80 76 65 72 61 6c 20 66 6f 72 6d 73 3a 0a 3c 2f 70  veral forms:.</p
14d90 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
14da0 3c 74 61 62 6c 65 3e 0a 3c 74 72 3e 0a 3c 74 64  <table>.<tr>.<td
14db0 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 76   align="right" v
14dc0 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 3f  align="top"><b>?
14dd0 3c 2f 62 3e 3c 69 3e 4e 4e 4e 3c 2f 69 3e 3c 2f  </b><i>NNN</i></
14de0 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 32 30  td><td width="20
14df0 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 28 41 20  "></td>.<td>^(A 
14e00 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 66 6f  question mark fo
14e10 6c 6c 6f 77 65 64 20 62 79 20 61 20 6e 75 6d 62  llowed by a numb
14e20 65 72 20 3c 69 3e 4e 4e 4e 3c 2f 69 3e 20 68 6f  er <i>NNN</i> ho
14e30 6c 64 73 20 61 20 73 70 6f 74 20 66 6f 72 20 74  lds a spot for t
14e40 68 65 0a 4e 4e 4e 2d 74 68 20 70 61 72 61 6d 65  he.NNN-th parame
14e50 74 65 72 2e 20 20 4e 4e 4e 20 6d 75 73 74 20 62  ter.  NNN must b
14e60 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
14e70 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49  [SQLITE_MAX_VARI
14e80 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2e 29 5e 0a  ABLE_NUMBER].)^.
14e90 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
14ea0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  .<td align="righ
14eb0 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  t" valign="top">
14ec0 3c 62 3e 3f 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  <b>?</b></td><td
14ed0 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64   width="20"></td
14ee0 3e 0a 3c 74 64 3e 5e 41 20 71 75 65 73 74 69 6f  >.<td>^A questio
14ef0 6e 20 6d 61 72 6b 20 74 68 61 74 20 69 73 20 6e  n mark that is n
14f00 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ot followed by a
14f10 20 6e 75 6d 62 65 72 20 63 72 65 61 74 65 73 20   number creates 
14f20 61 20 70 61 72 61 6d 65 74 65 72 0a 77 69 74 68  a parameter.with
14f30 20 61 20 6e 75 6d 62 65 72 20 6f 6e 65 20 67 72   a number one gr
14f40 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6c  eater than the l
14f50 61 72 67 65 73 74 20 70 61 72 61 6d 65 74 65 72  argest parameter
14f60 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64 79 20   number already 
14f70 61 73 73 69 67 6e 65 64 2e 0a 5e 49 66 20 74 68  assigned..^If th
14f80 69 73 20 6d 65 61 6e 73 20 74 68 65 20 70 61 72  is means the par
14f90 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73  ameter number is
14fa0 20 67 72 65 61 74 65 72 20 74 68 61 6e 0a 5b 53   greater than.[S
14fb0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
14fc0 4c 45 5f 4e 55 4d 42 45 52 5d 2c 20 69 74 20 69  LE_NUMBER], it i
14fd0 73 20 61 6e 20 65 72 72 6f 72 2e 0a 54 68 69 73  s an error..This
14fe0 20 70 61 72 61 6d 65 74 65 72 20 66 6f 72 6d 61   parameter forma
14ff0 74 20 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f  t is provided fo
15000 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
15010 77 69 74 68 20 6f 74 68 65 72 20 64 61 74 61 62  with other datab
15020 61 73 65 0a 65 6e 67 69 6e 65 73 2e 20 20 42 75  ase.engines.  Bu
15030 74 20 62 65 63 61 75 73 65 20 69 74 20 69 73 20  t because it is 
15040 65 61 73 79 20 74 6f 20 6d 69 73 63 6f 75 6e 74  easy to miscount
15050 20 74 68 65 20 71 75 65 73 74 69 6f 6e 20 6d 61   the question ma
15060 72 6b 73 2c 20 74 68 65 0a 75 73 65 20 6f 66 20  rks, the.use of 
15070 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 66  this parameter f
15080 6f 72 6d 61 74 20 69 73 20 64 69 73 63 6f 75 72  ormat is discour
15090 61 67 65 64 2e 20 20 50 72 6f 67 72 61 6d 6d 65  aged.  Programme
150a0 72 73 20 61 72 65 20 65 6e 63 6f 75 72 61 67 65  rs are encourage
150b0 64 0a 74 6f 20 75 73 65 20 6f 6e 65 20 6f 66 20  d.to use one of 
150c0 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 66 6f 72  the symbolic for
150d0 6d 61 74 73 20 62 65 6c 6f 77 20 6f 72 20 74 68  mats below or th
150e0 65 20 3f 4e 4e 4e 20 66 6f 72 6d 61 74 20 61 62  e ?NNN format ab
150f0 6f 76 65 20 69 6e 73 74 65 61 64 2e 0a 3c 2f 74  ove instead..</t
15100 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c 74  d>.</tr>.<tr>.<t
15110 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20  d align="right" 
15120 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
15130 3a 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69 3e  :</b><i>AAAA</i>
15140 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22  </td><td width="
15150 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e 41  20"></td>.<td>^A
15160 20 63 6f 6c 6f 6e 20 66 6f 6c 6c 6f 77 65 64 20   colon followed 
15170 62 79 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72  by an identifier
15180 20 6e 61 6d 65 20 68 6f 6c 64 73 20 61 20 73 70   name holds a sp
15190 6f 74 20 66 6f 72 20 61 20 0a 5b 73 71 6c 69 74  ot for a .[sqlit
151a0 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
151b0 72 5f 6e 61 6d 65 7c 6e 61 6d 65 64 20 70 61 72  r_name|named par
151c0 61 6d 65 74 65 72 5d 20 77 69 74 68 20 74 68 65  ameter] with the
151d0 20 6e 61 6d 65 20 3a 41 41 41 41 2e 20 20 0a 5e   name :AAAA.  .^
151e0 28 4e 61 6d 65 64 20 70 61 72 61 6d 65 74 65 72  (Named parameter
151f0 73 20 61 72 65 20 61 6c 73 6f 20 6e 75 6d 62 65  s are also numbe
15200 72 65 64 2e 20 54 68 65 20 6e 75 6d 62 65 72 20  red. The number 
15210 61 73 73 69 67 6e 65 64 20 69 73 20 6f 6e 65 20  assigned is one 
15220 67 72 65 61 74 65 72 20 74 68 61 6e 0a 74 68 65  greater than.the
15230 20 6c 61 72 67 65 73 74 20 70 61 72 61 6d 65 74   largest paramet
15240 65 72 20 6e 75 6d 62 65 72 20 61 6c 72 65 61 64  er number alread
15250 79 20 61 73 73 69 67 6e 65 64 2e 29 5e 20 5e 49  y assigned.)^ ^I
15260 66 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68 65  f this means the
15270 20 70 61 72 61 6d 65 74 65 72 0a 77 6f 75 6c 64   parameter.would
15280 20 62 65 20 61 73 73 69 67 6e 65 64 20 61 20 6e   be assigned a n
15290 75 6d 62 65 72 20 67 72 65 61 74 65 72 20 74 68  umber greater th
152a0 61 6e 20 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 56  an [SQLITE_MAX_V
152b0 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c  ARIABLE_NUMBER],
152c0 20 69 74 20 69 73 0a 61 6e 20 65 72 72 6f 72 2e   it is.an error.
152d0 20 54 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   To avoid confus
152e0 69 6f 6e 2c 20 69 74 20 69 73 20 62 65 73 74 20  ion, it is best 
152f0 74 6f 20 61 76 6f 69 64 20 6d 69 78 69 6e 67 20  to avoid mixing 
15300 6e 61 6d 65 64 20 61 6e 64 20 6e 75 6d 62 65 72  named and number
15310 65 64 0a 70 61 72 61 6d 65 74 65 72 73 2e 3c 2f  ed.parameters.</
15320 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 0a 3c  td>.</tr>.<tr>.<
15330 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  td align="right"
15340 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62   valign="top"><b
15350 3e 40 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c 2f 69  >@</b><i>AAAA</i
15360 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74 68 3d  ></td><td width=
15370 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64 3e 5e  "20"></td>.<td>^
15380 41 6e 20 22 61 74 22 20 73 69 67 6e 20 77 6f 72  An "at" sign wor
15390 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20  ks exactly like 
153a0 61 20 63 6f 6c 6f 6e 2c 20 65 78 63 65 70 74 20  a colon, except 
153b0 74 68 61 74 20 74 68 65 20 6e 61 6d 65 20 6f 66  that the name of
153c0 0a 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 63  .the parameter c
153d0 72 65 61 74 65 64 20 69 73 20 40 41 41 41 41 2e  reated is @AAAA.
153e0 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
153f0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 72 69 67 68  .<td align="righ
15400 74 22 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  t" valign="top">
15410 3c 62 3e 24 3c 2f 62 3e 3c 69 3e 41 41 41 41 3c  <b>$</b><i>AAAA<
15420 2f 69 3e 3c 2f 74 64 3e 3c 74 64 20 77 69 64 74  /i></td><td widt
15430 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a 3c 74 64  h="20"></td>.<td
15440 3e 5e 41 20 64 6f 6c 6c 61 72 2d 73 69 67 6e 20  >^A dollar-sign 
15450 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 69  followed by an i
15460 64 65 6e 74 69 66 69 65 72 20 6e 61 6d 65 20 61  dentifier name a
15470 6c 73 6f 20 68 6f 6c 64 73 20 61 20 73 70 6f 74  lso holds a spot
15480 20 66 6f 72 20 61 20 6e 61 6d 65 64 0a 70 61 72   for a named.par
15490 61 6d 65 74 65 72 20 77 69 74 68 20 74 68 65 20  ameter with the 
154a0 6e 61 6d 65 20 24 41 41 41 41 2e 20 20 5e 28 54  name $AAAA.  ^(T
154b0 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6e 61  he identifier na
154c0 6d 65 20 69 6e 20 74 68 69 73 20 63 61 73 65 20  me in this case 
154d0 63 61 6e 20 69 6e 63 6c 75 64 65 0a 6f 6e 65 20  can include.one 
154e0 6f 72 20 6d 6f 72 65 20 6f 63 63 75 72 72 65 6e  or more occurren
154f0 63 65 73 20 6f 66 20 22 3a 3a 22 20 61 6e 64 20  ces of "::" and 
15500 61 20 73 75 66 66 69 78 20 65 6e 63 6c 6f 73 65  a suffix enclose
15510 64 20 69 6e 20 22 28 2e 2e 2e 29 22 20 63 6f 6e  d in "(...)" con
15520 74 61 69 6e 69 6e 67 0a 61 6e 79 20 74 65 78 74  taining.any text
15530 20 61 74 20 61 6c 6c 2e 29 5e 20 20 54 68 69 73   at all.)^  This
15540 20 73 79 6e 74 61 78 20 69 73 20 74 68 65 20 66   syntax is the f
15550 6f 72 6d 20 6f 66 20 61 20 76 61 72 69 61 62 6c  orm of a variabl
15560 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 0a 5b 68  e name in the.[h
15570 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c 2d 6c 61  ttp://www.tcl-la
15580 6e 67 2e 6f 72 67 2f 20 7c 20 54 63 6c 20 70 72  ng.org/ | Tcl pr
15590 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75 61  ogramming langua
155a0 67 65 5d 2e 20 20 54 68 65 20 70 72 65 73 65 6e  ge].  The presen
155b0 63 65 0a 6f 66 20 74 68 69 73 20 73 79 6e 74 61  ce.of this synta
155c0 78 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  x results from t
155d0 68 65 20 66 61 63 74 20 74 68 61 74 20 53 51 4c  he fact that SQL
155e0 69 74 65 20 69 73 20 72 65 61 6c 6c 79 20 61 20  ite is really a 
155f0 0a 5b 54 63 6c 20 65 78 74 65 6e 73 69 6f 6e 5d  .[Tcl extension]
15600 20 74 68 61 74 20 68 61 73 20 65 73 63 61 70 65   that has escape
15610 64 20 69 6e 74 6f 20 74 68 65 20 77 69 6c 64 2e  d into the wild.
15620 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61  </td>.</tr>.</ta
15630 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ble>.</blockquot
15640 65 3e 0a 0a 3c 70 3e 5e 50 61 72 61 6d 65 74 65  e>..<p>^Paramete
15650 72 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  rs that are not 
15660 61 73 73 69 67 6e 65 64 20 76 61 6c 75 65 73 20  assigned values 
15670 75 73 69 6e 67 0a 5b 73 71 6c 69 74 65 33 5f 62  using.[sqlite3_b
15680 69 6e 64 5f 62 6c 6f 62 28 29 20 7c 20 73 71 6c  ind_blob() | sql
15690 69 74 65 33 5f 62 69 6e 64 28 29 5d 20 61 72 65  ite3_bind()] are
156a0 20 74 72 65 61 74 65 64 0a 61 73 20 4e 55 4c 4c   treated.as NULL
156b0 2e 20 20 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  .  The [sqlite3_
156c0 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
156d0 6e 64 65 78 28 29 5d 20 69 6e 74 65 72 66 61 63  ndex()] interfac
156e0 65 20 63 61 6e 20 62 65 20 75 73 65 64 0a 74 6f  e can be used.to
156f0 20 74 72 61 6e 73 6c 61 74 65 20 61 20 73 79 6d   translate a sym
15700 62 6f 6c 69 63 20 70 61 72 61 6d 65 74 65 72 20  bolic parameter 
15710 6e 61 6d 65 20 69 6e 74 6f 20 69 74 73 20 65 71  name into its eq
15720 75 69 76 61 6c 65 6e 74 20 6e 75 6d 65 72 69 63  uivalent numeric
15730 20 69 6e 64 65 78 2e 3c 2f 70 3e 0a 0a 3c 70 3e   index.</p>..<p>
15740 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 72  ^The maximum par
15750 61 6d 65 74 65 72 20 6e 75 6d 62 65 72 20 69 73  ameter number is
15760 20 73 65 74 20 61 74 20 63 6f 6d 70 69 6c 65 2d   set at compile-
15770 74 69 6d 65 20 62 79 0a 74 68 65 20 5b 53 51 4c  time by.the [SQL
15780 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
15790 5f 4e 55 4d 42 45 52 5d 20 6d 61 63 72 6f 2e 20  _NUMBER] macro. 
157a0 20 5e 28 41 6e 20 69 6e 64 69 76 69 64 75 61 6c   ^(An individual
157b0 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
157c0 63 74 69 6f 6e 5d 0a 44 20 63 61 6e 20 72 65 64  ction].D can red
157d0 75 63 65 20 69 74 73 20 6d 61 78 69 6d 75 6d 20  uce its maximum 
157e0 70 61 72 61 6d 65 74 65 72 20 6e 75 6d 62 65 72  parameter number
157f0 20 62 65 6c 6f 77 20 74 68 65 20 63 6f 6d 70 69   below the compi
15800 6c 65 2d 74 69 6d 65 20 6d 61 78 69 6d 75 6d 0a  le-time maximum.
15810 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74  using the [sqlit
15820 65 33 5f 6c 69 6d 69 74 5d 28 44 2c 20 5b 53 51  e3_limit](D, [SQ
15830 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41  LITE_LIMIT_VARIA
15840 42 4c 45 5f 4e 55 4d 42 45 52 5d 2c 2e 2e 2e 29  BLE_NUMBER],...)
15850 20 69 6e 74 65 72 66 61 63 65 2e 29 5e 0a 3c 2f   interface.)^.</
15860 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
15870 6d 65 6e 74 20 6c 69 6b 65 20 4c 49 4b 45 20 45  ment like LIKE E
15880 53 43 41 50 45 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  SCAPE</tcl>.<h3>
15890 54 68 65 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20  The LIKE, GLOB, 
158a0 52 45 47 45 58 50 2c 20 61 6e 64 20 4d 41 54 43  REGEXP, and MATC
158b0 48 20 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e  H operators</h3>
158c0 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70  .<p>^The LIKE op
158d0 65 72 61 74 6f 72 20 64 6f 65 73 20 61 20 70 61  erator does a pa
158e0 74 74 65 72 6e 20 6d 61 74 63 68 69 6e 67 20 63  ttern matching c
158f0 6f 6d 70 61 72 69 73 6f 6e 2e 20 5e 54 68 65 20  omparison. ^The 
15900 6f 70 65 72 61 6e 64 0a 74 6f 20 74 68 65 20 72  operand.to the r
15910 69 67 68 74 20 6f 66 20 74 68 65 20 4c 49 4b 45  ight of the LIKE
15920 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 74 61 69   operator contai
15930 6e 73 20 74 68 65 20 70 61 74 74 65 72 6e 20 61  ns the pattern a
15940 6e 64 20 74 68 65 20 6c 65 66 74 20 68 61 6e 64  nd the left hand
15950 0a 6f 70 65 72 61 6e 64 20 63 6f 6e 74 61 69 6e  .operand contain
15960 73 20 74 68 65 20 73 74 72 69 6e 67 20 74 6f 20  s the string to 
15970 6d 61 74 63 68 20 61 67 61 69 6e 73 74 20 74 68  match against th
15980 65 20 70 61 74 74 65 72 6e 2e 0a 0a 3c 74 63 6c  e pattern...<tcl
15990 3e 68 64 5f 70 75 74 73 20 22 5e 41 20 70 65 72  >hd_puts "^A per
159a0 63 65 6e 74 20 73 79 6d 62 6f 6c 20 28 5c 22 25  cent symbol (\"%
159b0 5c 22 29 20 69 6e 20 74 68 65 20 4c 49 4b 45 20  \") in the LIKE 
159c0 70 61 74 74 65 72 6e 20 6d 61 74 63 68 65 73 20  pattern matches 
159d0 61 6e 79 0a 73 65 71 75 65 6e 63 65 20 6f 66 20  any.sequence of 
159e0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 63 68 61  zero or more cha
159f0 72 61 63 74 65 72 73 20 69 6e 20 74 68 65 20 73  racters in the s
15a00 74 72 69 6e 67 2e 20 20 5e 41 6e 20 75 6e 64 65  tring.  ^An unde
15a10 72 73 63 6f 72 65 0a 28 5c 22 5f 5c 22 29 20 69  rscore.(\"_\") i
15a20 6e 20 74 68 65 20 4c 49 4b 45 20 70 61 74 74 65  n the LIKE patte
15a30 72 6e 20 6d 61 74 63 68 65 73 20 61 6e 79 20 73  rn matches any s
15a40 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20  ingle character 
15a50 69 6e 20 74 68 65 0a 73 74 72 69 6e 67 2e 20 20  in the.string.  
15a60 5e 28 41 6e 79 20 6f 74 68 65 72 20 63 68 61 72  ^(Any other char
15a70 61 63 74 65 72 20 6d 61 74 63 68 65 73 20 69 74  acter matches it
15a80 73 65 6c 66 20 6f 72 20 69 74 73 20 6c 6f 77 65  self or its lowe
15a90 72 2f 75 70 70 65 72 20 63 61 73 65 0a 65 71 75  r/upper case.equ
15aa0 69 76 61 6c 65 6e 74 20 28 69 2e 65 2e 20 63 61  ivalent (i.e. ca
15ab0 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65 20 6d  se-insensitive m
15ac0 61 74 63 68 69 6e 67 29 2e 29 5e 0a 0a 3c 75 3e  atching).)^..<u>
15ad0 49 6d 70 6f 72 74 61 6e 74 20 4e 6f 74 65 3a 3c  Important Note:<
15ae0 2f 75 3e 20 5e 53 51 4c 69 74 65 20 6f 6e 6c 79  /u> ^SQLite only
15af0 0a 75 6e 64 65 72 73 74 61 6e 64 73 20 75 70 70  .understands upp
15b00 65 72 2f 6c 6f 77 65 72 20 63 61 73 65 20 66 6f  er/lower case fo
15b10 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
15b20 72 73 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  rs by default.  
15b30 5e 54 68 65 0a 4c 49 4b 45 20 6f 70 65 72 61 74  ^The.LIKE operat
15b40 6f 72 20 69 73 20 63 61 73 65 20 73 65 6e 73 69  or is case sensi
15b50 74 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 20  tive by default 
15b60 66 6f 72 20 75 6e 69 63 6f 64 65 20 63 68 61 72  for unicode char
15b70 61 63 74 65 72 73 20 74 68 61 74 20 61 72 65 0a  acters that are.
15b80 62 65 79 6f 6e 64 20 74 68 65 20 41 53 43 49 49  beyond the ASCII
15b90 20 72 61 6e 67 65 2e 20 20 46 6f 72 20 65 78 61   range.  For exa
15ba0 6d 70 6c 65 2c 0a 5e 74 68 65 20 65 78 70 72 65  mple,.^the expre
15bb0 73 73 69 6f 6e 20 3c 62 3e 27 61 27 26 6e 62 73  ssion <b>'a'&nbs
15bc0 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 41 27 3c  p;LIKE&nbsp;'A'<
15bd0 2f 62 3e 0a 69 73 20 54 52 55 45 20 62 75 74 20  /b>.is TRUE but 
15be0 3c 62 3e 27 26 61 65 6c 69 67 3b 27 26 6e 62 73  <b>'&aelig;'&nbs
15bf0 70 3b 4c 49 4b 45 26 6e 62 73 70 3b 27 26 41 45  p;LIKE&nbsp;'&AE
15c00 6c 69 67 3b 27 3c 2f 62 3e 20 69 73 20 46 41 4c  lig;'</b> is FAL
15c10 53 45 2e 22 3c 2f 74 63 6c 3e 0a 54 68 65 20 49  SE."</tcl>.The I
15c20 43 55 20 65 78 74 65 6e 73 69 6f 6e 20 74 6f 20  CU extension to 
15c30 53 51 4c 69 74 65 20 69 6e 63 6c 75 64 65 73 20  SQLite includes 
15c40 61 6e 20 65 6e 68 61 6e 63 65 64 20 76 65 72 73  an enhanced vers
15c50 69 6f 6e 20 6f 66 20 74 68 65 0a 4c 49 4b 45 20  ion of the.LIKE 
15c60 6f 70 65 72 61 74 6f 72 20 74 68 61 74 20 64 6f  operator that do
15c70 65 73 20 63 61 73 65 20 66 6f 6c 64 69 6e 67 20  es case folding 
15c80 61 63 72 6f 73 73 20 61 6c 6c 20 75 6e 69 63 6f  across all unico
15c90 64 65 20 63 68 61 72 61 63 74 65 72 73 2e 3c 2f  de characters.</
15ca0 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 6f  p>..<p>^If the o
15cb0 70 74 69 6f 6e 61 6c 20 45 53 43 41 50 45 20 63  ptional ESCAPE c
15cc0 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e 74  lause is present
15cd0 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65  , then the expre
15ce0 73 73 69 6f 6e 0a 66 6f 6c 6c 6f 77 69 6e 67 20  ssion.following 
15cf0 74 68 65 20 45 53 43 41 50 45 20 6b 65 79 77 6f  the ESCAPE keywo
15d00 72 64 20 6d 75 73 74 20 65 76 61 6c 75 61 74 65  rd must evaluate
15d10 20 74 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e   to a string con
15d20 73 69 73 74 69 6e 67 20 6f 66 0a 61 20 73 69 6e  sisting of.a sin
15d30 67 6c 65 20 63 68 61 72 61 63 74 65 72 2e 20 5e  gle character. ^
15d40 54 68 69 73 20 63 68 61 72 61 63 74 65 72 20 6d  This character m
15d50 61 79 20 62 65 20 75 73 65 64 20 69 6e 20 74 68  ay be used in th
15d60 65 20 4c 49 4b 45 20 70 61 74 74 65 72 6e 0a 74  e LIKE pattern.t
15d70 6f 20 69 6e 63 6c 75 64 65 20 6c 69 74 65 72 61  o include litera
15d80 6c 20 70 65 72 63 65 6e 74 20 6f 72 20 75 6e 64  l percent or und
15d90 65 72 73 63 6f 72 65 20 63 68 61 72 61 63 74 65  erscore characte
15da0 72 73 2e 20 5e 54 68 65 20 65 73 63 61 70 65 0a  rs. ^The escape.
15db0 63 68 61 72 61 63 74 65 72 20 66 6f 6c 6c 6f 77  character follow
15dc0 65 64 20 62 79 20 61 20 70 65 72 63 65 6e 74 20  ed by a percent 
15dd0 73 79 6d 62 6f 6c 20 28 25 29 2c 20 75 6e 64 65  symbol (%), unde
15de0 72 73 63 6f 72 65 20 28 5f 29 2c 20 6f 72 20 61  rscore (_), or a
15df0 20 73 65 63 6f 6e 64 0a 69 6e 73 74 61 6e 63 65   second.instance
15e00 20 6f 66 20 74 68 65 20 65 73 63 61 70 65 20 63   of the escape c
15e10 68 61 72 61 63 74 65 72 20 69 74 73 65 6c 66 20  haracter itself 
15e20 6d 61 74 63 68 65 73 20 61 0a 6c 69 74 65 72 61  matches a.litera
15e30 6c 20 70 65 72 63 65 6e 74 20 73 79 6d 62 6f 6c  l percent symbol
15e40 2c 20 75 6e 64 65 72 73 63 6f 72 65 2c 20 6f 72  , underscore, or
15e50 20 61 20 73 69 6e 67 6c 65 20 65 73 63 61 70 65   a single escape
15e60 20 63 68 61 72 61 63 74 65 72 2c 0a 72 65 73 70   character,.resp
15e70 65 63 74 69 76 65 6c 79 2e 0a 0a 3c 70 3e 5e 54  ectively...<p>^T
15e80 68 65 20 69 6e 66 69 78 20 4c 49 4b 45 20 6f 70  he infix LIKE op
15e90 65 72 61 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d  erator is implem
15ea0 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
15eb0 20 74 68 65 0a 61 70 70 6c 69 63 61 74 69 6f 6e   the.application
15ec0 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e  -defined SQL fun
15ed0 63 74 69 6f 6e 73 20 5b 6c 69 6b 65 28 3c 69 3e  ctions [like(<i>
15ee0 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 29 5d  Y</i>,<i>X</i>)]
15ef0 20 6f 72 0a 5b 6c 69 6b 65 28 3c 69 3e 59 3c 2f   or.[like(<i>Y</
15f00 69 3e 2c 3c 69 3e 58 3c 2f 69 3e 2c 3c 69 3e 5a  i>,<i>X</i>,<i>Z
15f10 3c 2f 69 3e 29 5d 3c 2f 61 3e 2e 3c 2f 70 3e 0a  </i>)]</a>.</p>.
15f20 0a 3c 70 3e 5e 54 68 65 20 4c 49 4b 45 20 6f 70  .<p>^The LIKE op
15f30 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 6d 61  erator can be ma
15f40 64 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76  de case sensitiv
15f50 65 20 75 73 69 6e 67 20 74 68 65 0a 5b 63 61 73  e using the.[cas
15f60 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65  e_sensitive_like
15f70 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c   pragma].</p>..<
15f80 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
15f90 67 6c 6f 62 20 47 4c 4f 42 3c 2f 74 63 6c 3e 0a  glob GLOB</tcl>.
15fa0 3c 70 3e 5e 54 68 65 20 47 4c 4f 42 20 6f 70 65  <p>^The GLOB ope
15fb0 72 61 74 6f 72 20 69 73 20 73 69 6d 69 6c 61 72  rator is similar
15fc0 20 74 6f 20 4c 49 4b 45 20 62 75 74 20 75 73 65   to LIKE but use
15fd0 73 20 74 68 65 20 55 6e 69 78 0a 66 69 6c 65 20  s the Unix.file 
15fe0 67 6c 6f 62 62 69 6e 67 20 73 79 6e 74 61 78 20  globbing syntax 
15ff0 66 6f 72 20 69 74 73 20 77 69 6c 64 63 61 72 64  for its wildcard
16000 73 2e 20 20 5e 41 6c 73 6f 2c 20 47 4c 4f 42 20  s.  ^Also, GLOB 
16010 69 73 20 63 61 73 65 0a 73 65 6e 73 69 74 69 76  is case.sensitiv
16020 65 2c 20 75 6e 6c 69 6b 65 20 4c 49 4b 45 2e 20  e, unlike LIKE. 
16030 20 5e 42 6f 74 68 20 47 4c 4f 42 20 61 6e 64 20   ^Both GLOB and 
16040 4c 49 4b 45 20 6d 61 79 20 62 65 20 70 72 65 63  LIKE may be prec
16050 65 64 65 64 20 62 79 0a 74 68 65 20 4e 4f 54 20  eded by.the NOT 
16060 6b 65 79 77 6f 72 64 20 74 6f 20 69 6e 76 65 72  keyword to inver
16070 74 20 74 68 65 20 73 65 6e 73 65 20 6f 66 20 74  t the sense of t
16080 68 65 20 74 65 73 74 2e 20 20 5e 54 68 65 20 69  he test.  ^The i
16090 6e 66 69 78 20 47 4c 4f 42 20 0a 6f 70 65 72 61  nfix GLOB .opera
160a0 74 6f 72 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  tor is implement
160b0 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
160c0 65 20 66 75 6e 63 74 69 6f 6e 0a 5b 67 6c 6f 62  e function.[glob
160d0 28 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f  (<i>Y</i>,<i>X</
160e0 69 3e 29 5d 20 61 6e 64 20 63 61 6e 20 62 65 20  i>)] and can be 
160f0 6d 6f 64 69 66 69 65 64 20 62 79 20 6f 76 65 72  modified by over
16100 72 69 64 69 6e 67 0a 74 68 61 74 20 66 75 6e 63  riding.that func
16110 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  tion.</p>..<tcl>
16120 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 67 65  hd_fragment rege
16130 78 70 20 52 45 47 45 58 50 3c 2f 74 63 6c 3e 0a  xp REGEXP</tcl>.
16140 3c 70 3e 5e 54 68 65 20 52 45 47 45 58 50 20 6f  <p>^The REGEXP o
16150 70 65 72 61 74 6f 72 20 69 73 20 61 20 73 70 65  perator is a spe
16160 63 69 61 6c 20 73 79 6e 74 61 78 20 66 6f 72 20  cial syntax for 
16170 74 68 65 20 72 65 67 65 78 70 28 29 0a 75 73 65  the regexp().use
16180 72 20 66 75 6e 63 74 69 6f 6e 2e 20 20 5e 4e 6f  r function.  ^No
16190 20 72 65 67 65 78 70 28 29 20 75 73 65 72 20 66   regexp() user f
161a0 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e  unction is defin
161b0 65 64 20 62 79 20 64 65 66 61 75 6c 74 0a 61 6e  ed by default.an
161c0 64 20 73 6f 20 75 73 65 20 6f 66 20 74 68 65 20  d so use of the 
161d0 52 45 47 45 58 50 20 6f 70 65 72 61 74 6f 72 20  REGEXP operator 
161e0 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 72 65  will normally re
161f0 73 75 6c 74 20 69 6e 20 61 6e 0a 65 72 72 6f 72  sult in an.error
16200 20 6d 65 73 73 61 67 65 2e 20 20 5e 49 66 20 61   message.  ^If a
16210 6e 20 5b 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  n [application-d
16220 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74  efined SQL funct
16230 69 6f 6e 5d 20 6e 61 6d 65 64 20 22 72 65 67 65  ion] named "rege
16240 78 70 22 0a 69 73 20 61 64 64 65 64 20 61 74 20  xp".is added at 
16250 72 75 6e 2d 74 69 6d 65 2c 20 74 68 65 6e 20 74  run-time, then t
16260 68 65 20 22 3c 69 3e 58 3c 2f 69 3e 20 52 45 47  he "<i>X</i> REG
16270 45 58 50 20 3c 69 3e 59 3c 2f 69 3e 22 20 6f 70  EXP <i>Y</i>" op
16280 65 72 61 74 6f 72 20 77 69 6c 6c 0a 62 65 20 69  erator will.be i
16290 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
162a0 63 61 6c 6c 20 74 6f 20 22 72 65 67 65 78 70 28  call to "regexp(
162b0 3c 69 3e 59 3c 2f 69 3e 2c 3c 69 3e 58 3c 2f 69  <i>Y</i>,<i>X</i
162c0 3e 29 22 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  >)".</p>..<tcl>h
162d0 64 5f 66 72 61 67 6d 65 6e 74 20 6d 61 74 63 68  d_fragment match
162e0 20 4d 41 54 43 48 3c 2f 74 63 6c 3e 0a 3c 70 3e   MATCH</tcl>.<p>
162f0 5e 54 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61  ^The MATCH opera
16300 74 6f 72 20 69 73 20 61 20 73 70 65 63 69 61 6c  tor is a special
16310 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20   syntax for the 
16320 6d 61 74 63 68 28 29 0a 61 70 70 6c 69 63 61 74  match().applicat
16330 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ion-defined func
16340 74 69 6f 6e 2e 20 20 5e 54 68 65 20 64 65 66 61  tion.  ^The defa
16350 75 6c 74 20 6d 61 74 63 68 28 29 20 66 75 6e 63  ult match() func
16360 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tion implementat
16370 69 6f 6e 0a 72 61 69 73 65 73 20 61 6e 20 65 78  ion.raises an ex
16380 63 65 70 74 69 6f 6e 20 61 6e 64 20 69 73 20 6e  ception and is n
16390 6f 74 20 72 65 61 6c 6c 79 20 75 73 65 66 75 6c  ot really useful
163a0 20 66 6f 72 20 61 6e 79 74 68 69 6e 67 2e 0a 5e   for anything..^
163b0 42 75 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63  But extensions c
163c0 61 6e 20 6f 76 65 72 72 69 64 65 20 74 68 65 20  an override the 
163d0 6d 61 74 63 68 28 29 20 66 75 6e 63 74 69 6f 6e  match() function
163e0 20 77 69 74 68 20 6d 6f 72 65 0a 68 65 6c 70 66   with more.helpf
163f0 75 6c 20 6c 6f 67 69 63 2e 3c 2f 70 3e 0a 0a 3c  ul logic.</p>..<
16400 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
16410 62 65 74 77 65 65 6e 20 42 45 54 57 45 45 4e 3c  between BETWEEN<
16420 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 42 45  /tcl>.<h3>The BE
16430 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 3c 2f  TWEEN operator</
16440 68 33 3e 0a 3c 70 3e 5e 28 54 68 65 20 42 45 54  h3>.<p>^(The BET
16450 57 45 45 4e 20 6f 70 65 72 61 74 6f 72 20 69 73  WEEN operator is
16460 20 6c 6f 67 69 63 61 6c 6c 79 20 65 71 75 69 76   logically equiv
16470 61 6c 65 6e 74 20 74 6f 20 61 20 70 61 69 72 20  alent to a pair 
16480 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a  of comparisons..
16490 22 3c 69 3e 78 3c 2f 69 3e 20 3c 62 3e 42 45 54  "<i>x</i> <b>BET
164a0 57 45 45 4e 3c 2f 62 3e 20 3c 69 3e 79 3c 2f 69  WEEN</b> <i>y</i
164b0 3e 20 3c 62 3e 41 4e 44 3c 2f 62 3e 20 3c 69 3e  > <b>AND</b> <i>
164c0 7a 3c 2f 69 3e 22 20 69 73 20 0a 65 71 75 69 76  z</i>" is .equiv
164d0 61 6c 65 6e 74 20 74 6f 20 0a 22 3c 69 3e 78 3c  alent to ."<i>x<
164e0 2f 69 3e 3c 62 3e 26 67 74 3b 3d 3c 2f 62 3e 3c  /i><b>&gt;=</b><
164f0 69 3e 79 3c 2f 69 3e 20 3c 62 3e 41 4e 44 3c 2f  i>y</i> <b>AND</
16500 62 3e 20 3c 69 3e 78 3c 2f 69 3e 3c 62 3e 26 6c  b> <i>x</i><b>&l
16510 74 3b 3d 3c 2f 62 3e 3c 69 3e 7a 3c 2f 69 3e 22  t;=</b><i>z</i>"
16520 20 65 78 63 65 70 74 0a 74 68 61 74 20 77 69 74   except.that wit
16530 68 20 42 45 54 57 45 45 4e 2c 20 74 68 65 20 3c  h BETWEEN, the <
16540 69 3e 78 3c 2f 69 3e 20 65 78 70 72 65 73 73 69  i>x</i> expressi
16550 6f 6e 20 69 73 20 6f 6e 6c 79 20 65 76 61 6c 75  on is only evalu
16560 61 74 65 64 20 6f 6e 63 65 2e 29 5e 0a 5e 54 68  ated once.)^.^Th
16570 65 20 70 72 65 63 65 64 65 6e 63 65 20 6f 66 20  e precedence of 
16580 74 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72  the BETWEEN oper
16590 61 74 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65  ator is the same
165a0 20 61 73 20 74 68 65 20 70 72 65 63 65 64 65 6e   as the preceden
165b0 63 65 0a 61 73 20 6f 70 65 72 61 74 6f 72 73 20  ce.as operators 
165c0 3c 62 3e 3d 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62  <b>==</b> and <b
165d0 3e 21 3d 3c 2f 62 3e 20 61 6e 64 20 3c 62 3e 4c  >!=</b> and <b>L
165e0 49 4b 45 3c 2f 62 3e 20 61 6e 64 20 67 72 6f 75  IKE</b> and grou
165f0 70 73 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  ps left to right
16600 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
16610 65 6e 74 20 63 61 73 65 20 7b 43 41 53 45 20 65  ent case {CASE e
16620 78 70 72 65 73 73 69 6f 6e 7d 3c 2f 74 63 6c 3e  xpression}</tcl>
16630 0a 3c 68 33 3e 54 68 65 20 43 41 53 45 20 65 78  .<h3>The CASE ex
16640 70 72 65 73 73 69 6f 6e 3c 2f 68 33 3e 0a 3c 70  pression</h3>.<p
16650 3e 41 20 43 41 53 45 20 65 78 70 72 65 73 73 69  >A CASE expressi
16660 6f 6e 20 73 65 72 76 65 73 20 61 20 72 6f 6c 65  on serves a role
16670 20 73 69 6d 69 6c 61 72 20 74 6f 20 49 46 2d 54   similar to IF-T
16680 48 45 4e 2d 45 4c 53 45 20 69 6e 20 6f 74 68 65  HEN-ELSE in othe
16690 72 0a 70 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61  r.programming la
166a0 6e 67 75 61 67 65 73 2e 20 20 0a 0a 3c 70 3e 54  nguages.  ..<p>T
166b0 68 65 20 6f 70 74 69 6f 6e 61 6c 20 65 78 70 72  he optional expr
166c0 65 73 73 69 6f 6e 20 74 68 61 74 20 6f 63 63 75  ession that occu
166d0 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68  rs in between th
166e0 65 20 43 41 53 45 20 6b 65 79 77 6f 72 64 20 61  e CASE keyword a
166f0 6e 64 20 74 68 65 0a 66 69 72 73 74 20 57 48 45  nd the.first WHE
16700 4e 20 6b 65 79 77 6f 72 64 20 69 73 20 63 61 6c  N keyword is cal
16710 6c 65 64 20 74 68 65 20 22 62 61 73 65 22 20 65  led the "base" e
16720 78 70 72 65 73 73 69 6f 6e 2e 20 5e 54 68 65 72  xpression. ^Ther
16730 65 20 61 72 65 20 74 77 6f 20 62 61 73 69 63 20  e are two basic 
16740 66 6f 72 6d 73 0a 6f 66 20 74 68 65 20 43 41 53  forms.of the CAS
16750 45 20 65 78 70 72 65 73 73 69 6f 6e 3a 20 74 68  E expression: th
16760 6f 73 65 20 77 69 74 68 20 61 20 62 61 73 65 20  ose with a base 
16770 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74  expression and t
16780 68 6f 73 65 20 77 69 74 68 6f 75 74 2e 0a 0a 3c  hose without...<
16790 70 3e 5e 49 6e 20 61 20 43 41 53 45 20 77 69 74  p>^In a CASE wit
167a0 68 6f 75 74 20 61 20 62 61 73 65 20 65 78 70 72  hout a base expr
167b0 65 73 73 69 6f 6e 2c 20 65 61 63 68 20 57 48 45  ession, each WHE
167c0 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  N expression is 
167d0 65 76 61 6c 75 61 74 65 64 0a 61 6e 64 20 74 68  evaluated.and th
167e0 65 20 72 65 73 75 6c 74 20 74 72 65 61 74 65 64  e result treated
167f0 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 2c 20 73   as a boolean, s
16800 74 61 72 74 69 6e 67 20 77 69 74 68 20 74 68 65  tarting with the
16810 20 6c 65 66 74 6d 6f 73 74 20 61 6e 64 20 63 6f   leftmost and co
16820 6e 74 69 6e 75 69 6e 67 0a 74 6f 20 74 68 65 20  ntinuing.to the 
16830 72 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75  right. ^The resu
16840 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65  lt of the CASE e
16850 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65  xpression is the
16860 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74   evaluation of t
16870 68 65 20 54 48 45 4e 0a 65 78 70 72 65 73 73 69  he THEN.expressi
16880 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  on that correspo
16890 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nds to the first
168a0 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
168b0 20 74 68 61 74 20 65 76 61 6c 75 61 74 65 73 20   that evaluates 
168c0 74 6f 0a 74 72 75 65 2e 20 5e 4f 72 2c 20 69 66  to.true. ^Or, if
168d0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 57 48 45   none of the WHE
168e0 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76  N expressions ev
168f0 61 6c 75 61 74 65 20 74 6f 20 74 72 75 65 2c 20  aluate to true, 
16900 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 65 76  the result of.ev
16910 61 6c 75 61 74 69 6e 67 20 74 68 65 20 45 4c 53  aluating the ELS
16920 45 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 69 66  E expression, if
16930 20 61 6e 79 2e 20 5e 49 66 20 74 68 65 72 65 20   any. ^If there 
16940 69 73 20 6e 6f 20 45 4c 53 45 20 65 78 70 72 65  is no ELSE expre
16950 73 73 69 6f 6e 20 61 6e 64 0a 6e 6f 6e 65 20 6f  ssion and.none o
16960 66 20 74 68 65 20 57 48 45 4e 20 65 78 70 72 65  f the WHEN expre
16970 73 73 69 6f 6e 73 20 61 72 65 20 74 72 75 65 2c  ssions are true,
16980 20 74 68 65 6e 20 74 68 65 20 6f 76 65 72 61 6c   then the overal
16990 6c 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  l result is NULL
169a0 2e 0a 0a 3c 70 3e 5e 41 20 4e 55 4c 4c 20 72 65  ...<p>^A NULL re
169b0 73 75 6c 74 20 69 73 20 63 6f 6e 73 69 64 65 72  sult is consider
169c0 65 64 20 75 6e 74 72 75 65 20 77 68 65 6e 20 65  ed untrue when e
169d0 76 61 6c 75 61 74 69 6e 67 20 57 48 45 4e 20 74  valuating WHEN t
169e0 65 72 6d 73 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  erms...<p>^In a 
169f0 43 41 53 45 20 77 69 74 68 20 61 20 62 61 73 65  CASE with a base
16a00 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65   expression, the
16a10 20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e   base expression
16a20 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6a 75   is evaluated ju
16a30 73 74 0a 6f 6e 63 65 20 61 6e 64 20 74 68 65 20  st.once and the 
16a40 72 65 73 75 6c 74 20 69 73 20 63 6f 6d 70 61 72  result is compar
16a50 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 65  ed against the e
16a60 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 65 61 63  valuation of eac
16a70 68 20 57 48 45 4e 20 0a 65 78 70 72 65 73 73 69  h WHEN .expressi
16a80 6f 6e 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  on from left to 
16a90 72 69 67 68 74 2e 20 5e 54 68 65 20 72 65 73 75  right. ^The resu
16aa0 6c 74 20 6f 66 20 74 68 65 20 43 41 53 45 20 65  lt of the CASE e
16ab0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74 68 65  xpression is the
16ac0 20 0a 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20   .evaluation of 
16ad0 74 68 65 20 54 48 45 4e 20 65 78 70 72 65 73 73  the THEN express
16ae0 69 6f 6e 20 74 68 61 74 20 63 6f 72 72 65 73 70  ion that corresp
16af0 6f 6e 64 73 20 74 6f 20 74 68 65 20 66 69 72 73  onds to the firs
16b00 74 20 57 48 45 4e 0a 65 78 70 72 65 73 73 69 6f  t WHEN.expressio
16b10 6e 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20  n for which the 
16b20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72  comparison is tr
16b30 75 65 2e 20 5e 4f 72 2c 20 69 66 20 6e 6f 6e 65  ue. ^Or, if none
16b40 20 6f 66 20 74 68 65 20 57 48 45 4e 0a 65 78 70   of the WHEN.exp
16b50 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74  ressions evaluat
16b60 65 20 74 6f 20 61 20 76 61 6c 75 65 20 65 71 75  e to a value equ
16b70 61 6c 20 74 6f 20 74 68 65 20 62 61 73 65 20 65  al to the base e
16b80 78 70 72 65 73 73 69 6f 6e 2c 20 74 68 65 20 72  xpression, the r
16b90 65 73 75 6c 74 0a 6f 66 20 65 76 61 6c 75 61 74  esult.of evaluat
16ba0 69 6e 67 20 74 68 65 20 45 4c 53 45 20 65 78 70  ing the ELSE exp
16bb0 72 65 73 73 69 6f 6e 2c 20 69 66 20 61 6e 79 2e  ression, if any.
16bc0 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f   ^If there is no
16bd0 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
16be0 20 61 6e 64 0a 6e 6f 6e 65 20 6f 66 20 74 68 65   and.none of the
16bf0 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
16c00 73 20 70 72 6f 64 75 63 65 20 61 20 72 65 73 75  s produce a resu
16c10 6c 74 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  lt equal to the 
16c20 62 61 73 65 20 65 78 70 72 65 73 73 69 6f 6e 2c  base expression,
16c30 0a 74 68 65 20 6f 76 65 72 61 6c 6c 20 72 65 73  .the overall res
16c40 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 0a 3c 70  ult is NULL...<p
16c50 3e 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  >^When comparing
16c60 20 61 20 62 61 73 65 20 65 78 70 72 65 73 73 69   a base expressi
16c70 6f 6e 20 61 67 61 69 6e 73 74 20 61 20 57 48 45  on against a WHE
16c80 4e 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 74 68  N expression, th
16c90 65 20 73 61 6d 65 0a 63 6f 6c 6c 61 74 69 6e 67  e same.collating
16ca0 20 73 65 71 75 65 6e 63 65 2c 20 61 66 66 69 6e   sequence, affin
16cb0 69 74 79 2c 20 61 6e 64 20 4e 55 4c 4c 2d 68 61  ity, and NULL-ha
16cc0 6e 64 6c 69 6e 67 20 72 75 6c 65 73 20 61 70 70  ndling rules app
16cd0 6c 79 20 61 73 20 69 66 20 74 68 65 0a 62 61 73  ly as if the.bas
16ce0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  e expression and
16cf0 20 57 48 45 4e 20 65 78 70 72 65 73 73 69 6f 6e   WHEN expression
16d00 20 61 72 65 20 72 65 73 70 65 63 74 69 76 65 6c   are respectivel
16d10 79 20 74 68 65 20 6c 65 66 74 2d 20 61 6e 64 0a  y the left- and.
16d20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72 61  right-hand opera
16d30 6e 64 73 20 6f 66 20 61 6e 20 3c 62 69 67 3e 3c  nds of an <big><
16d40 62 3e 3d 3c 2f 62 3e 3c 2f 62 69 67 3e 20 6f 70  b>=</b></big> op
16d50 65 72 61 74 6f 72 2e 3c 2f 70 3e 20 5e 49 66 20  erator.</p> ^If 
16d60 74 68 65 20 62 61 73 65 20 0a 65 78 70 72 65 73  the base .expres
16d70 73 69 6f 6e 20 69 73 20 4e 55 4c 4c 20 74 68 65  sion is NULL the
16d80 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
16d90 74 68 65 20 43 41 53 45 20 69 73 20 61 6c 77 61  the CASE is alwa
16da0 79 73 20 74 68 65 20 72 65 73 75 6c 74 20 0a 6f  ys the result .o
16db0 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f evaluating the
16dc0 20 45 4c 53 45 20 65 78 70 72 65 73 73 69 6f 6e   ELSE expression
16dd0 20 69 66 20 69 74 20 65 78 69 73 74 73 2c 20 6f   if it exists, o
16de0 72 20 4e 55 4c 4c 20 69 66 20 69 74 20 64 6f 65  r NULL if it doe
16df0 73 20 6e 6f 74 2e 0a 0a 3c 70 3e 5e 42 6f 74 68  s not...<p>^Both
16e00 20 66 6f 72 6d 73 20 6f 66 20 74 68 65 20 43 41   forms of the CA
16e10 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73  SE expression us
16e20 65 20 6c 61 7a 79 2c 20 6f 72 20 73 68 6f 72 74  e lazy, or short
16e30 2d 63 69 72 63 75 69 74 2c 20 0a 65 76 61 6c 75  -circuit, .evalu
16e40 61 74 69 6f 6e 2e 0a 0a 3c 70 3e 5e 28 54 68 65  ation...<p>^(The
16e50 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65   only difference
16e60 20 62 65 74 77 65 65 6e 20 74 68 65 20 66 6f 6c   between the fol
16e70 6c 6f 77 69 6e 67 20 74 77 6f 20 43 41 53 45 20  lowing two CASE 
16e80 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73 20 74  expressions is t
16e90 68 61 74 20 0a 74 68 65 20 3c 69 3e 78 3c 2f 69  hat .the <i>x</i
16ea0 3e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  > expression is 
16eb0 65 76 61 6c 75 61 74 65 64 20 65 78 61 63 74 6c  evaluated exactl
16ec0 79 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 66 69  y once in the fi
16ed0 72 73 74 20 65 78 61 6d 70 6c 65 20 62 75 74 20  rst example but 
16ee0 0a 6d 69 67 68 74 20 62 65 20 65 76 61 6c 75 61  .might be evalua
16ef0 74 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d  ted multiple tim
16f00 65 73 20 69 6e 20 74 68 65 20 73 65 63 6f 6e 64  es in the second
16f10 3a 0a 0a 3c 75 6c 3e 3c 70 72 65 3e 0a 3c 6c 69  :..<ul><pre>.<li
16f20 3e 43 41 53 45 20 78 20 57 48 45 4e 20 77 31 20  >CASE x WHEN w1 
16f30 54 48 45 4e 20 72 31 20 57 48 45 4e 20 77 32 20  THEN r1 WHEN w2 
16f40 54 48 45 4e 20 72 32 20 45 4c 53 45 20 72 33 20  THEN r2 ELSE r3 
16f50 45 4e 44 0a 3c 6c 69 3e 43 41 53 45 20 57 48 45  END.<li>CASE WHE
16f60 4e 20 78 3d 77 31 20 54 48 45 4e 20 72 31 20 57  N x=w1 THEN r1 W
16f70 48 45 4e 20 78 3d 77 32 20 54 48 45 4e 20 72 32  HEN x=w2 THEN r2
16f80 20 45 4c 53 45 20 72 33 20 45 4e 44 0a 3c 2f 70   ELSE r3 END.</p
16f90 72 65 3e 3c 2f 75 6c 3e 29 5e 0a 0a 0a 3c 74 63  re></ul>)^...<tc
16fa0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e  l>hd_fragment in
16fb0 5f 6f 70 20 7b 49 4e 20 6f 70 65 72 61 74 6f 72  _op {IN operator
16fc0 7d 20 7b 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  } {NOT IN operat
16fd0 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  or}</tcl>.<h3>Th
16fe0 65 20 49 4e 20 61 6e 64 20 4e 4f 54 20 49 4e 20  e IN and NOT IN 
16ff0 6f 70 65 72 61 74 6f 72 73 3c 2f 68 33 3e 0a 3c  operators</h3>.<
17000 70 3e 5e 54 68 65 20 49 4e 20 61 6e 64 20 4e 4f  p>^The IN and NO
17010 54 20 49 4e 20 6f 70 65 72 61 74 6f 72 73 20 74  T IN operators t
17020 61 6b 65 20 61 6e 20 65 78 70 72 65 73 73 69 6f  ake an expressio
17030 6e 20 6f 6e 20 74 68 65 0a 6c 65 66 74 20 61 6e  n on the.left an
17040 64 20 61 20 6c 69 73 74 20 6f 66 20 76 61 6c 75  d a list of valu
17050 65 73 20 6f 72 20 61 20 73 75 62 71 75 65 72 79  es or a subquery
17060 20 6f 6e 20 74 68 65 20 72 69 67 68 74 2e 0a 5e   on the right..^
17070 57 68 65 6e 20 74 68 65 20 72 69 67 68 74 20 6f  When the right o
17080 70 65 72 61 6e 64 20 6f 66 20 61 6e 20 49 4e 20  perand of an IN 
17090 6f 72 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74  or NOT IN operat
170a0 6f 72 20 69 73 20 61 20 73 75 62 71 75 65 72 79  or is a subquery
170b0 2c 20 74 68 65 0a 73 75 62 71 75 65 72 79 20 6d  , the.subquery m
170c0 75 73 74 20 68 61 76 65 20 74 68 65 20 73 61 6d  ust have the sam
170d0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
170e0 6d 6e 73 20 61 73 20 74 68 65 72 65 20 61 72 65  mns as there are
170f0 20 63 6f 6c 75 6d 6e 73 20 69 6e 0a 74 68 65 20   columns in.the 
17100 5b 72 6f 77 20 76 61 6c 75 65 5d 20 6f 66 20 74  [row value] of t
17110 68 65 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 2e  he left operand.
17120 20 20 5e 54 68 65 20 73 75 62 71 75 65 72 79 20    ^The subquery 
17130 6f 6e 20 74 68 65 0a 72 69 67 68 74 20 6f 66 20  on the.right of 
17140 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20  an IN or NOT IN 
17150 6f 70 65 72 61 74 6f 72 20 6d 75 73 74 20 62 65  operator must be
17160 20 61 20 73 63 61 6c 61 72 20 73 75 62 71 75 65   a scalar subque
17170 72 79 20 69 66 20 74 68 65 20 6c 65 66 74 0a 65  ry if the left.e
17180 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e 6f 74  xpression is not
17190 20 61 20 5b 72 6f 77 20 76 61 6c 75 65 5d 20 65   a [row value] e
171a0 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 49 66 20 74  xpression..^If t
171b0 68 65 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  he right operand
171c0 20 6f 66 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54   of an IN or NOT
171d0 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 69 73 20   IN operator is 
171e0 61 20 6c 69 73 74 20 6f 66 20 76 61 6c 75 65 73  a list of values
171f0 2c 0a 65 61 63 68 20 6f 66 20 74 68 6f 73 65 20  ,.each of those 
17200 76 61 6c 75 65 73 20 6d 75 73 74 20 62 65 20 73  values must be s
17210 63 61 6c 61 72 73 20 61 6e 64 20 74 68 65 20 6c  calars and the l
17220 65 66 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6d  eft expression m
17230 75 73 74 20 61 6c 73 6f 0a 62 65 20 61 20 73 63  ust also.be a sc
17240 61 6c 61 72 2e 0a 5e 54 68 65 20 72 69 67 68 74  alar..^The right
17250 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e  -hand side of an
17260 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e 20 6f 70   IN or NOT IN op
17270 65 72 61 74 6f 72 20 63 61 6e 20 62 65 20 61 0a  erator can be a.
17280 74 61 62 6c 65 20 3c 69 3e 6e 61 6d 65 3c 2f 69  table <i>name</i
17290 3e 20 6f 72 20 5b 74 61 62 6c 65 2d 76 61 6c 75  > or [table-valu
172a0 65 64 20 66 75 6e 63 74 69 6f 6e 5d 20 3c 69 3e  ed function] <i>
172b0 6e 61 6d 65 3c 2f 69 3e 20 69 6e 20 77 68 69 63  name</i> in whic
172c0 68 20 0a 63 61 73 65 20 74 68 65 20 72 69 67 68  h .case the righ
172d0 74 2d 68 61 6e 64 20 73 69 64 65 20 69 73 20 75  t-hand side is u
172e0 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20  nderstood to be 
172f0 73 75 62 71 75 65 72 79 20 6f 66 0a 74 68 65 20  subquery of.the 
17300 66 6f 72 6d 20 22 28 53 45 4c 45 43 54 20 2a 20  form "(SELECT * 
17310 46 52 4f 4d 20 3c 69 3e 6e 61 6d 65 3c 2f 69 3e  FROM <i>name</i>
17320 29 22 2e 0a 5e 57 68 65 6e 20 74 68 65 20 72 69  )"..^When the ri
17330 67 68 74 20 6f 70 65 72 61 6e 64 20 69 73 20 61  ght operand is a
17340 6e 20 65 6d 70 74 79 20 73 65 74 2c 20 74 68 65  n empty set, the
17350 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 20 69 73   result of IN is
17360 20 66 61 6c 73 65 20 61 6e 64 20 74 68 65 0a 72   false and the.r
17370 65 73 75 6c 74 20 6f 66 20 4e 4f 54 20 49 4e 20  esult of NOT IN 
17380 69 73 20 74 72 75 65 2c 20 72 65 67 61 72 64 6c  is true, regardl
17390 65 73 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20  ess of the left 
173a0 6f 70 65 72 61 6e 64 20 61 6e 64 20 65 76 65 6e  operand and even
173b0 20 69 66 20 74 68 65 0a 6c 65 66 74 20 6f 70 65   if the.left ope
173c0 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 3c 70  rand is NULL..<p
173d0 3e 5e 28 54 68 65 20 72 65 73 75 6c 74 20 6f 66  >^(The result of
173e0 20 61 6e 20 49 4e 20 6f 72 20 4e 4f 54 20 49 4e   an IN or NOT IN
173f0 20 6f 70 65 72 61 74 6f 72 20 69 73 20 64 65 74   operator is det
17400 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 66  ermined by the f
17410 6f 6c 6c 6f 77 69 6e 67 0a 6d 61 74 72 69 78 3a  ollowing.matrix:
17420 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c  ..<center>.<tabl
17430 65 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  e border=1>.<tr>
17440 0a 3c 74 68 3e 4c 65 66 74 20 6f 70 65 72 61 6e  .<th>Left operan
17450 64 20 3c 62 72 3e 69 73 20 4e 55 4c 4c 0a 3c 74  d <br>is NULL.<t
17460 68 3e 52 69 67 68 74 20 6f 70 65 72 61 6e 64 20  h>Right operand 
17470 3c 62 72 3e 63 6f 6e 74 61 69 6e 73 20 4e 55 4c  <br>contains NUL
17480 4c 0a 3c 74 68 3e 52 69 67 68 74 20 6f 70 65 72  L.<th>Right oper
17490 61 6e 64 20 3c 62 72 3e 69 73 20 61 6e 20 65 6d  and <br>is an em
174a0 70 74 79 20 73 65 74 0a 3c 74 68 3e 4c 65 66 74  pty set.<th>Left
174b0 20 6f 70 65 72 61 6e 64 20 66 6f 75 6e 64 20 3c   operand found <
174c0 62 72 3e 77 69 74 68 69 6e 20 72 69 67 68 74 20  br>within right 
174d0 6f 70 65 72 61 6e 64 0a 3c 74 68 3e 52 65 73 75  operand.<th>Resu
174e0 6c 74 20 6f 66 20 3c 62 72 3e 49 4e 20 6f 70 65  lt of <br>IN ope
174f0 72 61 74 6f 72 0a 3c 74 68 3e 52 65 73 75 6c 74  rator.<th>Result
17500 20 6f 66 20 3c 62 72 3e 4e 4f 54 20 49 4e 20 6f   of <br>NOT IN o
17510 70 65 72 61 74 6f 72 0a 3c 74 72 3e 0a 3c 74 64  perator.<tr>.<td
17520 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
17530 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  no.<td align="ce
17540 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
17550 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c  gn="center">no.<
17560 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  td align="center
17570 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  ">no.<td align="
17580 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
17590 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
175a0 3e 74 72 75 65 0a 3c 74 72 3e 0a 3c 74 64 20 61  >true.<tr>.<td a
175b0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f  lign="center">do
175c0 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74  es not matter.<t
175d0 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  d align="center"
175e0 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  >no.<td align="c
175f0 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64 20 61  enter">yes.<td a
17600 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
17610 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
17620 65 72 22 3e 66 61 6c 73 65 0a 3c 74 64 20 61 6c  er">false.<td al
17630 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 74 72 75  ign="center">tru
17640 65 0a 3c 74 72 3e 0a 3c 74 64 20 61 6c 69 67 6e  e.<tr>.<td align
17650 3d 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64  ="center">no.<td
17660 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
17670 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 0a  does not matter.
17680 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
17690 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
176a0 22 63 65 6e 74 65 72 22 3e 79 65 73 0a 3c 74 64  "center">yes.<td
176b0 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e   align="center">
176c0 74 72 75 65 0a 3c 74 64 20 61 6c 69 67 6e 3d 22  true.<td align="
176d0 63 65 6e 74 65 72 22 3e 66 61 6c 73 65 0a 3c 74  center">false.<t
176e0 72 3e 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65  r>.<td align="ce
176f0 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69  nter">no.<td ali
17700 67 6e 3d 22 63 65 6e 74 65 72 22 3e 79 65 73 0a  gn="center">yes.
17710 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  <td align="cente
17720 72 22 3e 6e 6f 0a 3c 74 64 20 61 6c 69 67 6e 3d  r">no.<td align=
17730 22 63 65 6e 74 65 72 22 3e 6e 6f 0a 3c 74 64 20  "center">no.<td 
17740 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
17750 55 4c 4c 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ULL.<td align="c
17760 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 72 3e  enter">NULL.<tr>
17770 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
17780 65 72 22 3e 79 65 73 0a 3c 74 64 20 61 6c 69 67  er">yes.<td alig
17790 6e 3d 22 63 65 6e 74 65 72 22 3e 64 6f 65 73 20  n="center">does 
177a0 6e 6f 74 20 6d 61 74 74 65 72 0a 3c 74 64 20 61  not matter.<td a
177b0 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 6e 6f  lign="center">no
177c0 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63 65 6e 74  .<td align="cent
177d0 65 72 22 3e 64 6f 65 73 20 6e 6f 74 20 6d 61 74  er">does not mat
177e0 74 65 72 0a 3c 74 64 20 61 6c 69 67 6e 3d 22 63  ter.<td align="c
177f0 65 6e 74 65 72 22 3e 4e 55 4c 4c 0a 3c 74 64 20  enter">NULL.<td 
17800 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 4e  align="center">N
17810 55 4c 4c 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  ULL.</table>.</c
17820 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 4e 6f  enter>)^..<p>^No
17830 74 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 61  te that SQLite a
17840 6c 6c 6f 77 73 20 74 68 65 20 70 61 72 65 6e 74  llows the parent
17850 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20  hesized list of 
17860 73 63 61 6c 61 72 20 76 61 6c 75 65 73 20 6f 6e  scalar values on
17870 0a 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20  .the right-hand 
17880 73 69 64 65 20 6f 66 20 61 6e 20 49 4e 20 6f 72  side of an IN or
17890 20 4e 4f 54 20 49 4e 20 6f 70 65 72 61 74 6f 72   NOT IN operator
178a0 20 74 6f 20 62 65 20 61 6e 20 65 6d 70 74 79 20   to be an empty 
178b0 6c 69 73 74 20 62 75 74 0a 6d 6f 73 74 20 6f 74  list but.most ot
178c0 68 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65  her SQL database
178d0 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65   database engine
178e0 73 20 61 6e 64 20 74 68 65 20 53 51 4c 39 32 20  s and the SQL92 
178f0 73 74 61 6e 64 61 72 64 20 72 65 71 75 69 72 65  standard require
17900 0a 74 68 65 20 6c 69 73 74 20 74 6f 20 63 6f 6e  .the list to con
17910 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f 6e  tain at least on
17920 65 20 65 6c 65 6d 65 6e 74 2e 3c 2f 70 3e 0a 0a  e element.</p>..
17930 3c 68 33 3e 54 61 62 6c 65 20 43 6f 6c 75 6d 6e  <h3>Table Column
17940 20 4e 61 6d 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e   Names</h3>..<p>
17950 5e 41 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 63  ^A column name c
17960 61 6e 20 62 65 20 61 6e 79 20 6f 66 20 74 68 65  an be any of the
17970 20 6e 61 6d 65 73 20 64 65 66 69 6e 65 64 20 69   names defined i
17980 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41  n the [CREATE TA
17990 42 4c 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 6f  BLE].statement o
179a0 72 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  r one of the fol
179b0 6c 6f 77 69 6e 67 20 73 70 65 63 69 61 6c 20 69  lowing special i
179c0 64 65 6e 74 69 66 69 65 72 73 3a 20 22 3c 62 3e  dentifiers: "<b>
179d0 52 4f 57 49 44 3c 2f 62 3e 22 2c 0a 22 3c 62 3e  ROWID</b>",."<b>
179e0 4f 49 44 3c 2f 62 3e 22 2c 20 6f 72 20 22 3c 62  OID</b>", or "<b
179f0 3e 5f 52 4f 57 49 44 5f 3c 2f 62 3e 22 2e 0a 5e  >_ROWID_</b>"..^
17a00 54 68 65 20 74 68 72 65 65 20 73 70 65 63 69 61  The three specia
17a10 6c 20 69 64 65 6e 74 69 66 69 65 72 73 20 64 65  l identifiers de
17a20 73 63 72 69 62 65 20 74 68 65 0a 75 6e 69 71 75  scribe the.uniqu
17a30 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 28 74  e integer key (t
17a40 68 65 20 5b 72 6f 77 69 64 5d 29 20 61 73 73 6f  he [rowid]) asso
17a50 63 69 61 74 65 64 20 77 69 74 68 20 65 76 65 72  ciated with ever
17a60 79 20 0a 72 6f 77 20 6f 66 20 65 76 65 72 79 20  y .row of every 
17a70 74 61 62 6c 65 20 61 6e 64 20 73 6f 20 61 72 65  table and so are
17a80 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20 6f   not available o
17a90 6e 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44  n [WITHOUT ROWID
17aa0 5d 20 74 61 62 6c 65 73 2e 0a 5e 54 68 65 20 73  ] tables..^The s
17ab0 70 65 63 69 61 6c 20 69 64 65 6e 74 69 66 69 65  pecial identifie
17ac0 72 73 20 6f 6e 6c 79 20 72 65 66 65 72 20 74 6f  rs only refer to
17ad0 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69 66 20   the row key if 
17ae0 74 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c  the [CREATE TABL
17af0 45 5d 0a 73 74 61 74 65 6d 65 6e 74 20 64 6f 65  E].statement doe
17b00 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 61 20 72  s not define a r
17b10 65 61 6c 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20  eal column with 
17b20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2e 0a 5e  the same name..^
17b30 54 68 65 20 72 6f 77 69 64 20 63 61 6e 20 62 65  The rowid can be
17b40 20 75 73 65 64 20 61 6e 79 77 68 65 72 65 20 61   used anywhere a
17b50 20 72 65 67 75 6c 61 72 0a 63 6f 6c 75 6d 6e 20   regular.column 
17b60 63 61 6e 20 62 65 20 75 73 65 64 2e 3c 2f 70 3e  can be used.</p>
17b70 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
17b80 6e 74 20 65 78 69 73 74 73 5f 6f 70 20 7b 45 58  nt exists_op {EX
17b90 49 53 54 53 20 6f 70 65 72 61 74 6f 72 7d 20 7b  ISTS operator} {
17ba0 4e 4f 54 20 45 58 49 53 54 53 20 6f 70 65 72 61  NOT EXISTS opera
17bb0 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  tor}</tcl>.<h3>T
17bc0 68 65 20 45 58 49 53 54 53 20 6f 70 65 72 61 74  he EXISTS operat
17bd0 6f 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  or</h3>..<p>^The
17be0 20 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72   EXISTS operator
17bf0 20 61 6c 77 61 79 73 20 65 76 61 6c 75 61 74 65   always evaluate
17c00 73 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  s to one of the 
17c10 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 30  integer values 0
17c20 20 0a 61 6e 64 20 31 2e 20 5e 49 66 20 65 78 65   .and 1. ^If exe
17c30 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43  cuting the SELEC
17c40 54 20 73 74 61 74 65 6d 65 6e 74 20 73 70 65 63  T statement spec
17c50 69 66 69 65 64 20 61 73 20 74 68 65 20 72 69 67  ified as the rig
17c60 68 74 2d 68 61 6e 64 20 0a 6f 70 65 72 61 6e 64  ht-hand .operand
17c70 20 6f 66 20 74 68 65 20 45 58 49 53 54 53 20 6f   of the EXISTS o
17c80 70 65 72 61 74 6f 72 20 77 6f 75 6c 64 20 72 65  perator would re
17c90 74 75 72 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  turn one or more
17ca0 20 72 6f 77 73 2c 20 74 68 65 6e 20 74 68 65 0a   rows, then the.
17cb0 45 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20  EXISTS operator 
17cc0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 31 2e 20  evaluates to 1. 
17cd0 5e 49 66 20 65 78 65 63 75 74 69 6e 67 20 74 68  ^If executing th
17ce0 65 20 53 45 4c 45 43 54 20 77 6f 75 6c 64 20 72  e SELECT would r
17cf0 65 74 75 72 6e 0a 6e 6f 20 72 6f 77 73 20 61 74  eturn.no rows at
17d00 20 61 6c 6c 2c 20 74 68 65 6e 20 74 68 65 20 45   all, then the E
17d10 58 49 53 54 53 20 6f 70 65 72 61 74 6f 72 20 65  XISTS operator e
17d20 76 61 6c 75 61 74 65 73 20 74 6f 20 30 2e 20 0a  valuates to 0. .
17d30 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20  .<p>^The number 
17d40 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 65 61  of columns in ea
17d50 63 68 20 72 6f 77 20 72 65 74 75 72 6e 65 64 20  ch row returned 
17d60 62 79 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  by the SELECT st
17d70 61 74 65 6d 65 6e 74 0a 28 69 66 20 61 6e 79 29  atement.(if any)
17d80 20 61 6e 64 20 74 68 65 20 73 70 65 63 69 66 69   and the specifi
17d90 63 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  c values returne
17da0 64 20 68 61 76 65 20 6e 6f 20 65 66 66 65 63 74  d have no effect
17db0 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 0a   on the results.
17dc0 6f 66 20 74 68 65 20 45 58 49 53 54 53 20 6f 70  of the EXISTS op
17dd0 65 72 61 74 6f 72 2e 20 5e 49 6e 20 70 61 72 74  erator. ^In part
17de0 69 63 75 6c 61 72 2c 20 72 6f 77 73 20 63 6f 6e  icular, rows con
17df0 74 61 69 6e 69 6e 67 20 4e 55 4c 4c 20 76 61 6c  taining NULL val
17e00 75 65 73 20 61 72 65 0a 6e 6f 74 20 68 61 6e 64  ues are.not hand
17e10 6c 65 64 20 61 6e 79 20 64 69 66 66 65 72 65 6e  led any differen
17e20 74 6c 79 20 66 72 6f 6d 20 72 6f 77 73 20 77 69  tly from rows wi
17e30 74 68 6f 75 74 20 4e 55 4c 4c 20 76 61 6c 75 65  thout NULL value
17e40 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  s...<tcl>hd_frag
17e50 6d 65 6e 74 20 73 75 62 71 20 7b 53 75 62 71 75  ment subq {Subqu
17e60 65 72 69 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  eries}</tcl>.<h3
17e70 3e 53 75 62 71 75 65 72 79 20 45 78 70 72 65 73  >Subquery Expres
17e80 73 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  sions</h3>..<p>^
17e90 41 20 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65  A [SELECT] state
17ea0 6d 65 6e 74 20 65 6e 63 6c 6f 73 65 64 20 69 6e  ment enclosed in
17eb0 20 70 61 72 65 6e 74 68 65 73 65 73 20 69 73 20   parentheses is 
17ec0 61 20 73 75 62 71 75 65 72 79 2e 0a 5e 41 6c 6c  a subquery..^All
17ed0 20 74 79 70 65 73 20 6f 66 20 53 45 4c 45 43 54   types of SELECT
17ee0 20 73 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c   statement, incl
17ef0 75 64 69 6e 67 0a 61 67 67 72 65 67 61 74 65 20  uding.aggregate 
17f00 61 6e 64 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c  and compound SEL
17f10 45 43 54 20 71 75 65 72 69 65 73 20 28 71 75 65  ECT queries (que
17f20 72 69 65 73 20 77 69 74 68 20 6b 65 79 77 6f 72  ries with keywor
17f30 64 73 20 6c 69 6b 65 0a 55 4e 49 4f 4e 20 6f 72  ds like.UNION or
17f40 20 45 58 43 45 50 54 29 20 61 72 65 20 61 6c 6c   EXCEPT) are all
17f50 6f 77 65 64 20 61 73 20 73 63 61 6c 61 72 20 73  owed as scalar s
17f60 75 62 71 75 65 72 69 65 73 2e 0a 5e 54 68 65 20  ubqueries..^The 
17f70 76 61 6c 75 65 20 6f 66 20 61 20 73 75 62 71 75  value of a subqu
17f80 65 72 79 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ery expression i
17f90 73 20 74 68 65 20 66 69 72 73 74 20 72 6f 77 20  s the first row 
17fa0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 0a 66 72  of the result.fr
17fb0 6f 6d 20 74 68 65 20 65 6e 63 6c 6f 73 65 64 20  om the enclosed 
17fc0 5b 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65  [SELECT] stateme
17fd0 6e 74 2e 0a 5e 49 6e 20 6f 74 68 65 72 20 77 6f  nt..^In other wo
17fe0 72 64 73 2c 20 61 6e 20 69 6d 70 6c 69 65 64 20  rds, an implied 
17ff0 22 4c 49 4d 49 54 20 31 22 20 69 73 20 61 64 64  "LIMIT 1" is add
18000 65 64 20 74 6f 20 74 68 65 20 73 75 62 71 75 65  ed to the subque
18010 72 79 2c 20 6f 76 65 72 72 69 64 69 6e 67 0a 61  ry, overriding.a
18020 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 63 6f 64  n explicitly cod
18030 65 64 20 4c 49 4d 49 54 2e 0a 5e 54 68 65 20 76  ed LIMIT..^The v
18040 61 6c 75 65 20 6f 66 20 61 20 73 75 62 71 75 65  alue of a subque
18050 72 79 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ry expression is
18060 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 65 6e 63   NULL if the enc
18070 6c 6f 73 65 64 0a 5b 53 45 4c 45 43 54 5d 20 73  losed.[SELECT] s
18080 74 61 74 65 6d 65 6e 74 20 72 65 74 75 72 6e 73  tatement returns
18090 20 6e 6f 20 72 6f 77 73 2e 0a 0a 3c 70 3e 41 20   no rows...<p>A 
180a0 73 75 62 71 75 65 72 79 20 74 68 61 74 20 72 65  subquery that re
180b0 74 75 72 6e 73 20 61 20 73 69 6e 67 6c 65 20 63  turns a single c
180c0 6f 6c 75 6d 6e 20 69 73 20 61 20 73 63 61 6c 61  olumn is a scala
180d0 72 20 73 75 62 71 75 65 72 79 20 61 6e 64 20 63  r subquery and c
180e0 61 6e 0a 62 65 20 75 73 65 64 20 6d 6f 73 74 20  an.be used most 
180f0 61 6e 79 77 68 65 72 65 2e 0a 5e 41 20 73 75 62  anywhere..^A sub
18100 71 75 65 72 79 20 74 68 61 74 20 72 65 74 75 72  query that retur
18110 6e 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 63  ns two or more c
18120 6f 6c 75 6d 6e 73 20 69 73 20 61 20 5b 72 6f 77  olumns is a [row
18130 20 76 61 6c 75 65 5d 0a 73 75 62 71 75 65 72 79   value].subquery
18140 20 61 6e 64 20 63 61 6e 20 6f 6e 6c 79 20 62 65   and can only be
18150 20 75 73 65 64 20 61 73 20 74 68 65 20 6f 70 65   used as the ope
18160 72 61 6e 64 20 6f 66 20 61 20 63 6f 6d 70 61 72  rand of a compar
18170 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 0a  ison operator...
18180 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
18190 20 63 6f 73 75 62 20 7b 63 6f 72 72 65 6c 61 74   cosub {correlat
181a0 65 64 20 73 75 62 71 75 65 72 69 65 73 7d 3c 2f  ed subqueries}</
181b0 74 63 6c 3e 0a 3c 68 33 3e 43 6f 72 72 65 6c 61  tcl>.<h3>Correla
181c0 74 65 64 20 53 75 62 71 75 65 72 69 65 73 3c 2f  ted Subqueries</
181d0 68 33 3e 0a 0a 3c 70 3e 5e 41 20 5b 53 45 4c 45  h3>..<p>^A [SELE
181e0 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 20 75 73  CT] statement us
181f0 65 64 20 61 73 20 65 69 74 68 65 72 20 61 20 73  ed as either a s
18200 63 61 6c 61 72 20 73 75 62 71 75 65 72 79 20 6f  calar subquery o
18210 72 20 61 73 20 74 68 65 20 0a 72 69 67 68 74 2d  r as the .right-
18220 68 61 6e 64 20 6f 70 65 72 61 6e 64 20 6f 66 20  hand operand of 
18230 61 6e 20 49 4e 2c 20 4e 4f 54 20 49 4e 20 6f 72  an IN, NOT IN or
18240 20 45 58 49 53 54 53 20 65 78 70 72 65 73 73 69   EXISTS expressi
18250 6f 6e 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 0a  on may contain .
18260 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 63 6f  references to co
18270 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6f 75 74  lumns in the out
18280 65 72 20 71 75 65 72 79 2e 20 53 75 63 68 20 61  er query. Such a
18290 20 73 75 62 71 75 65 72 79 20 69 73 20 6b 6e 6f   subquery is kno
182a0 77 6e 20 61 73 0a 61 20 63 6f 72 72 65 6c 61 74  wn as.a correlat
182b0 65 64 20 73 75 62 71 75 65 72 79 2e 20 5e 41 20  ed subquery. ^A 
182c0 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75  correlated subqu
182d0 65 72 79 20 69 73 20 72 65 65 76 61 6c 75 61 74  ery is reevaluat
182e0 65 64 20 65 61 63 68 20 74 69 6d 65 0a 69 74 73  ed each time.its
182f0 20 72 65 73 75 6c 74 20 69 73 20 72 65 71 75 69   result is requi
18300 72 65 64 2e 20 5e 41 6e 20 75 6e 63 6f 72 72 65  red. ^An uncorre
18310 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 69  lated subquery i
18320 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 6c 79  s evaluated only
18330 20 6f 6e 63 65 0a 61 6e 64 20 74 68 65 20 72 65   once.and the re
18340 73 75 6c 74 20 72 65 75 73 65 64 20 61 73 20 6e  sult reused as n
18350 65 63 65 73 73 61 72 79 2e 0a 0a 3c 74 63 6c 3e  ecessary...<tcl>
18360 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 61 73 74  hd_fragment cast
18370 65 78 70 72 20 7b 43 41 53 54 20 65 78 70 72 65  expr {CAST expre
18380 73 73 69 6f 6e 7d 20 7b 43 41 53 54 7d 20 7b 63  ssion} {CAST} {c
18390 61 73 74 7d 20 7b 43 41 53 54 20 6f 70 65 72 61  ast} {CAST opera
183a0 74 6f 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 43  tor}</tcl>.<h3>C
183b0 41 53 54 20 65 78 70 72 65 73 73 69 6f 6e 73 3c  AST expressions<
183c0 2f 68 33 3e 0a 0a 3c 70 3e 41 20 43 41 53 54 20  /h3>..<p>A CAST 
183d0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
183e0 65 20 66 6f 72 6d 20 22 43 41 53 54 28 3c 69 3e  e form "CAST(<i>
183f0 65 78 70 72 3c 2f 69 3e 20 41 53 20 3c 69 3e 74  expr</i> AS <i>t
18400 79 70 65 2d 6e 61 6d 65 3c 2f 69 3e 29 22 0a 69  ype-name</i>)".i
18410 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 76 65 72  s used to conver
18420 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 3c  t the value of <
18430 69 3e 65 78 70 72 3c 2f 69 3e 20 74 6f 20 0a 61  i>expr</i> to .a
18440 20 64 69 66 66 65 72 65 6e 74 20 5b 73 74 6f 72   different [stor
18450 61 67 65 20 63 6c 61 73 73 5d 20 73 70 65 63 69  age class] speci
18460 66 69 65 64 20 62 79 20 3c 79 79 74 65 72 6d 3e  fied by <yyterm>
18470 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  type-name</yyter
18480 6d 3e 2e 0a 5e 41 20 43 41 53 54 20 63 6f 6e 76  m>..^A CAST conv
18490 65 72 73 69 6f 6e 20 69 73 20 73 69 6d 69 6c 61  ersion is simila
184a0 72 20 74 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  r to the convers
184b0 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73 0a 70  ion that takes.p
184c0 6c 61 63 65 20 77 68 65 6e 20 61 20 5b 63 6f 6c  lace when a [col
184d0 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d 20 69 73  umn affinity] is
184e0 20 61 70 70 6c 69 65 64 20 74 6f 20 61 20 76 61   applied to a va
184f0 6c 75 65 20 65 78 63 65 70 74 20 74 68 61 74 20  lue except that 
18500 77 69 74 68 0a 74 68 65 20 43 41 53 54 20 6f 70  with.the CAST op
18510 65 72 61 74 6f 72 20 74 68 65 20 63 6f 6e 76 65  erator the conve
18520 72 73 69 6f 6e 20 61 6c 77 61 79 73 20 74 61 6b  rsion always tak
18530 65 73 20 70 6c 61 63 65 20 65 76 65 6e 20 69 66  es place even if
18540 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 0a   the conversion.
18550 6c 6f 73 73 79 20 61 6e 64 20 69 72 72 65 76 65  lossy and irreve
18560 72 73 69 62 6c 65 2c 20 77 68 65 72 65 61 73 20  rsible, whereas 
18570 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
18580 6f 6e 6c 79 20 63 68 61 6e 67 65 73 20 74 68 65  only changes the
18590 20 64 61 74 61 20 74 79 70 65 0a 6f 66 20 61 20   data type.of a 
185a0 76 61 6c 75 65 20 69 66 20 74 68 65 20 63 68 61  value if the cha
185b0 6e 67 65 20 69 73 20 6c 6f 73 73 6c 65 73 73 20  nge is lossless 
185c0 61 6e 64 20 72 65 76 65 72 73 69 62 6c 65 2e 0a  and reversible..
185d0 0a 3c 70 3e 5e 49 66 20 74 68 65 20 76 61 6c 75  .<p>^If the valu
185e0 65 20 6f 66 20 3c 69 3e 65 78 70 72 3c 2f 69 3e  e of <i>expr</i>
185f0 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74   is NULL, then t
18600 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
18610 20 43 41 53 54 0a 65 78 70 72 65 73 73 69 6f 6e   CAST.expression
18620 20 69 73 20 61 6c 73 6f 20 4e 55 4c 4c 2e 20 5e   is also NULL. ^
18630 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 73  Otherwise, the s
18640 74 6f 72 61 67 65 20 63 6c 61 73 73 20 6f 66 20  torage class of 
18650 74 68 65 20 72 65 73 75 6c 74 0a 69 73 20 64 65  the result.is de
18660 74 65 72 6d 69 6e 65 64 20 62 79 20 61 70 70 6c  termined by appl
18670 79 69 6e 67 20 74 68 65 20 5b 72 75 6c 65 73 20  ying the [rules 
18680 66 6f 72 20 64 65 74 65 72 6d 69 6e 69 6e 67 20  for determining 
18690 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 5d  column affinity]
186a0 20 74 6f 0a 74 68 65 20 3c 79 79 74 65 72 6d 3e   to.the <yyterm>
186b0 74 79 70 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  type-name</yyter
186c0 6d 3e 2e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64  m>...<table bord
186d0 65 72 3d 31 3e 0a 3c 74 72 3e 0a 20 20 3c 74 68  er=1>.<tr>.  <th
186e0 3e 20 41 66 66 69 6e 69 74 79 20 6f 66 20 3c 79  > Affinity of <y
186f0 79 74 65 72 6d 3e 74 79 70 65 2d 6e 61 6d 65 3c  yterm>type-name<
18700 2f 79 79 74 65 72 6d 3e 0a 20 20 3c 74 68 3e 20  /yyterm>.  <th> 
18710 43 6f 6e 76 65 72 73 69 6f 6e 20 50 72 6f 63 65  Conversion Proce
18720 73 73 69 6e 67 0a 3c 74 72 3e 0a 20 20 3c 74 64  ssing.<tr>.  <td
18730 3e 20 4e 4f 4e 45 20 0a 20 20 3c 74 64 3e 20 5e  > NONE .  <td> ^
18740 43 61 73 74 69 6e 67 20 61 20 76 61 6c 75 65 20  Casting a value 
18750 74 6f 20 61 20 3c 79 79 74 65 72 6d 3e 74 79 70  to a <yyterm>typ
18760 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20  e-name</yyterm> 
18770 77 69 74 68 20 6e 6f 20 61 66 66 69 6e 69 74 79  with no affinity
18780 20 0a 20 20 63 61 75 73 65 73 20 74 68 65 20 76   .  causes the v
18790 61 6c 75 65 20 74 6f 0a 20 20 62 65 20 63 6f 6e  alue to.  be con
187a0 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 42 4c  verted into a BL
187b0 4f 42 2e 20 20 5e 43 61 73 74 69 6e 67 20 74 6f  OB.  ^Casting to
187c0 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74 73   a BLOB consists
187d0 20 6f 66 20 66 69 72 73 74 20 63 61 73 74 69 6e   of first castin
187e0 67 0a 20 20 74 68 65 20 76 61 6c 75 65 20 74 6f  g.  the value to
187f0 20 54 45 58 54 20 69 6e 20 74 68 65 20 5b 65 6e   TEXT in the [en
18800 63 6f 64 69 6e 67 5d 20 6f 66 20 74 68 65 20 64  coding] of the d
18810 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
18820 6f 6e 2c 20 74 68 65 6e 0a 20 20 69 6e 74 65 72  on, then.  inter
18830 70 72 65 74 69 6e 67 20 74 68 65 20 72 65 73 75  preting the resu
18840 6c 74 69 6e 67 20 62 79 74 65 20 73 65 71 75 65  lting byte seque
18850 6e 63 65 20 61 73 20 61 20 42 4c 4f 42 20 69 6e  nce as a BLOB in
18860 73 74 65 61 64 20 6f 66 20 61 73 20 54 45 58 54  stead of as TEXT
18870 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 54  ...<tr>.  <td> T
18880 45 58 54 0a 20 20 3c 74 64 3e 20 5e 54 6f 20 63  EXT.  <td> ^To c
18890 61 73 74 20 61 20 42 4c 4f 42 20 76 61 6c 75 65  ast a BLOB value
188a0 20 74 6f 20 54 45 58 54 2c 20 74 68 65 20 73 65   to TEXT, the se
188b0 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 20  quence of bytes 
188c0 74 68 61 74 20 6d 61 6b 65 20 75 70 20 74 68 65  that make up the
188d0 0a 20 20 42 4c 4f 42 20 69 73 20 69 6e 74 65 72  .  BLOB is inter
188e0 70 72 65 74 65 64 20 61 73 20 74 65 78 74 20 65  preted as text e
188f0 6e 63 6f 64 65 64 20 75 73 69 6e 67 20 74 68 65  ncoded using the
18900 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69   database encodi
18910 6e 67 2e 0a 20 20 3c 70 3e 0a 20 20 20 5e 43 61  ng..  <p>.   ^Ca
18920 73 74 69 6e 67 20 61 6e 20 49 4e 54 45 47 45 52  sting an INTEGER
18930 20 6f 72 20 52 45 41 4c 20 76 61 6c 75 65 20 69   or REAL value i
18940 6e 74 6f 20 54 45 58 54 20 72 65 6e 64 65 72 73  nto TEXT renders
18950 20 74 68 65 20 76 61 6c 75 65 20 61 73 20 69 66   the value as if
18960 20 76 69 61 20 0a 20 20 20 20 5b 73 71 6c 69 74   via .    [sqlit
18970 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 5d 20 65  e3_snprintf()] e
18980 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 72  xcept that the r
18990 65 73 75 6c 74 69 6e 67 20 54 45 58 54 20 75 73  esulting TEXT us
189a0 65 73 20 74 68 65 20 5b 65 6e 63 6f 64 69 6e 67  es the [encoding
189b0 5d 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61 74  ] of.    the dat
189c0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
189d0 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 52  ...<tr>.  <td> R
189e0 45 41 4c 0a 20 20 3c 74 64 3e 20 5e 57 68 65 6e  EAL.  <td> ^When
189f0 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f 42 20   casting a BLOB 
18a00 76 61 6c 75 65 20 74 6f 20 61 20 52 45 41 4c 2c  value to a REAL,
18a10 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 66 69   the value is fi
18a20 72 73 74 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  rst converted to
18a30 0a 20 20 20 20 20 20 20 20 54 45 58 54 2e 0a 20  .        TEXT.. 
18a40 20 20 20 20 20 20 3c 70 3e 5e 57 68 65 6e 20 63        <p>^When c
18a50 61 73 74 69 6e 67 20 61 20 54 45 58 54 20 76 61  asting a TEXT va
18a60 6c 75 65 20 74 6f 20 52 45 41 4c 2c 20 74 68 65  lue to REAL, the
18a70 20 6c 6f 6e 67 65 73 74 20 70 6f 73 73 69 62 6c   longest possibl
18a80 65 20 70 72 65 66 69 78 20 6f 66 0a 20 20 20 20  e prefix of.    
18a90 20 20 20 20 74 68 65 20 76 61 6c 75 65 20 74 68      the value th
18aa0 61 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70  at can be interp
18ab0 72 65 74 65 64 20 61 73 20 61 20 72 65 61 6c 20  reted as a real 
18ac0 6e 75 6d 62 65 72 20 69 73 20 65 78 74 72 61 63  number is extrac
18ad0 74 65 64 20 66 72 6f 6d 0a 20 20 20 20 20 20 20  ted from.       
18ae0 20 74 68 65 20 54 45 58 54 20 76 61 6c 75 65 20   the TEXT value 
18af0 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 64 65  and the remainde
18b00 72 20 69 67 6e 6f 72 65 64 2e 20 5e 41 6e 79 20  r ignored. ^Any 
18b10 6c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20 69  leading spaces i
18b20 6e 20 74 68 65 0a 20 20 20 20 20 20 20 20 54 45  n the.        TE
18b30 58 54 20 76 61 6c 75 65 20 61 72 65 20 69 67 6e  XT value are ign
18b40 6f 72 65 64 20 77 68 65 6e 20 63 6f 6e 76 65 72  ored when conver
18b50 67 69 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74  ging from TEXT t
18b60 6f 20 52 45 41 4c 2e 20 5e 28 49 66 20 74 68 65  o REAL. ^(If the
18b70 72 65 20 69 73 0a 20 20 20 20 20 20 20 20 6e 6f  re is.        no
18b80 20 70 72 65 66 69 78 20 74 68 61 74 20 63 61 6e   prefix that can
18b90 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
18ba0 61 73 20 61 20 72 65 61 6c 20 6e 75 6d 62 65 72  as a real number
18bb0 2c 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  , the result of 
18bc0 74 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6e 76  the.        conv
18bd0 65 72 73 69 6f 6e 20 69 73 20 30 2e 30 2e 29 5e  ersion is 0.0.)^
18be0 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e 20 49 4e  ..<tr>.  <td> IN
18bf0 54 45 47 45 52 0a 20 20 3c 74 64 3e 20 5e 57 68  TEGER.  <td> ^Wh
18c00 65 6e 20 63 61 73 74 69 6e 67 20 61 20 42 4c 4f  en casting a BLO
18c10 42 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47  B value to INTEG
18c20 45 52 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73  ER, the value is
18c30 20 66 69 72 73 74 20 63 6f 6e 76 65 72 74 65 64   first converted
18c40 20 74 6f 0a 20 20 20 20 20 20 20 20 54 45 58 54   to.        TEXT
18c50 2e 0a 20 20 20 20 20 20 20 3c 70 3e 5e 57 68 65  ..       <p>^Whe
18c60 6e 20 63 61 73 74 69 6e 67 20 61 20 54 45 58 54  n casting a TEXT
18c70 20 76 61 6c 75 65 20 74 6f 20 49 4e 54 45 47 45   value to INTEGE
18c80 52 2c 20 74 68 65 20 6c 6f 6e 67 65 73 74 20 70  R, the longest p
18c90 6f 73 73 69 62 6c 65 20 70 72 65 66 69 78 20 6f  ossible prefix o
18ca0 66 0a 20 20 20 20 20 20 20 20 74 68 65 20 76 61  f.        the va
18cb0 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 20  lue that can be 
18cc0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
18cd0 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
18ce0 20 69 73 20 65 78 74 72 61 63 74 65 64 20 66 72   is extracted fr
18cf0 6f 6d 0a 20 20 20 20 20 20 20 20 74 68 65 20 54  om.        the T
18d00 45 58 54 20 76 61 6c 75 65 20 61 6e 64 20 74 68  EXT value and th
18d10 65 20 72 65 6d 61 69 6e 64 65 72 20 69 67 6e 6f  e remainder igno
18d20 72 65 64 2e 20 5e 41 6e 79 20 6c 65 61 64 69 6e  red. ^Any leadin
18d30 67 20 73 70 61 63 65 73 20 69 6e 20 74 68 65 0a  g spaces in the.
18d40 20 20 20 20 20 20 20 20 54 45 58 54 20 76 61 6c          TEXT val
18d50 75 65 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69  ue when converti
18d60 6e 67 20 66 72 6f 6d 20 54 45 58 54 20 74 6f 20  ng from TEXT to 
18d70 49 4e 54 45 47 45 52 20 61 72 65 20 69 67 6e 6f  INTEGER are igno
18d80 72 65 64 2e 20 5e 49 66 20 74 68 65 72 65 0a 20  red. ^If there. 
18d90 20 20 20 20 20 20 20 69 73 20 6e 6f 20 70 72 65         is no pre
18da0 66 69 78 20 74 68 61 74 20 63 61 6e 20 62 65 20  fix that can be 
18db0 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
18dc0 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d 62 65 72  n integer number
18dd0 2c 20 74 68 65 20 72 65 73 75 6c 74 0a 20 20 20  , the result.   
18de0 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 76       of the conv
18df0 65 72 73 69 6f 6e 20 69 73 20 30 2e 20 20 5e 49  ersion is 0.  ^I
18e00 66 20 74 68 65 20 70 72 65 66 69 78 20 69 6e 74  f the prefix int
18e10 65 67 65 72 20 69 73 20 67 72 65 61 74 65 72 20  eger is greater 
18e20 74 68 61 6e 0a 20 20 20 20 20 20 20 20 2b 39 32  than.        +92
18e30 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
18e40 37 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  7 then the resul
18e50 74 20 6f 66 20 74 68 65 20 63 61 73 74 20 69 73  t of the cast is
18e60 20 65 78 61 63 74 6c 79 0a 20 20 20 20 20 20 20   exactly.       
18e70 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37   +92233720368547
18e80 37 35 38 30 37 2e 20 20 5e 53 69 6d 69 6c 61 72  75807.  ^Similar
18e90 6c 79 2c 20 69 66 20 74 68 65 20 70 72 65 66 69  ly, if the prefi
18ea0 78 20 69 6e 74 65 67 65 72 20 69 73 0a 20 20 20  x integer is.   
18eb0 20 20 20 20 20 6c 65 73 73 20 74 68 61 6e 20 2d       less than -
18ec0 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
18ed0 38 30 38 20 74 68 65 6e 20 74 68 65 20 72 65 73  808 then the res
18ee0 75 6c 74 20 6f 66 20 74 68 65 20 63 61 73 74 20  ult of the cast 
18ef0 69 73 0a 20 20 20 20 20 20 20 20 65 78 61 63 74  is.        exact
18f00 6c 79 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  ly -922337203685
18f10 34 37 37 35 38 30 38 2e 0a 0a 20 20 20 20 20 20  4775808...      
18f20 20 20 3c 70 3e 5e 57 68 65 6e 20 63 61 73 74 69    <p>^When casti
18f30 6e 67 20 74 6f 20 49 4e 54 45 47 45 52 2c 20 69  ng to INTEGER, i
18f40 66 20 74 68 65 20 74 65 78 74 20 6c 6f 6f 6b 73  f the text looks
18f50 20 6c 69 6b 65 20 61 20 66 6c 6f 61 74 69 6e 67   like a floating
18f60 20 70 6f 69 6e 74 0a 20 20 20 20 20 20 20 20 76   point.        v
18f70 61 6c 75 65 20 77 69 74 68 20 61 6e 20 65 78 70  alue with an exp
18f80 6f 6e 65 6e 74 2c 20 74 68 65 20 65 78 70 6f 6e  onent, the expon
18f90 65 6e 74 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f  ent will be igno
18fa0 72 65 64 20 62 65 63 61 75 73 65 20 69 74 20 69  red because it i
18fb0 73 0a 20 20 20 20 20 20 20 20 6e 6f 20 70 61 72  s.        no par
18fc0 74 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  t of the integer
18fd0 20 70 72 65 66 69 78 2e 20 20 5e 46 6f 72 20 65   prefix.  ^For e
18fe0 78 61 6d 70 6c 65 2c 0a 20 20 20 20 20 20 20 20  xample,.        
18ff0 22 28 43 41 53 54 20 27 31 32 33 65 2b 35 27 20  "(CAST '123e+5' 
19000 41 53 20 49 4e 54 45 47 45 52 29 22 20 72 65 73  AS INTEGER)" res
19010 75 6c 74 73 20 69 6e 20 31 32 33 2c 20 6e 6f 74  ults in 123, not
19020 20 69 6e 20 31 32 33 30 30 30 30 30 2e 0a 0a 20   in 12300000... 
19030 20 20 20 20 20 20 20 3c 70 3e 20 5e 28 54 68 65         <p> ^(The
19040 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72 20 75   CAST operator u
19050 6e 64 65 72 73 74 61 6e 64 73 20 64 65 63 69 6d  nderstands decim
19060 61 6c 0a 20 20 20 20 20 20 20 20 69 6e 74 65 67  al.        integ
19070 65 72 73 20 6f 6e 6c 79 20 26 6d 64 61 73 68 3b  ers only &mdash;
19080 20 63 6f 6e 76 65 72 73 69 6f 6e 20 6f 66 20 5b   conversion of [
19090 68 65 78 61 64 65 63 69 6d 61 6c 20 69 6e 74 65  hexadecimal inte
190a0 67 65 72 73 5d 20 73 74 6f 70 73 20 0a 20 20 20  gers] stops .   
190b0 20 20 20 20 20 61 74 20 74 68 65 20 22 78 22 20       at the "x" 
190c0 69 6e 20 74 68 65 20 22 30 78 22 20 70 72 65 66  in the "0x" pref
190d0 69 78 20 6f 66 20 74 68 65 20 68 65 78 61 64 65  ix of the hexade
190e0 63 69 6d 61 6c 20 69 6e 74 65 67 65 72 20 73 74  cimal integer st
190f0 72 69 6e 67 20 0a 20 20 20 20 20 20 20 20 61 6e  ring .        an
19100 64 20 74 68 75 73 20 72 65 73 75 6c 74 20 6f 66  d thus result of
19110 20 74 68 65 20 43 41 53 54 20 69 73 20 61 6c 77   the CAST is alw
19120 61 79 73 20 7a 65 72 6f 2e 29 5e 0a 0a 20 20 20  ays zero.)^..   
19130 20 20 20 3c 70 3e 5e 41 20 63 61 73 74 20 6f 66     <p>^A cast of
19140 20 61 20 52 45 41 4c 20 76 61 6c 75 65 20 69 6e   a REAL value in
19150 74 6f 20 61 6e 20 49 4e 54 45 47 45 52 20 72 65  to an INTEGER re
19160 73 75 6c 74 73 20 69 6e 20 74 68 65 20 69 6e 74  sults in the int
19170 65 67 65 72 0a 20 20 20 20 20 20 62 65 74 77 65  eger.      betwe
19180 65 6e 20 74 68 65 20 52 45 41 4c 20 76 61 6c 75  en the REAL valu
19190 65 20 61 6e 64 20 7a 65 72 6f 20 74 68 61 74 20  e and zero that 
191a0 69 73 20 63 6c 6f 73 65 73 74 20 74 6f 20 74 68  is closest to th
191b0 65 20 52 45 41 4c 20 76 61 6c 75 65 2e 0a 20 20  e REAL value..  
191c0 20 20 20 20 5e 49 66 20 61 20 52 45 41 4c 20 69      ^If a REAL i
191d0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
191e0 68 65 20 67 72 65 61 74 65 73 74 20 70 6f 73 73  he greatest poss
191f0 69 62 6c 65 20 73 69 67 6e 65 64 0a 20 20 20 20  ible signed.    
19200 20 20 69 6e 74 65 67 65 72 20 28 2b 39 32 32 33    integer (+9223
19210 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29  372036854775807)
19220 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
19230 20 69 73 20 74 68 65 20 67 72 65 61 74 65 73 74   is the greatest
19240 20 70 6f 73 73 69 62 6c 65 0a 20 20 20 20 20 20   possible.      
19250 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61  signed integer a
19260 6e 64 20 69 66 20 74 68 65 20 52 45 41 4c 20 69  nd if the REAL i
19270 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
19280 6c 65 61 73 74 20 70 6f 73 73 69 62 6c 65 20 73  least possible s
19290 69 67 6e 65 64 0a 20 20 20 20 20 20 69 6e 74 65  igned.      inte
192a0 67 65 72 20 28 2d 39 32 32 33 33 37 32 30 33 36  ger (-9223372036
192b0 38 35 34 37 37 35 38 30 38 29 20 74 68 65 6e 20  854775808) then 
192c0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
192d0 65 20 6c 65 61 73 74 20 70 6f 73 73 69 62 6c 65  e least possible
192e0 0a 20 20 20 20 20 20 73 69 67 6e 65 64 20 69 6e  .      signed in
192f0 74 65 67 65 72 2e 0a 0a 20 20 20 20 20 20 3c 70  teger...      <p
19300 3e 50 72 69 6f 72 20 74 6f 20 53 51 4c 69 74 65  >Prior to SQLite
19310 20 76 65 72 73 69 6f 6e 20 33 2e 38 2e 32 20 28   version 3.8.2 (
19320 5b 64 61 74 65 6f 66 3a 33 2e 38 2e 32 5d 29 2c  [dateof:3.8.2]),
19330 0a 20 20 20 20 20 20 63 61 73 74 69 6e 67 20 61  .      casting a
19340 20 52 45 41 4c 20 76 61 6c 75 65 20 67 72 65 61   REAL value grea
19350 74 65 72 20 74 68 61 6e 0a 20 20 20 20 20 20 2b  ter than.      +
19360 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
19370 38 30 37 2e 30 20 69 6e 74 6f 20 61 6e 20 69 6e  807.0 into an in
19380 74 65 67 65 72 20 72 65 73 75 6c 74 65 64 20 69  teger resulted i
19390 6e 20 74 68 65 20 6d 6f 73 74 20 6e 65 67 61 74  n the most negat
193a0 69 76 65 0a 20 20 20 20 20 20 69 6e 74 65 67 65  ive.      intege
193b0 72 2c 20 2d 39 32 32 33 33 37 32 30 33 36 38 35  r, -922337203685
193c0 34 37 37 35 38 30 38 2e 20 20 54 68 69 73 20 62  4775808.  This b
193d0 65 68 61 76 69 6f 72 20 77 61 73 20 6d 65 61 6e  ehavior was mean
193e0 74 20 74 6f 20 65 6d 75 6c 61 74 65 20 74 68 65  t to emulate the
193f0 0a 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 20  .      behavior 
19400 6f 66 20 78 38 36 2f 78 36 34 20 68 61 72 64 77  of x86/x64 hardw
19410 61 72 65 20 77 68 65 6e 20 64 6f 69 6e 67 20 74  are when doing t
19420 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 63 61  he equivalent ca
19430 73 74 2e 0a 0a 3c 74 72 3e 0a 20 20 3c 74 64 3e  st...<tr>.  <td>
19440 20 4e 55 4d 45 52 49 43 0a 20 20 3c 74 64 3e 20   NUMERIC.  <td> 
19450 5e 43 61 73 74 69 6e 67 20 61 20 54 45 58 54 20  ^Casting a TEXT 
19460 6f 72 20 42 4c 4f 42 20 76 61 6c 75 65 20 69 6e  or BLOB value in
19470 74 6f 20 4e 55 4d 45 52 49 43 20 66 69 72 73 74  to NUMERIC first
19480 20 64 6f 65 73 20 61 20 66 6f 72 63 65 64 0a 20   does a forced. 
19490 20 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 6e 74    conversion int
194a0 6f 20 52 45 41 4c 20 62 75 74 20 74 68 65 6e 20  o REAL but then 
194b0 66 75 72 74 68 65 72 20 63 6f 6e 76 65 72 74 73  further converts
194c0 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f   the result into
194d0 20 49 4e 54 45 47 45 52 20 69 66 0a 20 20 20 61   INTEGER if.   a
194e0 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 63  nd only if the c
194f0 6f 6e 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 52  onversion from R
19500 45 41 4c 20 74 6f 20 49 4e 54 45 47 45 52 20 69  EAL to INTEGER i
19510 73 20 6c 6f 73 73 6c 65 73 73 20 61 6e 64 20 72  s lossless and r
19520 65 76 65 72 73 69 62 6c 65 2e 0a 20 20 20 54 68  eversible..   Th
19530 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63  is is the only c
19540 6f 6e 74 65 78 74 20 69 6e 20 53 51 4c 69 74 65  ontext in SQLite
19550 20 77 68 65 72 65 20 74 68 65 20 4e 55 4d 45 52   where the NUMER
19560 49 43 20 61 6e 64 20 49 4e 54 45 47 45 52 20 5b  IC and INTEGER [
19570 61 66 66 69 6e 69 74 69 65 73 5d 0a 20 20 20 62  affinities].   b
19580 65 68 61 76 65 20 64 69 66 66 65 72 65 6e 74 6c  ehave differentl
19590 79 2e 0a 20 20 20 3c 70 3e 20 5e 43 61 73 74 69  y..   <p> ^Casti
195a0 6e 67 20 61 20 52 45 41 4c 20 6f 72 20 49 4e 54  ng a REAL or INT
195b0 45 47 45 52 20 76 61 6c 75 65 20 74 6f 20 4e 55  EGER value to NU
195c0 4d 45 52 49 43 20 69 73 20 61 20 6e 6f 2d 6f 70  MERIC is a no-op
195d0 2c 20 65 76 65 6e 20 69 66 20 61 20 72 65 61 6c  , even if a real
195e0 0a 20 20 20 76 61 6c 75 65 20 63 6f 75 6c 64 20  .   value could 
195f0 62 65 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f  be losslessly co
19600 6e 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e  nverted to an in
19610 74 65 67 65 72 2e 0a 0a 3c 2f 74 72 3e 0a 0a 3c  teger...</tr>..<
19620 2f 74 61 62 6c 65 3e 0a 0a 3c 70 3e 5e 4e 6f 74  /table>..<p>^Not
19630 65 20 74 68 61 74 20 74 68 65 20 72 65 73 75 6c  e that the resul
19640 74 20 66 72 6f 6d 20 63 61 73 74 69 6e 67 20 61  t from casting a
19650 6e 79 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75  ny non-BLOB valu
19660 65 20 69 6e 74 6f 20 61 20 0a 42 4c 4f 42 20 61  e into a .BLOB a
19670 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 66 72  nd the result fr
19680 6f 6d 20 63 61 73 74 69 6e 67 20 61 6e 79 20 42  om casting any B
19690 4c 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  LOB value into a
196a0 20 6e 6f 6e 2d 42 4c 4f 42 20 76 61 6c 75 65 0a   non-BLOB value.
196b0 6d 61 79 20 62 65 20 64 69 66 66 65 72 65 6e 74  may be different
196c0 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
196d0 65 74 68 65 72 20 74 68 65 20 64 61 74 61 62 61  ether the databa
196e0 73 65 20 5b 65 6e 63 6f 64 69 6e 67 5d 20 69 73  se [encoding] is
196f0 20 55 54 46 2d 38 2c 0a 55 54 46 2d 31 36 62 65   UTF-8,.UTF-16be
19700 2c 20 6f 72 20 55 54 46 2d 31 36 6c 65 2e 0a 0a  , or UTF-16le...
19710 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
19720 74 20 62 6f 6f 6c 65 61 6e 65 78 70 72 20 7b 62  t booleanexpr {b
19730 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
19740 6e 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 42 6f 6f  n}</tcl>.<h3>Boo
19750 6c 65 61 6e 20 45 78 70 72 65 73 73 69 6f 6e 73  lean Expressions
19760 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 53 51  </h3>..<p>The SQ
19770 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75  L language featu
19780 72 65 73 20 73 65 76 65 72 61 6c 20 63 6f 6e 74  res several cont
19790 65 78 74 73 20 77 68 65 72 65 20 61 6e 20 65 78  exts where an ex
197a0 70 72 65 73 73 69 6f 6e 20 69 73 20 0a 65 76 61  pression is .eva
197b0 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72  luated and the r
197c0 65 73 75 6c 74 20 63 6f 6e 76 65 72 74 65 64 20  esult converted 
197d0 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 28 74 72  to a boolean (tr
197e0 75 65 20 6f 72 20 66 61 6c 73 65 29 20 76 61 6c  ue or false) val
197f0 75 65 2e 20 54 68 65 73 65 0a 63 6f 6e 74 65 78  ue. These.contex
19800 74 73 20 61 72 65 3a 0a 0a 20 20 3c 75 6c 3e 0a  ts are:..  <ul>.
19810 20 20 20 20 3c 6c 69 3e 20 74 68 65 20 57 48 45      <li> the WHE
19820 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  RE clause of a S
19830 45 4c 45 43 54 2c 20 55 50 44 41 54 45 20 6f 72  ELECT, UPDATE or
19840 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
19850 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65 20  t,.    <li> the 
19860 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75  ON or USING clau
19870 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 69 6e 20  se of a join in 
19880 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
19890 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74 68 65  nt,.    <li> the
198a0 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 6f   HAVING clause o
198b0 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
198c0 6d 65 6e 74 2c 0a 20 20 20 20 3c 6c 69 3e 20 74  ment,.    <li> t
198d0 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
198e0 66 20 61 6e 20 53 51 4c 20 74 72 69 67 67 65 72  f an SQL trigger
198f0 2c 20 61 6e 64 0a 20 20 20 20 3c 6c 69 3e 20 74  , and.    <li> t
19900 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  he WHEN clause o
19910 72 20 63 6c 61 75 73 65 73 20 6f 66 20 73 6f 6d  r clauses of som
19920 65 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  e CASE expressio
19930 6e 73 2e 0a 20 20 3c 2f 75 6c 3e 0a 0a 3c 70 3e  ns..  </ul>..<p>
19940 5e 28 54 6f 20 63 6f 6e 76 65 72 74 20 74 68 65  ^(To convert the
19950 20 72 65 73 75 6c 74 73 20 6f 66 20 61 6e 20 53   results of an S
19960 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f  QL expression to
19970 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
19980 2c 20 53 51 4c 69 74 65 0a 66 69 72 73 74 20 63  , SQLite.first c
19990 61 73 74 73 20 74 68 65 20 72 65 73 75 6c 74 20  asts the result 
199a0 74 6f 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c  to a NUMERIC val
199b0 75 65 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ue in the same w
199c0 61 79 20 61 73 20 61 20 0a 5b 43 41 53 54 20 65  ay as a .[CAST e
199d0 78 70 72 65 73 73 69 6f 6e 5d 2e 20 41 20 6e 75  xpression]. A nu
199e0 6d 65 72 69 63 20 7a 65 72 6f 20 76 61 6c 75 65  meric zero value
199f0 20 28 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20   (integer value 
19a00 30 20 6f 72 20 72 65 61 6c 20 0a 76 61 6c 75 65  0 or real .value
19a10 20 30 2e 30 29 20 69 73 20 63 6f 6e 73 69 64 65   0.0) is conside
19a20 72 65 64 20 74 6f 20 62 65 20 66 61 6c 73 65 2e  red to be false.
19a30 20 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69    A NULL value i
19a40 73 20 73 74 69 6c 6c 20 4e 55 4c 4c 2e 0a 41 6c  s still NULL..Al
19a50 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61  l other values a
19a60 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  re considered tr
19a70 75 65 2e 29 5e 0a 0a 3c 70 3e 5e 28 46 6f 72 20  ue.)^..<p>^(For 
19a80 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 76 61 6c  example, the val
19a90 75 65 73 20 4e 55 4c 4c 2c 20 30 2e 30 2c 20 30  ues NULL, 0.0, 0
19aa0 2c 20 27 65 6e 67 6c 69 73 68 27 20 61 6e 64 20  , 'english' and 
19ab0 27 30 27 20 61 72 65 20 61 6c 6c 20 63 6f 6e 73  '0' are all cons
19ac0 69 64 65 72 65 64 0a 74 6f 20 62 65 20 66 61 6c  idered.to be fal
19ad0 73 65 2e 29 5e 20 5e 28 56 61 6c 75 65 73 20 31  se.)^ ^(Values 1
19ae0 2c 20 31 2e 30 2c 20 30 2e 31 2c 20 2d 30 2e 31  , 1.0, 0.1, -0.1
19af0 20 61 6e 64 20 27 31 65 6e 67 6c 69 73 68 27 20   and '1english' 
19b00 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74  are considered t
19b10 6f 20 0a 62 65 20 74 72 75 65 2e 29 5e 0a 0a 3c  o .be true.)^..<
19b20 70 3e 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  p>Beginning with
19b30 20 53 51 4c 69 74 65 20 33 2e 32 33 2e 30 20 28   SQLite 3.23.0 (
19b40 5b 64 61 74 65 6f 66 3a 33 2e 32 33 2e 30 5d 29  [dateof:3.23.0])
19b50 2c 20 53 51 4c 69 74 65 20 72 65 63 6f 67 6e 69  , SQLite recogni
19b60 7a 65 73 20 74 68 65 0a 69 64 65 6e 74 69 66 69  zes the.identifi
19b70 65 72 73 20 22 54 52 55 45 22 20 61 6e 64 20 22  ers "TRUE" and "
19b80 46 41 4c 53 45 22 20 61 73 20 62 6f 6f 6c 65 61  FALSE" as boolea
19b90 6e 20 6c 69 74 65 72 61 6c 73 2c 20 69 66 20 61  n literals, if a
19ba0 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 6f 73 65  nd only if those
19bb0 0a 69 64 65 6e 74 69 66 69 65 72 73 20 61 72 65  .identifiers are
19bc0 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 75 73 65   not already use
19bd0 64 20 66 6f 72 20 73 6f 6d 65 20 6f 74 68 65 72  d for some other
19be0 20 6d 65 61 6e 69 6e 67 2e 20 20 49 66 20 74 68   meaning.  If th
19bf0 65 72 65 20 61 6c 72 65 61 64 79 0a 65 78 69 73  ere already.exis
19c00 74 73 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 74 61  ts columns or ta
19c10 62 6c 65 73 20 6f 72 20 6f 74 68 65 72 20 6f 62  bles or other ob
19c20 6a 65 63 74 73 20 6e 61 6d 65 64 20 54 52 55 45  jects named TRUE
19c30 20 6f 72 20 46 41 4c 53 45 2c 20 74 68 65 6e 20   or FALSE, then 
19c40 66 6f 72 0a 74 68 65 20 73 61 6b 65 20 6f 66 20  for.the sake of 
19c50 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74  backwards compat
19c60 69 62 69 6c 69 74 79 2c 20 74 68 65 20 54 52 55  ibility, the TRU
19c70 45 20 61 6e 64 20 46 41 4c 53 45 20 69 64 65 6e  E and FALSE iden
19c80 74 69 66 69 65 72 73 20 72 65 66 65 72 0a 74 6f  tifiers refer.to
19c90 20 74 68 6f 73 65 20 6f 74 68 65 72 20 6f 62 6a   those other obj
19ca0 65 63 74 73 2c 20 6e 6f 74 20 74 6f 20 74 68 65  ects, not to the
19cb0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73 2e   boolean values.
19cc0 0a 0a 3c 70 3e 54 68 65 20 62 6f 6f 6c 65 61 6e  ..<p>The boolean
19cd0 20 69 64 65 6e 74 69 66 69 65 72 73 20 54 52 55   identifiers TRU
19ce0 45 20 61 6e 64 20 46 41 4c 53 45 20 61 72 65 20  E and FALSE are 
19cf0 75 73 75 61 6c 6c 79 20 6a 75 73 74 20 61 6c 69  usually just ali
19d00 61 73 65 73 20 66 6f 72 0a 74 68 65 20 69 6e 74  ases for.the int
19d10 65 67 65 72 20 76 61 6c 75 65 73 20 31 20 61 6e  eger values 1 an
19d20 64 20 30 2c 20 72 65 73 70 65 63 74 69 76 65 6c  d 0, respectivel
19d30 79 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20  y.  However, if 
19d40 54 52 55 45 20 6f 72 20 46 41 4c 53 45 0a 6f 63  TRUE or FALSE.oc
19d50 63 75 72 20 6f 6e 20 74 68 65 20 72 69 67 68 74  cur on the right
19d60 2d 68 61 6e 64 20 73 69 64 65 20 6f 66 20 61 6e  -hand side of an
19d70 20 49 53 20 6f 70 65 72 61 74 6f 72 2c 20 74 68   IS operator, th
19d80 65 6e 20 74 68 65 79 20 66 6f 72 6d 20 6e 65 77  en they form new
19d90 0a 75 6e 61 72 79 20 70 6f 73 74 66 69 78 20 6f  .unary postfix o
19da0 70 65 72 61 74 6f 72 73 20 22 49 53 20 54 52 55  perators "IS TRU
19db0 45 22 20 61 6e 64 20 22 49 53 20 46 41 4c 53 45  E" and "IS FALSE
19dc0 22 20 77 68 69 63 68 20 74 65 73 74 20 74 68 65  " which test the
19dd0 20 62 6f 6f 6c 65 61 6e 0a 76 61 6c 75 65 20 6f   boolean.value o
19de0 66 20 74 68 65 20 6f 70 65 72 61 6e 64 20 6f 6e  f the operand on
19df0 20 74 68 65 20 6c 65 66 74 2e 0a 0a 3c 68 33 3e   the left...<h3>
19e00 46 75 6e 63 74 69 6f 6e 73 3c 2f 68 33 3e 0a 3c  Functions</h3>.<
19e10 70 3e 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  p>SQLite support
19e20 73 20 6d 61 6e 79 20 5b 63 6f 72 65 66 75 6e 63  s many [corefunc
19e30 7c 73 69 6d 70 6c 65 5d 2c 20 5b 61 67 67 66 75  |simple], [aggfu
19e40 6e 63 7c 61 67 67 72 65 67 61 74 65 5d 2c 0a 61  nc|aggregate],.a
19e50 6e 64 20 5b 77 69 6e 64 6f 77 20 66 75 6e 63 74  nd [window funct
19e60 69 6f 6e 73 7c 77 69 6e 64 6f 77 5d 0a 53 51 4c  ions|window].SQL
19e70 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 46 6f 72   functions.  For
19e80 20 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 70 75   presentation pu
19e90 72 70 6f 73 65 73 2c 20 73 69 6d 70 6c 65 20 66  rposes, simple f
19ea0 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 66 75 72  unctions are fur
19eb0 74 68 65 72 0a 73 75 62 64 69 76 69 64 65 64 20  ther.subdivided 
19ec0 69 6e 74 6f 20 5b 63 6f 72 65 66 75 6e 63 20 7c  into [corefunc |
19ed0 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 5d   core functions]
19ee0 2c 20 5b 64 61 74 65 66 75 6e 63 7c 64 61 74 65  , [datefunc|date
19ef0 2d 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d  -time functions]
19f00 2c 0a 61 6e 64 20 5b 6a 73 6f 6e 31 7c 4a 53 4f  ,.and [json1|JSO
19f10 4e 20 66 75 6e 63 74 69 6f 6e 73 5d 2e 0a 41 70  N functions]..Ap
19f20 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 61  plications can a
19f30 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e 73  dd new functions
19f40 2c 20 77 72 69 74 74 65 6e 20 69 6e 20 43 2f 43  , written in C/C
19f50 2b 2b 2c 20 75 73 69 6e 67 20 74 68 65 0a 5b 73  ++, using the.[s
19f60 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
19f70 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  nction()] interf
19f80 61 63 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ace..</p>..<p>^I
19f90 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f  t is possible to
19fa0 20 68 61 76 65 20 61 6e 20 61 67 67 72 65 67 61   have an aggrega
19fb0 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  te function with
19fc0 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
19fd0 73 20 61 0a 73 69 6d 70 6c 65 20 66 75 6e 63 74  s a.simple funct
19fe0 69 6f 6e 2c 20 61 73 20 6c 6f 6e 67 20 61 73 20  ion, as long as 
19ff0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
1a000 67 75 6d 65 6e 74 73 20 66 6f 72 20 74 68 65 20  guments for the 
1a010 74 77 6f 20 66 6f 72 6d 73 20 6f 66 20 74 68 65  two forms of the
1a020 0a 66 75 6e 63 74 69 6f 6e 20 61 72 65 20 64 69  .function are di
1a030 66 66 65 72 65 6e 74 2e 20 20 5e 46 6f 72 20 65  fferent.  ^For e
1a040 78 61 6d 70 6c 65 2c 20 74 68 65 20 5b 61 67 67  xample, the [agg
1a050 5f 6d 61 78 7c 6d 61 78 28 29 5d 20 66 75 6e 63  _max|max()] func
1a060 74 69 6f 6e 20 77 69 74 68 20 61 0a 73 69 6e 67  tion with a.sing
1a070 6c 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  le argument is a
1a080 6e 20 61 67 67 72 65 67 61 74 65 20 61 6e 64 20  n aggregate and 
1a090 74 68 65 20 5b 6d 61 78 28 29 5d 20 66 75 6e 63  the [max()] func
1a0a0 74 69 6f 6e 20 77 69 74 68 20 74 77 6f 20 6f 72  tion with two or
1a0b0 20 6d 6f 72 65 0a 61 72 67 75 6d 65 6e 74 73 20   more.arguments 
1a0c0 69 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63  is a simple func
1a0d0 74 69 6f 6e 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23  tion...<tcl>.###
1a0e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a0f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a110 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a120 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
1a130 69 6f 6e 20 7b 43 6f 72 65 20 46 75 6e 63 74 69  ion {Core Functi
1a140 6f 6e 73 7d 20 63 6f 72 65 66 75 6e 63 20 7b 2a  ons} corefunc {*
1a150 63 6f 72 65 66 75 6e 63 7d 0a 75 6e 73 65 74 20  corefunc}.unset 
1a160 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 72 65  -nocomplain core
1a170 66 75 6e 63 73 65 74 0a 70 72 6f 63 20 66 75 6e  funcset.proc fun
1a180 63 64 65 66 20 7b 73 79 6e 74 61 78 20 6b 65 79  cdef {syntax key
1a190 77 6f 72 64 73 20 64 65 73 63 7d 20 7b 0a 20 20  words desc} {.  
1a1a0 67 6c 6f 62 61 6c 20 63 6f 72 65 66 75 6e 63 73  global corefuncs
1a1b0 65 74 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b 61  et.  regexp {^[a
1a1c0 2d 7a 5f 5d 2b 7d 20 24 73 79 6e 74 61 78 20 62  -z_]+} $syntax b
1a1d0 61 73 65 73 79 6e 74 61 78 0a 20 20 73 65 74 20  asesyntax.  set 
1a1e0 63 6f 72 65 66 75 6e 63 73 65 74 28 24 62 61 73  corefuncset($bas
1a1f0 65 73 79 6e 74 61 78 29 20 5b 6c 69 73 74 20 24  esyntax) [list $
1a200 73 79 6e 74 61 78 20 24 6b 65 79 77 6f 72 64 73  syntax $keywords
1a210 20 24 64 65 73 63 5d 0a 7d 0a 66 75 6e 63 64 65   $desc].}.funcde
1a220 66 20 7b 61 62 73 28 58 29 7d 20 7b 7d 20 7b 0a  f {abs(X)} {} {.
1a230 20 20 5e 54 68 65 20 61 62 73 28 58 29 20 66 75    ^The abs(X) fu
1a240 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74  nction returns t
1a250 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75  he absolute valu
1a260 65 20 6f 66 20 74 68 65 20 6e 75 6d 65 72 69 63  e of the numeric
1a270 0a 20 20 61 72 67 75 6d 65 6e 74 20 58 2e 20 20  .  argument X.  
1a280 5e 41 62 73 28 58 29 20 72 65 74 75 72 6e 73 20  ^Abs(X) returns 
1a290 4e 55 4c 4c 20 69 66 20 58 20 69 73 20 4e 55 4c  NULL if X is NUL
1a2a0 4c 2e 20 0a 20 20 5e 28 41 62 73 28 58 29 20 72  L. .  ^(Abs(X) r
1a2b0 65 74 75 72 6e 73 20 30 2e 30 20 69 66 20 58 20  eturns 0.0 if X 
1a2c0 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
1a2d0 6c 6f 62 0a 20 20 74 68 61 74 20 63 61 6e 6e 6f  lob.  that canno
1a2e0 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74  t be converted t
1a2f0 6f 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  o a numeric valu
1a300 65 2e 29 5e 20 20 5e 49 66 20 58 20 69 73 20 74  e.)^  ^If X is t
1a310 68 65 20 0a 20 20 69 6e 74 65 67 65 72 20 2d 39  he .  integer -9
1a320 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
1a330 30 38 20 74 68 65 6e 20 61 62 73 28 58 29 20 74  08 then abs(X) t
1a340 68 72 6f 77 73 20 61 6e 20 69 6e 74 65 67 65 72  hrows an integer
1a350 20 6f 76 65 72 66 6c 6f 77 0a 20 20 65 72 72 6f   overflow.  erro
1a360 72 20 73 69 6e 63 65 20 74 68 65 72 65 20 69 73  r since there is
1a370 20 6e 6f 20 65 71 75 69 76 61 6c 65 6e 74 20 70   no equivalent p
1a380 6f 73 69 74 69 76 65 20 36 34 2d 62 69 74 20 74  ositive 64-bit t
1a390 77 6f 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 76 61  wo complement va
1a3a0 6c 75 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  lue..}..funcdef 
1a3b0 7b 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b  {changes()} {} {
1a3c0 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28  .  ^The changes(
1a3d0 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1a3e0 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
1a3f0 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
1a400 68 61 74 20 77 65 72 65 20 63 68 61 6e 67 65 64  hat were changed
1a410 0a 20 20 6f 72 20 69 6e 73 65 72 74 65 64 20 6f  .  or inserted o
1a420 72 20 64 65 6c 65 74 65 64 20 62 79 20 74 68 65  r deleted by the
1a430 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 20 63   most recently c
1a440 6f 6d 70 6c 65 74 65 64 20 49 4e 53 45 52 54 2c  ompleted INSERT,
1a450 20 44 45 4c 45 54 45 2c 0a 20 20 6f 72 20 55 50   DELETE,.  or UP
1a460 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2c 20  DATE statement, 
1a470 65 78 63 6c 75 73 69 76 65 20 6f 66 20 73 74 61  exclusive of sta
1a480 74 65 6d 65 6e 74 73 20 69 6e 20 6c 6f 77 65 72  tements in lower
1a490 2d 6c 65 76 65 6c 20 74 72 69 67 67 65 72 73 2e  -level triggers.
1a4a0 0a 20 20 5e 54 68 65 20 63 68 61 6e 67 65 73 28  .  ^The changes(
1a4b0 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69  ) SQL function i
1a4c0 73 20 61 20 77 72 61 70 70 65 72 20 61 72 6f 75  s a wrapper arou
1a4d0 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  nd the [sqlite3_
1a4e0 63 68 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43  changes()].  C/C
1a4f0 2b 2b 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  ++ function and 
1a500 68 65 6e 63 65 20 66 6f 6c 6c 6f 77 73 20 74 68  hence follows th
1a510 65 20 73 61 6d 65 20 72 75 6c 65 73 20 66 6f 72  e same rules for
1a520 20 63 6f 75 6e 74 69 6e 67 20 63 68 61 6e 67 65   counting change
1a530 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63  s..}..funcdef {c
1a540 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58 4e  har(X1,X2,...,XN
1a550 29 7d 20 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20  )} {} {.  ^(The 
1a560 63 68 61 72 28 58 31 2c 58 32 2c 2e 2e 2e 2c 58  char(X1,X2,...,X
1a570 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  N) function retu
1a580 72 6e 73 20 61 20 73 74 72 69 6e 67 20 63 6f 6d  rns a string com
1a590 70 6f 73 65 64 20 6f 66 20 63 68 61 72 61 63 74  posed of charact
1a5a0 65 72 73 20 68 61 76 69 6e 67 20 74 68 65 0a 20  ers having the. 
1a5b0 20 20 75 6e 69 63 6f 64 65 20 63 6f 64 65 20 70    unicode code p
1a5c0 6f 69 6e 74 20 76 61 6c 75 65 73 20 6f 66 20 69  oint values of i
1a5d0 6e 74 65 67 65 72 73 20 58 31 20 74 68 72 6f 75  ntegers X1 throu
1a5e0 67 68 20 58 4e 2c 20 72 65 73 70 65 63 74 69 76  gh XN, respectiv
1a5f0 65 6c 79 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65  ely.)^.}..funcde
1a600 66 20 7b 63 6f 61 6c 65 73 63 65 28 58 2c 59 2c  f {coalesce(X,Y,
1a610 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  ...)} {} {.  ^Th
1a620 65 20 63 6f 61 6c 65 73 63 65 28 29 20 66 75 6e  e coalesce() fun
1a630 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1a640 63 6f 70 79 20 6f 66 20 69 74 73 20 66 69 72 73  copy of its firs
1a650 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d  t non-NULL argum
1a660 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c 4c 20 69  ent, or.  NULL i
1a670 66 20 61 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20  f all arguments 
1a680 61 72 65 20 4e 55 4c 4c 2e 20 20 5e 43 6f 61 6c  are NULL.  ^Coal
1a690 65 73 63 65 28 29 20 6d 75 73 74 20 68 61 76 65  esce() must have
1a6a0 20 61 74 20 6c 65 61 73 74 20 0a 20 20 32 20 61   at least .  2 a
1a6b0 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66 75 6e  rguments..}..fun
1a6c0 63 64 65 66 20 7b 67 6c 6f 62 28 58 2c 59 29 7d  cdef {glob(X,Y)}
1a6d0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 67 6c 6f   {} {.  ^The glo
1a6e0 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  b(X,Y) function 
1a6f0 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f  is equivalent to
1a700 20 74 68 65 0a 20 20 65 78 70 72 65 73 73 69 6f   the.  expressio
1a710 6e 20 22 3c 62 3e 59 20 47 4c 4f 42 20 58 3c 2f  n "<b>Y GLOB X</
1a720 62 3e 22 2e 0a 20 20 4e 6f 74 65 20 74 68 61 74  b>"..  Note that
1a730 20 74 68 65 20 58 20 61 6e 64 20 59 20 61 72 67   the X and Y arg
1a740 75 6d 65 6e 74 73 20 61 72 65 20 72 65 76 65 72  uments are rever
1a750 73 65 64 20 69 6e 20 74 68 65 20 67 6c 6f 62 28  sed in the glob(
1a760 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 6c  ) function.  rel
1a770 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e 66  ative to the inf
1a780 69 78 20 5b 47 4c 4f 42 5d 20 6f 70 65 72 61 74  ix [GLOB] operat
1a790 6f 72 2e 20 20 59 20 69 73 20 74 68 65 20 73 74  or.  Y is the st
1a7a0 72 69 6e 67 20 61 6e 64 20 58 20 69 73 20 74 68  ring and X is th
1a7b0 65 0a 20 20 70 61 74 74 65 72 6e 2e 20 20 53 6f  e.  pattern.  So
1a7c0 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74  , for example, t
1a7d0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70  he following exp
1a7e0 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65 71 75  ressions are equ
1a7f0 69 76 61 6c 65 6e 74 3a 0a 20 20 3c 62 6c 6f 63  ivalent:.  <bloc
1a800 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 20 20 20  kquote><pre>.   
1a810 20 20 6e 61 6d 65 20 4c 49 4b 45 20 27 2a 68 65    name LIKE '*he
1a820 6c 69 75 6d 2a 27 0a 20 20 20 20 20 67 6c 6f 62  lium*'.     glob
1a830 28 27 2a 68 65 6c 69 75 6d 2a 27 2c 6e 61 6d 65  ('*helium*',name
1a840 29 0a 20 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  ).  </pre></bloc
1a850 6b 71 75 6f 74 65 3e 0a 20 20 3c 70 3e 5e 49 66  kquote>.  <p>^If
1a860 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72   the [sqlite3_cr
1a870 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
1a880 20 69 6e 74 65 72 66 61 63 65 20 69 73 20 75 73   interface is us
1a890 65 64 20 74 6f 0a 20 20 6f 76 65 72 72 69 64 65  ed to.  override
1a8a0 20 74 68 65 20 67 6c 6f 62 28 58 2c 59 29 20 66   the glob(X,Y) f
1a8b0 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 6e 20  unction with an 
1a8c0 61 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c  alternative impl
1a8d0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 65 6e 0a  ementation then.
1a8e0 20 20 74 68 65 20 5b 47 4c 4f 42 5d 20 6f 70 65    the [GLOB] ope
1a8f0 72 61 74 6f 72 20 77 69 6c 6c 20 69 6e 76 6f 6b  rator will invok
1a900 65 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76  e the alternativ
1a910 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
1a920 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69 66  ..}..funcdef {if
1a930 6e 75 6c 6c 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  null(X,Y)} {} {.
1a940 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29 20    ^The ifnull() 
1a950 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1a960 20 61 20 63 6f 70 79 20 6f 66 20 69 74 73 20 66   a copy of its f
1a970 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  irst non-NULL ar
1a980 67 75 6d 65 6e 74 2c 20 6f 72 0a 20 20 4e 55 4c  gument, or.  NUL
1a990 4c 20 69 66 20 62 6f 74 68 20 61 72 67 75 6d 65  L if both argume
1a9a0 6e 74 73 20 61 72 65 20 4e 55 4c 4c 2e 20 20 5e  nts are NULL.  ^
1a9b0 49 66 6e 75 6c 6c 28 29 20 6d 75 73 74 20 68 61  Ifnull() must ha
1a9c0 76 65 20 65 78 61 63 74 6c 79 20 32 20 61 72 67  ve exactly 2 arg
1a9d0 75 6d 65 6e 74 73 2e 0a 20 20 5e 54 68 65 20 69  uments..  ^The i
1a9e0 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f 6e  fnull() function
1a9f0 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20 74   is equivalent t
1aa00 6f 20 5b 63 6f 61 6c 65 73 63 65 28 29 5d 20 77  o [coalesce()] w
1aa10 69 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74  ith two argument
1aa20 73 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 69  s..}..funcdef {i
1aa30 6e 73 74 72 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  nstr(X,Y)} {} {.
1aa40 20 20 5e 54 68 65 20 69 6e 73 74 72 28 58 2c 59    ^The instr(X,Y
1aa50 29 20 66 75 6e 63 74 69 6f 6e 20 66 69 6e 64 73  ) function finds
1aa60 20 74 68 65 20 66 69 72 73 74 20 6f 63 63 75 72   the first occur
1aa70 72 65 6e 63 65 20 6f 66 20 73 74 72 69 6e 67 20  rence of string 
1aa80 59 20 77 69 74 68 69 6e 20 0a 20 20 73 74 72 69  Y within .  stri
1aa90 6e 67 20 58 20 61 6e 64 20 72 65 74 75 72 6e 73  ng X and returns
1aaa0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
1aab0 72 69 6f 72 20 63 68 61 72 61 63 74 65 72 73 20  rior characters 
1aac0 70 6c 75 73 20 31 2c 20 6f 72 20 30 20 69 66 0a  plus 1, or 0 if.
1aad0 20 20 59 20 69 73 20 6e 6f 77 68 65 72 65 20 66    Y is nowhere f
1aae0 6f 75 6e 64 20 77 69 74 68 69 6e 20 58 2e 0a 20  ound within X.. 
1aaf0 20 5e 4f 72 2c 20 69 66 20 58 20 61 6e 64 20 59   ^Or, if X and Y
1ab00 20 61 72 65 20 62 6f 74 68 20 42 4c 4f 42 73 2c   are both BLOBs,
1ab10 20 74 68 65 6e 20 69 6e 73 74 72 28 58 2c 59 29   then instr(X,Y)
1ab20 20 72 65 74 75 72 6e 73 20 6f 6e 65 0a 20 20 6d   returns one.  m
1ab30 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6e 75 6d  ore than the num
1ab40 62 65 72 20 62 79 74 65 73 20 70 72 69 6f 72 20  ber bytes prior 
1ab50 74 6f 20 74 68 65 20 66 69 72 73 74 20 6f 63 63  to the first occ
1ab60 75 72 72 65 6e 63 65 20 6f 66 20 59 2c 20 6f 72  urrence of Y, or
1ab70 20 30 20 69 66 0a 20 20 59 20 64 6f 65 73 20 6e   0 if.  Y does n
1ab80 6f 74 20 6f 63 63 75 72 20 61 6e 79 77 68 65 72  ot occur anywher
1ab90 65 20 77 69 74 68 69 6e 20 58 2e 0a 20 20 5e 49  e within X..  ^I
1aba0 66 20 62 6f 74 68 20 61 72 67 75 6d 65 6e 74 73  f both arguments
1abb0 20 58 20 61 6e 64 20 59 20 74 6f 20 69 6e 73 74   X and Y to inst
1abc0 72 28 58 2c 59 29 20 61 72 65 20 6e 6f 6e 2d 4e  r(X,Y) are non-N
1abd0 55 4c 4c 20 61 6e 64 20 61 72 65 20 6e 6f 74 20  ULL and are not 
1abe0 42 4c 4f 42 73 0a 20 20 74 68 65 6e 20 62 6f 74  BLOBs.  then bot
1abf0 68 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65  h are interprete
1ac00 64 20 61 73 20 73 74 72 69 6e 67 73 2e 0a 20 20  d as strings..  
1ac10 5e 49 66 20 65 69 74 68 65 72 20 58 20 6f 72 20  ^If either X or 
1ac20 59 20 61 72 65 20 4e 55 4c 4c 20 69 6e 20 69 6e  Y are NULL in in
1ac30 73 74 72 28 58 2c 59 29 20 74 68 65 6e 20 74 68  str(X,Y) then th
1ac40 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
1ac50 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 68 65  ..}..funcdef {he
1ac60 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  x(X)} {} {.  ^Th
1ac70 65 20 68 65 78 28 29 20 66 75 6e 63 74 69 6f 6e  e hex() function
1ac80 20 69 6e 74 65 72 70 72 65 74 73 20 69 74 73 20   interprets its 
1ac90 61 72 67 75 6d 65 6e 74 20 61 73 20 61 20 42 4c  argument as a BL
1aca0 4f 42 20 61 6e 64 20 72 65 74 75 72 6e 73 0a 20  OB and returns. 
1acb0 20 61 20 73 74 72 69 6e 67 20 77 68 69 63 68 20   a string which 
1acc0 69 73 20 74 68 65 20 75 70 70 65 72 2d 63 61 73  is the upper-cas
1acd0 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 72 65  e hexadecimal re
1ace0 6e 64 65 72 69 6e 67 20 6f 66 20 74 68 65 20 63  ndering of the c
1acf0 6f 6e 74 65 6e 74 20 6f 66 0a 20 20 74 68 61 74  ontent of.  that
1ad00 20 62 6c 6f 62 2e 0a 7d 0a 0a 66 75 6e 63 64 65   blob..}..funcde
1ad10 66 20 7b 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  f {last_insert_r
1ad20 6f 77 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e  owid()} {} {.  ^
1ad30 54 68 65 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f  The last_insert_
1ad40 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  rowid() function
1ad50 20 72 65 74 75 72 6e 73 20 74 68 65 20 5b 52 4f   returns the [RO
1ad60 57 49 44 5d 0a 20 20 6f 66 20 74 68 65 20 6c 61  WID].  of the la
1ad70 73 74 20 72 6f 77 20 69 6e 73 65 72 74 20 66 72  st row insert fr
1ad80 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
1ad90 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69 63 68  connection which
1ada0 20 69 6e 76 6f 6b 65 64 20 74 68 65 0a 20 20 66   invoked the.  f
1adb0 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 54 68 65 20  unction..  ^The 
1adc0 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
1add0 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  d() SQL function
1ade0 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
1adf0 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69  ound the.  [sqli
1ae00 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
1ae10 72 6f 77 69 64 28 29 5d 20 43 2f 43 2b 2b 20 69  rowid()] C/C++ i
1ae20 6e 74 65 72 66 61 63 65 20 66 75 6e 63 74 69 6f  nterface functio
1ae30 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c  n..}..funcdef {l
1ae40 65 6e 67 74 68 28 58 29 7d 20 7b 7d 20 7b 0a 20  ength(X)} {} {. 
1ae50 20 5e 46 6f 72 20 61 20 73 74 72 69 6e 67 20 76   ^For a string v
1ae60 61 6c 75 65 20 58 2c 20 74 68 65 20 6c 65 6e 67  alue X, the leng
1ae70 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  th(X) function r
1ae80 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
1ae90 72 20 6f 66 20 0a 20 20 63 68 61 72 61 63 74 65  r of .  characte
1aea0 72 73 20 28 6e 6f 74 20 62 79 74 65 73 29 20 69  rs (not bytes) i
1aeb0 6e 20 58 20 70 72 69 6f 72 20 74 6f 20 74 68 65  n X prior to the
1aec0 20 66 69 72 73 74 20 4e 55 4c 20 63 68 61 72 61   first NUL chara
1aed0 63 74 65 72 2e 0a 20 20 53 69 6e 63 65 20 53 51  cter..  Since SQ
1aee0 4c 69 74 65 20 73 74 72 69 6e 67 73 20 64 6f 20  Lite strings do 
1aef0 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e  not normally con
1af00 74 61 69 6e 20 4e 55 4c 20 63 68 61 72 61 63 74  tain NUL charact
1af10 65 72 73 2c 20 74 68 65 20 6c 65 6e 67 74 68 28  ers, the length(
1af20 58 29 0a 20 20 66 75 6e 63 74 69 6f 6e 20 77 69  X).  function wi
1af30 6c 6c 20 75 73 75 61 6c 6c 79 20 72 65 74 75 72  ll usually retur
1af40 6e 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  n the total numb
1af50 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
1af60 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67 20 58   in the string X
1af70 2e 0a 20 20 5e 46 6f 72 20 61 20 62 6c 6f 62 20  ..  ^For a blob 
1af80 76 61 6c 75 65 20 58 2c 20 6c 65 6e 67 74 68 28  value X, length(
1af90 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  X) returns the n
1afa0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
1afb0 6e 20 74 68 65 20 62 6c 6f 62 2e 0a 20 20 5e 49  n the blob..  ^I
1afc0 66 20 58 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  f X is NULL then
1afd0 20 6c 65 6e 67 74 68 28 58 29 20 69 73 20 4e 55   length(X) is NU
1afe0 4c 4c 2e 0a 20 20 5e 49 66 20 58 20 69 73 20 6e  LL..  ^If X is n
1aff0 75 6d 65 72 69 63 20 74 68 65 6e 20 6c 65 6e 67  umeric then leng
1b000 74 68 28 58 29 20 72 65 74 75 72 6e 73 20 74 68  th(X) returns th
1b010 65 20 6c 65 6e 67 74 68 20 6f 66 20 61 20 73 74  e length of a st
1b020 72 69 6e 67 0a 20 20 72 65 70 72 65 73 65 6e 74  ring.  represent
1b030 61 74 69 6f 6e 20 6f 66 20 58 2e 0a 7d 0a 0a 66  ation of X..}..f
1b040 75 6e 63 64 65 66 20 7b 6c 69 6b 65 28 58 2c 59  uncdef {like(X,Y
1b050 29 20 6c 69 6b 65 28 58 2c 59 2c 5a 29 7d 20 7b  ) like(X,Y,Z)} {
1b060 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65 28  } {.  ^The like(
1b070 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  ) function is us
1b080 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
1b090 74 68 65 0a 20 20 22 3c 62 3e 59 20 4c 49 4b 45  the.  "<b>Y LIKE
1b0a0 20 58 20 26 23 39 31 3b 45 53 43 41 50 45 20 5a   X &#91;ESCAPE Z
1b0b0 26 23 39 33 3b 3c 2f 62 3e 22 20 65 78 70 72 65  &#93;</b>" expre
1b0c0 73 73 69 6f 6e 2e 20 0a 20 20 5e 49 66 20 74 68  ssion. .  ^If th
1b0d0 65 20 6f 70 74 69 6f 6e 61 6c 20 45 53 43 41 50  e optional ESCAP
1b0e0 45 20 63 6c 61 75 73 65 20 69 73 20 70 72 65 73  E clause is pres
1b0f0 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ent, then the.  
1b100 6c 69 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  like() function 
1b110 69 73 20 69 6e 76 6f 6b 65 64 20 77 69 74 68 20  is invoked with 
1b120 74 68 72 65 65 20 61 72 67 75 6d 65 6e 74 73 2e  three arguments.
1b130 20 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 74    ^Otherwise, it
1b140 20 69 73 0a 20 20 69 6e 76 6f 6b 65 64 20 77 69   is.  invoked wi
1b150 74 68 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  th two arguments
1b160 20 6f 6e 6c 79 2e 20 4e 6f 74 65 20 74 68 61 74   only. Note that
1b170 20 74 68 65 20 58 20 61 6e 64 20 59 20 70 61 72   the X and Y par
1b180 61 6d 65 74 65 72 73 20 61 72 65 0a 20 20 72 65  ameters are.  re
1b190 76 65 72 73 65 64 20 69 6e 20 74 68 65 20 6c 69  versed in the li
1b1a0 6b 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  ke() function re
1b1b0 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 69 6e  lative to the in
1b1c0 66 69 78 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61  fix [LIKE] opera
1b1d0 74 6f 72 2e 0a 20 20 58 20 69 73 20 74 68 65 20  tor..  X is the 
1b1e0 70 61 74 74 65 72 6e 20 61 6e 64 20 59 20 69 73  pattern and Y is
1b1f0 20 74 68 65 20 73 74 72 69 6e 67 20 74 6f 20 6d   the string to m
1b200 61 74 63 68 20 61 67 61 69 6e 73 74 20 74 68 61  atch against tha
1b210 74 20 70 61 74 74 65 72 6e 2e 0a 20 20 48 65 6e  t pattern..  Hen
1b220 63 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ce, the followin
1b230 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  g expressions ar
1b240 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 20 20  e equivalent:.  
1b250 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
1b260 3e 0a 20 20 20 20 20 6e 61 6d 65 20 4c 49 4b 45  >.     name LIKE
1b270 20 27 25 6e 65 6f 6e 25 27 0a 20 20 20 20 20 6c   '%neon%'.     l
1b280 69 6b 65 28 27 25 6e 65 6f 6e 25 27 2c 6e 61 6d  ike('%neon%',nam
1b290 65 29 0a 20 20 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  e).  </pre></blo
1b2a0 63 6b 71 75 6f 74 65 3e 0a 20 20 5e 54 68 65 20  ckquote>.  ^The 
1b2b0 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  [sqlite3_create_
1b2c0 66 75 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65  function()] inte
1b2d0 72 66 61 63 65 20 63 61 6e 20 62 65 20 75 73 65  rface can be use
1b2e0 64 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74 68  d to override th
1b2f0 65 0a 20 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  e.  like() funct
1b300 69 6f 6e 20 61 6e 64 20 74 68 65 72 65 62 79 20  ion and thereby 
1b310 63 68 61 6e 67 65 20 74 68 65 20 6f 70 65 72 61  change the opera
1b320 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 5b 4c  tion of the.  [L
1b330 49 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 20 20  IKE] operator.  
1b340 57 68 65 6e 20 6f 76 65 72 72 69 64 69 6e 67 20  When overriding 
1b350 74 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  the like() funct
1b360 69 6f 6e 2c 20 69 74 20 6d 61 79 20 62 65 20 69  ion, it may be i
1b370 6d 70 6f 72 74 61 6e 74 0a 20 20 74 6f 20 6f 76  mportant.  to ov
1b380 65 72 72 69 64 65 20 62 6f 74 68 20 74 68 65 20  erride both the 
1b390 74 77 6f 20 61 6e 64 20 74 68 72 65 65 20 61 72  two and three ar
1b3a0 67 75 6d 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  gument versions 
1b3b0 6f 66 20 74 68 65 20 6c 69 6b 65 28 29 20 0a 20  of the like() . 
1b3c0 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 74 68 65 72   function. Other
1b3d0 77 69 73 65 2c 20 64 69 66 66 65 72 65 6e 74 20  wise, different 
1b3e0 63 6f 64 65 20 6d 61 79 20 62 65 20 63 61 6c 6c  code may be call
1b3f0 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
1b400 74 68 65 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65  the.  [LIKE] ope
1b410 72 61 74 6f 72 20 64 65 70 65 6e 64 69 6e 67 20  rator depending 
1b420 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
1b430 74 20 61 6e 20 45 53 43 41 50 45 20 63 6c 61 75  t an ESCAPE clau
1b440 73 65 20 77 61 73 20 0a 20 20 73 70 65 63 69 66  se was .  specif
1b450 69 65 64 2e 0a 7d 0a 0a 0a 66 75 6e 63 64 65 66  ied..}...funcdef
1b460 20 7b 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59   {likelihood(X,Y
1b470 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c  )} {} {.  ^The l
1b480 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66  ikelihood(X,Y) f
1b490 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1b4a0 61 72 67 75 6d 65 6e 74 20 58 20 75 6e 63 68 61  argument X uncha
1b4b0 6e 67 65 64 2e 0a 20 20 5e 28 54 68 65 20 76 61  nged..  ^(The va
1b4c0 6c 75 65 20 59 20 69 6e 20 6c 69 6b 65 6c 69 68  lue Y in likelih
1b4d0 6f 6f 64 28 58 2c 59 29 20 6d 75 73 74 20 62 65  ood(X,Y) must be
1b4e0 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e   a floating poin
1b4f0 74 20 63 6f 6e 73 74 61 6e 74 0a 20 20 62 65 74  t constant.  bet
1b500 77 65 65 6e 20 30 2e 30 20 61 6e 64 20 31 2e 30  ween 0.0 and 1.0
1b510 2c 20 69 6e 63 6c 75 73 69 76 65 2e 29 5e 0a 20  , inclusive.)^. 
1b520 20 5e 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64   ^The likelihood
1b530 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
1b540 61 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65  a no-op that the
1b550 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a   code generator.
1b560 20 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79    optimizes away
1b570 20 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73   so that it cons
1b580 75 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c  umes no CPU cycl
1b590 65 73 20 64 75 72 69 6e 67 20 72 75 6e 2d 74 69  es during run-ti
1b5a0 6d 65 0a 20 20 28 74 68 61 74 20 69 73 2c 20 64  me.  (that is, d
1b5b0 75 72 69 6e 67 20 63 61 6c 6c 73 20 74 6f 20 5b  uring calls to [
1b5c0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 5d 29  sqlite3_step()])
1b5d0 2e 0a 20 20 5e 54 68 65 20 70 75 72 70 6f 73 65  ..  ^The purpose
1b5e0 20 6f 66 20 74 68 65 20 6c 69 6b 65 6c 69 68 6f   of the likeliho
1b5f0 6f 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  od(X,Y) function
1b600 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61   is to provide a
1b610 20 68 69 6e 74 0a 20 20 74 6f 20 74 68 65 20 71   hint.  to the q
1b620 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 68 61  uery planner tha
1b630 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58  t the argument X
1b640 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 74 68   is a boolean th
1b650 61 74 20 69 73 0a 20 20 74 72 75 65 20 77 69 74  at is.  true wit
1b660 68 20 61 20 70 72 6f 62 61 62 69 6c 69 74 79 20  h a probability 
1b670 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79  of approximately
1b680 20 59 2e 0a 20 20 5e 28 54 68 65 20 5b 75 6e 6c   Y..  ^(The [unl
1b690 69 6b 65 6c 79 28 58 29 5d 20 66 75 6e 63 74 69  ikely(X)] functi
1b6a0 6f 6e 20 69 73 20 73 68 6f 72 74 2d 68 61 6e 64  on is short-hand
1b6b0 20 66 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28   for likelihood(
1b6c0 58 2c 30 2e 30 36 32 35 29 2e 29 5e 0a 20 20 5e  X,0.0625).)^.  ^
1b6d0 28 54 68 65 20 5b 6c 69 6b 65 6c 79 28 58 29 5d  (The [likely(X)]
1b6e0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f   function is sho
1b6f0 72 74 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65  rt-hand for like
1b700 6c 69 68 6f 6f 64 28 58 2c 30 2e 39 33 37 35 29  lihood(X,0.9375)
1b710 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  .)^.}..funcdef {
1b720 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a  likely(X)} {} {.
1b730 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79 28 58 29    ^The likely(X)
1b740 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1b750 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58  s the argument X
1b760 20 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 54   unchanged..  ^T
1b770 68 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e  he likely(X) fun
1b780 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ction is a no-op
1b790 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
1b7a0 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69 6d  enerator.  optim
1b7b0 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68 61  izes away so tha
1b7c0 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e 6f  t it consumes no
1b7d0 20 43 50 55 20 63 79 63 6c 65 73 20 61 74 0a 20   CPU cycles at. 
1b7e0 20 72 75 6e 2d 74 69 6d 65 20 28 74 68 61 74 20   run-time (that 
1b7f0 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c 73  is, during calls
1b800 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74 65   to [sqlite3_ste
1b810 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70 75  p()])..  ^The pu
1b820 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c 69 6b  rpose of the lik
1b830 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  ely(X) function 
1b840 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20  is to provide a 
1b850 68 69 6e 74 0a 20 20 74 6f 20 74 68 65 20 71 75  hint.  to the qu
1b860 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 68 61 74  ery planner that
1b870 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20   the argument X 
1b880 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  is a boolean val
1b890 75 65 0a 20 20 74 68 61 74 20 69 73 20 75 73 75  ue.  that is usu
1b8a0 61 6c 6c 79 20 74 72 75 65 2e 20 5e 28 54 68 65  ally true. ^(The
1b8b0 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74   likely(X) funct
1b8c0 69 6f 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e  ion is equivalen
1b8d0 74 0a 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f  t.  to [likeliho
1b8e0 6f 64 5d 28 58 2c 30 2e 39 33 37 35 29 2e 29 5e  od](X,0.9375).)^
1b8f0 20 53 65 65 20 61 6c 73 6f 3a 20 5b 75 6e 6c 69   See also: [unli
1b900 6b 65 6c 79 28 58 29 5d 2e 0a 7d 0a 0a 66 75 6e  kely(X)]..}..fun
1b910 63 64 65 66 20 7b 6c 6f 61 64 5f 65 78 74 65 6e  cdef {load_exten
1b920 73 69 6f 6e 28 58 29 20 6c 6f 61 64 5f 65 78 74  sion(X) load_ext
1b930 65 6e 73 69 6f 6e 28 58 2c 59 29 7d 20 7b 7d 20  ension(X,Y)} {} 
1b940 7b 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f 65 78  {.  ^The load_ex
1b950 74 65 6e 73 69 6f 6e 28 58 2c 59 29 20 66 75 6e  tension(X,Y) fun
1b960 63 74 69 6f 6e 20 6c 6f 61 64 73 20 5b 53 51 4c  ction loads [SQL
1b970 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 73 5d 20  ite extensions] 
1b980 6f 75 74 20 6f 66 20 74 68 65 20 73 68 61 72 65  out of the share
1b990 64 0a 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65  d.  library file
1b9a0 20 6e 61 6d 65 64 20 58 20 75 73 69 6e 67 20 74   named X using t
1b9b0 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 59  he entry point Y
1b9c0 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74 20 6f  .  ^The result o
1b9d0 66 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  f load_extension
1b9e0 28 29 0a 20 20 69 73 20 61 6c 77 61 79 73 20 61  ().  is always a
1b9f0 20 4e 55 4c 4c 2e 20 20 5e 49 66 20 59 20 69 73   NULL.  ^If Y is
1ba00 20 6f 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68   omitted then th
1ba10 65 20 64 65 66 61 75 6c 74 20 65 6e 74 72 79 20  e default entry 
1ba20 70 6f 69 6e 74 20 6e 61 6d 65 20 69 73 20 75 73  point name is us
1ba30 65 64 2e 0a 20 20 5e 54 68 65 20 6c 6f 61 64 5f  ed..  ^The load_
1ba40 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e 63  extension() func
1ba50 74 69 6f 6e 20 72 61 69 73 65 73 20 61 6e 20 65  tion raises an e
1ba60 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20  xception if the 
1ba70 65 78 74 65 6e 73 69 6f 6e 20 66 61 69 6c 73 20  extension fails 
1ba80 74 6f 0a 20 20 6c 6f 61 64 20 6f 72 20 69 6e 69  to.  load or ini
1ba90 74 69 61 6c 69 7a 65 20 63 6f 72 72 65 63 74 6c  tialize correctl
1baa0 79 2e 0a 0a 20 20 3c 70 3e 5e 54 68 65 20 6c 6f  y...  <p>^The lo
1bab0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66  ad_extension() f
1bac0 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 66 61 69  unction will fai
1bad0 6c 20 69 66 20 74 68 65 20 65 78 74 65 6e 73 69  l if the extensi
1bae0 6f 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20 0a  on attempts to .
1baf0 20 20 6d 6f 64 69 66 79 20 6f 72 20 64 65 6c 65    modify or dele
1bb00 74 65 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  te an SQL functi
1bb10 6f 6e 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  on or collating 
1bb20 73 65 71 75 65 6e 63 65 2e 20 20 5e 54 68 65 0a  sequence.  ^The.
1bb30 20 20 65 78 74 65 6e 73 69 6f 6e 20 63 61 6e 20    extension can 
1bb40 61 64 64 20 6e 65 77 20 66 75 6e 63 74 69 6f 6e  add new function
1bb50 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73  s or collating s
1bb60 65 71 75 65 6e 63 65 73 2c 20 62 75 74 20 63 61  equences, but ca
1bb70 6e 6e 6f 74 0a 20 20 6d 6f 64 69 66 79 20 6f 72  nnot.  modify or
1bb80 20 64 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   delete existing
1bb90 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f   functions or co
1bba0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1bbb0 73 20 62 65 63 61 75 73 65 0a 20 20 74 68 6f 73  s because.  thos
1bbc0 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 2f  e functions and/
1bbd0 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
1bbe0 75 65 6e 63 65 73 20 6d 69 67 68 74 20 62 65 20  uences might be 
1bbf0 75 73 65 64 20 65 6c 73 65 77 68 65 72 65 0a 20  used elsewhere. 
1bc00 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 6c   in the currentl
1bc10 79 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74  y running SQL st
1bc20 61 74 65 6d 65 6e 74 2e 20 20 54 6f 20 6c 6f 61  atement.  To loa
1bc30 64 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 74  d an extension t
1bc40 68 61 74 0a 20 20 63 68 61 6e 67 65 73 20 6f 72  hat.  changes or
1bc50 20 64 65 6c 65 74 65 73 20 66 75 6e 63 74 69 6f   deletes functio
1bc60 6e 73 20 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20  ns or collating 
1bc70 73 65 71 75 65 6e 63 65 73 2c 20 75 73 65 20 74  sequences, use t
1bc80 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 6f  he.  [sqlite3_lo
1bc90 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 5d 20  ad_extension()] 
1bca0 43 2d 6c 61 6e 67 75 61 67 65 20 41 50 49 2e 3c  C-language API.<
1bcb0 2f 70 3e 0a 0a 20 20 3c 70 3e 46 6f 72 20 73 65  /p>..  <p>For se
1bcc0 63 75 72 69 74 79 20 72 65 61 73 6f 6e 73 2c 20  curity reasons, 
1bcd0 65 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 65 64  extension loaded
1bce0 20 69 73 20 74 75 72 6e 65 64 20 6f 66 66 20 62   is turned off b
1bcf0 79 20 64 65 66 61 75 6c 74 20 61 6e 64 20 6d 75  y default and mu
1bd00 73 74 0a 20 20 62 65 20 65 6e 61 62 6c 65 64 20  st.  be enabled 
1bd10 62 79 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20  by a prior call 
1bd20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 65 6e 61 62  to [sqlite3_enab
1bd30 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le_load_extensio
1bd40 6e 28 29 5d 2e 3c 2f 70 3e 0a 7d 0a 0a 66 75 6e  n()].</p>.}..fun
1bd50 63 64 65 66 20 7b 6c 6f 77 65 72 28 58 29 7d 20  cdef {lower(X)} 
1bd60 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f 77 65  {} {.  ^The lowe
1bd70 72 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  r(X) function re
1bd80 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
1bd90 73 74 72 69 6e 67 20 58 20 77 69 74 68 20 61 6c  string X with al
1bda0 6c 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  l ASCII characte
1bdb0 72 73 0a 20 20 63 6f 6e 76 65 72 74 65 64 20 74  rs.  converted t
1bdc0 6f 20 6c 6f 77 65 72 20 63 61 73 65 2e 20 20 5e  o lower case.  ^
1bdd0 54 68 65 20 64 65 66 61 75 6c 74 20 62 75 69 6c  The default buil
1bde0 74 2d 69 6e 20 6c 6f 77 65 72 28 29 20 66 75 6e  t-in lower() fun
1bdf0 63 74 69 6f 6e 20 77 6f 72 6b 73 0a 20 20 66 6f  ction works.  fo
1be00 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
1be10 72 73 20 6f 6e 6c 79 2e 20 20 54 6f 20 64 6f 20  rs only.  To do 
1be20 63 61 73 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73  case conversions
1be30 20 6f 6e 20 6e 6f 6e 2d 41 53 43 49 49 0a 20 20   on non-ASCII.  
1be40 63 68 61 72 61 63 74 65 72 73 2c 20 6c 6f 61 64  characters, load
1be50 20 74 68 65 20 49 43 55 20 65 78 74 65 6e 73 69   the ICU extensi
1be60 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  on..}..funcdef {
1be70 6c 74 72 69 6d 28 58 29 20 6c 74 72 69 6d 28 58  ltrim(X) ltrim(X
1be80 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1be90 20 6c 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63   ltrim(X,Y) func
1bea0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1beb0 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
1bec0 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64  removing any and
1bed0 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72   all.  character
1bee0 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
1bef0 20 59 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74   Y from the left
1bf00 20 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49   side of X..  ^I
1bf10 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74  f the Y argument
1bf20 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 6c 74 72   is omitted, ltr
1bf30 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70  im(X) removes sp
1bf40 61 63 65 73 20 66 72 6f 6d 20 74 68 65 20 6c 65  aces from the le
1bf50 66 74 20 73 69 64 65 0a 20 20 6f 66 20 58 2e 0a  ft side.  of X..
1bf60 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28  }..funcdef {max(
1bf70 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 61 78 43  X,Y,...)} {*maxC
1bf80 6f 72 65 46 75 6e 63 20 2a 6d 61 78 20 7b 6d 61  oreFunc *max {ma
1bf90 78 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  x() SQL function
1bfa0 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74  }} {.  ^The mult
1bfb0 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29  i-argument max()
1bfc0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1bfd0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77  s the argument w
1bfe0 69 74 68 20 74 68 65 20 0a 20 20 6d 61 78 69 6d  ith the .  maxim
1bff0 75 6d 20 76 61 6c 75 65 2c 20 6f 72 20 72 65 74  um value, or ret
1c000 75 72 6e 20 4e 55 4c 4c 20 69 66 20 61 6e 79 20  urn NULL if any 
1c010 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55 4c 4c  argument is NULL
1c020 2e 20 0a 20 20 5e 54 68 65 20 6d 75 6c 74 69 2d  . .  ^The multi-
1c030 61 72 67 75 6d 65 6e 74 20 6d 61 78 28 29 20 66  argument max() f
1c040 75 6e 63 74 69 6f 6e 20 73 65 61 72 63 68 65 73  unction searches
1c050 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 66   its arguments f
1c060 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
1c070 74 0a 20 20 66 6f 72 20 61 6e 20 61 72 67 75 6d  t.  for an argum
1c080 65 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73  ent that defines
1c090 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e   a collating fun
1c0a0 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20 74  ction and uses t
1c0b0 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 0a 20 20  hat collating.  
1c0c0 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c  function for all
1c0d0 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 69 73   string comparis
1c0e0 6f 6e 73 2e 20 20 5e 49 66 20 6e 6f 6e 65 20 6f  ons.  ^If none o
1c0f0 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20  f the arguments 
1c100 74 6f 20 6d 61 78 28 29 0a 20 20 64 65 66 69 6e  to max().  defin
1c110 65 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  e a collating fu
1c120 6e 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  nction, then the
1c130 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6e   BINARY collatin
1c140 67 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  g function is us
1c150 65 64 2e 0a 20 20 5e 28 4e 6f 74 65 20 74 68 61  ed..  ^(Note tha
1c160 74 20 3c 62 3e 6d 61 78 28 29 3c 2f 62 3e 20 69  t <b>max()</b> i
1c170 73 20 61 20 73 69 6d 70 6c 65 20 66 75 6e 63 74  s a simple funct
1c180 69 6f 6e 20 77 68 65 6e 0a 20 20 69 74 20 68 61  ion when.  it ha
1c190 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 67 75  s 2 or more argu
1c1a0 6d 65 6e 74 73 20 62 75 74 20 6f 70 65 72 61 74  ments but operat
1c1b0 65 73 20 61 73 20 61 6e 0a 20 20 5b 6d 61 78 41  es as an.  [maxA
1c1c0 67 67 46 75 6e 63 20 7c 20 61 67 67 72 65 67 61  ggFunc | aggrega
1c1d0 74 65 20 66 75 6e 63 74 69 6f 6e 5d 20 69 66 20  te function] if 
1c1e0 67 69 76 65 6e 20 6f 6e 6c 79 20 61 20 73 69 6e  given only a sin
1c1f0 67 6c 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a  gle argument.)^.
1c200 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28  }..funcdef {min(
1c210 58 2c 59 2c 2e 2e 2e 29 7d 20 7b 2a 6d 69 6e 43  X,Y,...)} {*minC
1c220 6f 72 65 46 75 6e 63 20 2a 6d 69 6e 20 7b 6d 69  oreFunc *min {mi
1c230 6e 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  n() SQL function
1c240 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 75 6c 74  }} {.  ^The mult
1c250 69 2d 61 72 67 75 6d 65 6e 74 20 6d 69 6e 28 29  i-argument min()
1c260 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1c270 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 77  s the argument w
1c280 69 74 68 20 74 68 65 0a 20 20 6d 69 6e 69 6d 75  ith the.  minimu
1c290 6d 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20  m value..  ^The 
1c2a0 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d  multi-argument m
1c2b0 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65  in() function se
1c2c0 61 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d  arches its argum
1c2d0 65 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74  ents from left t
1c2e0 6f 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e  o right.  for an
1c2f0 20 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64   argument that d
1c300 65 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69  efines a collati
1c310 6e 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20  ng function and 
1c320 75 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74  uses that collat
1c330 69 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66  ing.  function f
1c340 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f  or all string co
1c350 6d 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20  mparisons.  ^If 
1c360 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75  none of the argu
1c370 6d 65 6e 74 73 20 74 6f 20 6d 69 6e 28 29 0a 20  ments to min(). 
1c380 20 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74   define a collat
1c390 69 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68  ing function, th
1c3a0 65 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f  en the BINARY co
1c3b0 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
1c3c0 20 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e 6f   is used..  ^(No
1c3d0 74 65 20 74 68 61 74 20 3c 62 3e 6d 69 6e 28 29  te that <b>min()
1c3e0 3c 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65  </b> is a simple
1c3f0 20 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20   function when. 
1c400 20 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72   it has 2 or mor
1c410 65 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20  e arguments but 
1c420 6f 70 65 72 61 74 65 73 20 61 73 20 61 6e 20 0a  operates as an .
1c430 20 20 5b 6d 69 6e 41 67 67 46 75 6e 63 20 7c 20    [minAggFunc | 
1c440 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1c450 6f 6e 5d 20 69 66 20 67 69 76 65 6e 0a 20 20 6f  on] if given.  o
1c460 6e 6c 79 20 61 20 73 69 6e 67 6c 65 20 61 72 67  nly a single arg
1c470 75 6d 65 6e 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  ument.)^.}..func
1c480 64 65 66 20 7b 6e 75 6c 6c 69 66 28 58 2c 59 29  def {nullif(X,Y)
1c490 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6e 75  } {} {.  ^The nu
1c4a0 6c 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69  llif(X,Y) functi
1c4b0 6f 6e 20 72 65 74 75 72 6e 73 20 69 74 73 20 66  on returns its f
1c4c0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69 66  irst argument if
1c4d0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61   the arguments a
1c4e0 72 65 0a 20 20 64 69 66 66 65 72 65 6e 74 20 61  re.  different a
1c4f0 6e 64 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 61  nd NULL if the a
1c500 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 68 65  rguments are the
1c510 20 73 61 6d 65 2e 20 20 5e 54 68 65 20 6e 75 6c   same.  ^The nul
1c520 6c 69 66 28 58 2c 59 29 20 66 75 6e 63 74 69 6f  lif(X,Y) functio
1c530 6e 0a 20 20 73 65 61 72 63 68 65 73 20 69 74 73  n.  searches its
1c540 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
1c550 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 66 6f  left to right fo
1c560 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74 68  r an argument th
1c570 61 74 20 64 65 66 69 6e 65 73 20 61 0a 20 20 63  at defines a.  c
1c580 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1c590 6e 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20  n and uses that 
1c5a0 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
1c5b0 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e  on for all strin
1c5c0 67 0a 20 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e  g.  comparisons.
1c5d0 20 20 5e 49 66 20 6e 65 69 74 68 65 72 20 61 72    ^If neither ar
1c5e0 67 75 6d 65 6e 74 20 74 6f 20 6e 75 6c 6c 69 66  gument to nullif
1c5f0 28 29 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6c  () defines a col
1c600 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 0a  lating function.
1c610 20 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41 52    then the BINAR
1c620 59 20 69 73 20 75 73 65 64 2e 0a 7d 0a 0a 66 75  Y is used..}..fu
1c630 6e 63 64 65 66 20 7b 70 72 69 6e 74 66 28 46 4f  ncdef {printf(FO
1c640 52 4d 41 54 2c 2e 2e 2e 29 7d 20 7b 7d 20 7b 0a  RMAT,...)} {} {.
1c650 20 20 5e 28 54 68 65 20 70 72 69 6e 74 66 28 46    ^(The printf(F
1c660 4f 52 4d 41 54 2c 2e 2e 2e 29 20 53 51 4c 20 66  ORMAT,...) SQL f
1c670 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6c 69  unction works li
1c680 6b 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ke the [sqlite3_
1c690 6d 70 72 69 6e 74 66 28 29 5d 20 43 2d 6c 61 6e  mprintf()] C-lan
1c6a0 67 75 61 67 65 0a 20 20 66 75 6e 63 74 69 6f 6e  guage.  function
1c6b0 20 61 6e 64 20 74 68 65 20 70 72 69 6e 74 66 28   and the printf(
1c6c0 29 20 66 75 6e 63 74 69 6f 6e 20 66 72 6f 6d 20  ) function from 
1c6d0 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
1c6e0 69 62 72 61 72 79 2e 29 5e 0a 20 20 54 68 65 20  ibrary.)^.  The 
1c6f0 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
1c700 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  s a format strin
1c710 67 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73  g that specifies
1c720 20 68 6f 77 20 74 6f 20 63 6f 6e 73 74 72 75 63   how to construc
1c730 74 20 74 68 65 20 6f 75 74 70 75 74 0a 20 20 73  t the output.  s
1c740 74 72 69 6e 67 20 75 73 69 6e 67 20 76 61 6c 75  tring using valu
1c750 65 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 73 75  es taken from su
1c760 62 73 65 71 75 65 6e 74 20 61 72 67 75 6d 65 6e  bsequent argumen
1c770 74 73 2e 20 20 5e 49 66 20 74 68 65 20 46 4f 52  ts.  ^If the FOR
1c780 4d 41 54 20 61 72 67 75 6d 65 6e 74 20 69 73 0a  MAT argument is.
1c790 20 20 6d 69 73 73 69 6e 67 20 6f 72 20 4e 55 4c    missing or NUL
1c7a0 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
1c7b0 74 20 69 73 20 4e 55 4c 4c 2e 20 20 5e 54 68 65  t is NULL.  ^The
1c7c0 20 25 6e 20 66 6f 72 6d 61 74 20 69 73 20 73 69   %n format is si
1c7d0 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 20 61  lently ignored a
1c7e0 6e 64 0a 20 20 64 6f 65 73 20 6e 6f 74 20 63 6f  nd.  does not co
1c7f0 6e 73 75 6d 65 20 61 6e 20 61 72 67 75 6d 65 6e  nsume an argumen
1c800 74 2e 20 20 5e 54 68 65 20 25 70 20 66 6f 72 6d  t.  ^The %p form
1c810 61 74 20 69 73 20 61 6e 20 61 6c 69 61 73 20 66  at is an alias f
1c820 6f 72 20 25 58 2e 20 20 5e 54 68 65 20 25 7a 20  or %X.  ^The %z 
1c830 66 6f 72 6d 61 74 0a 20 20 69 73 20 69 6e 74 65  format.  is inte
1c840 72 63 68 61 6e 67 65 61 62 6c 65 20 77 69 74 68  rchangeable with
1c850 20 25 73 2e 20 20 5e 28 49 66 20 74 68 65 72 65   %s.  ^(If there
1c860 20 61 72 65 20 74 6f 6f 20 66 65 77 20 61 72 67   are too few arg
1c870 75 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72  uments in the ar
1c880 67 75 6d 65 6e 74 20 6c 69 73 74 2c 0a 20 20 6d  gument list,.  m
1c890 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  issing arguments
1c8a0 20 61 72 65 20 61 73 73 75 6d 65 64 20 74 6f 20   are assumed to 
1c8b0 68 61 76 65 20 61 20 4e 55 4c 4c 20 76 61 6c 75  have a NULL valu
1c8c0 65 2c 20 77 68 69 63 68 20 69 73 20 74 72 61 6e  e, which is tran
1c8d0 73 6c 61 74 65 64 20 69 6e 74 6f 0a 20 20 30 20  slated into.  0 
1c8e0 6f 72 20 30 2e 30 20 66 6f 72 20 6e 75 6d 65 72  or 0.0 for numer
1c8f0 69 63 20 66 6f 72 6d 61 74 73 20 6f 72 20 61 6e  ic formats or an
1c900 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 66 6f   empty string fo
1c910 72 20 25 73 2e 29 5e 20 20 53 65 65 20 74 68 65  r %s.)^  See the
1c920 0a 20 20 5b 62 75 69 6c 74 2d 69 6e 20 70 72 69  .  [built-in pri
1c930 6e 74 66 28 29 5d 20 64 6f 63 75 6d 65 6e 74 61  ntf()] documenta
1c940 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
1c950 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
1c960 0a 7d 0a 20 20 0a 0a 66 75 6e 63 64 65 66 20 7b  .}.  ..funcdef {
1c970 71 75 6f 74 65 28 58 29 7d 20 7b 7d 20 7b 0a 20  quote(X)} {} {. 
1c980 20 5e 54 68 65 20 71 75 6f 74 65 28 58 29 20 66   ^The quote(X) f
1c990 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1c9a0 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 53  the text of an S
1c9b0 51 4c 20 6c 69 74 65 72 61 6c 20 77 68 69 63 68  QL literal which
1c9c0 0a 20 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  .  is the value 
1c9d0 6f 66 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20  of its argument 
1c9e0 73 75 69 74 61 62 6c 65 20 66 6f 72 20 69 6e 63  suitable for inc
1c9f0 6c 75 73 69 6f 6e 20 69 6e 74 6f 20 61 6e 20 53  lusion into an S
1ca00 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20  QL statement..  
1ca10 5e 53 74 72 69 6e 67 73 20 61 72 65 20 73 75 72  ^Strings are sur
1ca20 72 6f 75 6e 64 65 64 20 62 79 20 73 69 6e 67 6c  rounded by singl
1ca30 65 2d 71 75 6f 74 65 73 20 77 69 74 68 20 65 73  e-quotes with es
1ca40 63 61 70 65 73 20 6f 6e 20 69 6e 74 65 72 69 6f  capes on interio
1ca50 72 20 71 75 6f 74 65 73 0a 20 20 61 73 20 6e 65  r quotes.  as ne
1ca60 65 64 65 64 2e 20 20 5e 42 4c 4f 42 73 20 61 72  eded.  ^BLOBs ar
1ca70 65 20 65 6e 63 6f 64 65 64 20 61 73 20 68 65 78  e encoded as hex
1ca80 61 64 65 63 69 6d 61 6c 20 6c 69 74 65 72 61 6c  adecimal literal
1ca90 73 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 77 69  s..  ^Strings wi
1caa0 74 68 20 65 6d 62 65 64 64 65 64 20 4e 55 4c 20  th embedded NUL 
1cab0 63 68 61 72 61 63 74 65 72 73 20 63 61 6e 6e 6f  characters canno
1cac0 74 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64  t be represented
1cad0 20 61 73 20 73 74 72 69 6e 67 0a 20 20 6c 69 74   as string.  lit
1cae0 65 72 61 6c 73 20 69 6e 20 53 51 4c 20 61 6e 64  erals in SQL and
1caf0 20 68 65 6e 63 65 20 74 68 65 20 72 65 74 75 72   hence the retur
1cb00 6e 65 64 20 73 74 72 69 6e 67 20 6c 69 74 65 72  ned string liter
1cb10 61 6c 20 69 73 20 74 72 75 6e 63 61 74 65 64 20  al is truncated 
1cb20 70 72 69 6f 72 0a 20 20 74 6f 20 74 68 65 20 66  prior.  to the f
1cb30 69 72 73 74 20 4e 55 4c 2e 0a 7d 0a 0a 66 75 6e  irst NUL..}..fun
1cb40 63 64 65 66 20 7b 72 61 6e 64 6f 6d 28 29 7d 20  cdef {random()} 
1cb50 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61 6e 64  {} {.  ^The rand
1cb60 6f 6d 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  om() function re
1cb70 74 75 72 6e 73 20 61 20 70 73 65 75 64 6f 2d 72  turns a pseudo-r
1cb80 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 0a 20 20  andom integer.  
1cb90 62 65 74 77 65 65 6e 20 2d 39 32 32 33 33 37 32  between -9223372
1cba0 30 33 36 38 35 34 37 37 35 38 30 38 20 61 6e 64  036854775808 and
1cbb0 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34 37   +92233720368547
1cbc0 37 35 38 30 37 2e 0a 7d 0a 0a 66 75 6e 63 64 65  75807..}..funcde
1cbd0 66 20 7b 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29  f {randomblob(N)
1cbe0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 61  } {} {.  ^The ra
1cbf0 6e 64 6f 6d 62 6c 6f 62 28 4e 29 20 66 75 6e 63  ndomblob(N) func
1cc00 74 69 6f 6e 20 72 65 74 75 72 6e 20 61 6e 20 4e  tion return an N
1cc10 2d 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 74 61  -byte blob conta
1cc20 69 6e 69 6e 67 20 70 73 65 75 64 6f 2d 72 61 6e  ining pseudo-ran
1cc30 64 6f 6d 0a 20 20 62 79 74 65 73 2e 20 5e 49 66  dom.  bytes. ^If
1cc40 20 4e 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20   N is less than 
1cc50 31 20 74 68 65 6e 20 61 20 31 2d 62 79 74 65 20  1 then a 1-byte 
1cc60 72 61 6e 64 6f 6d 20 62 6c 6f 62 20 69 73 20 72  random blob is r
1cc70 65 74 75 72 6e 65 64 2e 0a 0a 20 20 3c 70 3e 48  eturned...  <p>H
1cc80 69 6e 74 3a 20 20 61 70 70 6c 69 63 61 74 69 6f  int:  applicatio
1cc90 6e 73 20 63 61 6e 20 67 65 6e 65 72 61 74 65 20  ns can generate 
1cca0 67 6c 6f 62 61 6c 6c 79 20 75 6e 69 71 75 65 20  globally unique 
1ccb0 69 64 65 6e 74 69 66 69 65 72 73 0a 20 20 75 73  identifiers.  us
1ccc0 69 6e 67 20 74 68 69 73 20 66 75 6e 63 74 69 6f  ing this functio
1ccd0 6e 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  n together with 
1cce0 5b 68 65 78 28 29 5d 20 61 6e 64 2f 6f 72 0a 20  [hex()] and/or. 
1ccf0 20 5b 6c 6f 77 65 72 28 29 5d 20 6c 69 6b 65 20   [lower()] like 
1cd00 74 68 69 73 3a 3c 2f 70 3e 0a 0a 20 20 3c 62 6c  this:</p>..  <bl
1cd10 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 68 65 78 28  ockquote>.  hex(
1cd20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 36 29 29 3c  randomblob(16))<
1cd30 62 72 3e 3c 2f 62 72 3e 0a 20 20 6c 6f 77 65 72  br></br>.  lower
1cd40 28 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28  (hex(randomblob(
1cd50 31 36 29 29 29 0a 20 20 3c 2f 62 6c 6f 63 6b 71  16))).  </blockq
1cd60 75 6f 74 65 3e 0a 7d 0a 0a 66 75 6e 63 64 65 66  uote>.}..funcdef
1cd70 20 7b 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a 29   {replace(X,Y,Z)
1cd80 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 65  } {} {.  ^The re
1cd90 70 6c 61 63 65 28 58 2c 59 2c 5a 29 20 66 75 6e  place(X,Y,Z) fun
1cda0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1cdb0 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79  string formed by
1cdc0 20 73 75 62 73 74 69 74 75 74 69 6e 67 0a 20 20   substituting.  
1cdd0 73 74 72 69 6e 67 20 5a 20 66 6f 72 20 65 76 65  string Z for eve
1cde0 72 79 20 6f 63 63 75 72 72 65 6e 63 65 20 6f 66  ry occurrence of
1cdf0 20 73 74 72 69 6e 67 20 59 20 69 6e 20 73 74 72   string Y in str
1ce00 69 6e 67 20 58 2e 20 20 5e 54 68 65 20 5b 42 49  ing X.  ^The [BI
1ce10 4e 41 52 59 5d 0a 20 20 63 6f 6c 6c 61 74 69 6e  NARY].  collatin
1ce20 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 73  g sequence is us
1ce30 65 64 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  ed for compariso
1ce40 6e 73 2e 20 20 5e 49 66 20 59 20 69 73 20 61 6e  ns.  ^If Y is an
1ce50 20 65 6d 70 74 79 0a 20 20 73 74 72 69 6e 67 20   empty.  string 
1ce60 74 68 65 6e 20 72 65 74 75 72 6e 20 58 20 75 6e  then return X un
1ce70 63 68 61 6e 67 65 64 2e 20 20 5e 49 66 20 5a 20  changed.  ^If Z 
1ce80 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
1ce90 0a 20 20 61 20 73 74 72 69 6e 67 2c 20 69 74 20  .  a string, it 
1cea0 69 73 20 63 61 73 74 20 74 6f 20 61 20 55 54 46  is cast to a UTF
1ceb0 2d 38 20 73 74 72 69 6e 67 20 70 72 69 6f 72 20  -8 string prior 
1cec0 74 6f 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 7d  to processing..}
1ced0 0a 0a 66 75 6e 63 64 65 66 20 7b 72 6f 75 6e 64  ..funcdef {round
1cee0 28 58 29 20 72 6f 75 6e 64 28 58 2c 59 29 7d 20  (X) round(X,Y)} 
1cef0 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72 6f 75 6e  {} {.  ^The roun
1cf00 64 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20  d(X,Y) function 
1cf10 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69  returns a floati
1cf20 6e 67 2d 70 6f 69 6e 74 0a 20 20 76 61 6c 75 65  ng-point.  value
1cf30 20 58 20 72 6f 75 6e 64 65 64 20 74 6f 20 59 20   X rounded to Y 
1cf40 64 69 67 69 74 73 20 74 6f 20 74 68 65 20 72 69  digits to the ri
1cf50 67 68 74 20 6f 66 20 74 68 65 20 64 65 63 69 6d  ght of the decim
1cf60 61 6c 20 70 6f 69 6e 74 2e 0a 20 20 5e 49 66 20  al point..  ^If 
1cf70 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69  the Y argument i
1cf80 73 20 6f 6d 69 74 74 65 64 2c 20 69 74 20 69 73  s omitted, it is
1cf90 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 30   assumed to be 0
1cfa0 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 72 74  ..}..funcdef {rt
1cfb0 72 69 6d 28 58 29 20 72 74 72 69 6d 28 58 2c 59  rim(X) rtrim(X,Y
1cfc0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 72  )} {} {.  ^The r
1cfd0 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63 74 69  trim(X,Y) functi
1cfe0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73 74 72  on returns a str
1cff0 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65  ing formed by re
1d000 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64 20 61  moving any and a
1d010 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72 73 20  ll.  characters 
1d020 74 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 59  that appear in Y
1d030 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 20   from the right 
1d040 73 69 64 65 20 6f 66 20 58 2e 0a 20 20 5e 49 66  side of X..  ^If
1d050 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e 74 20   the Y argument 
1d060 69 73 20 6f 6d 69 74 74 65 64 2c 20 72 74 72 69  is omitted, rtri
1d070 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70 61  m(X) removes spa
1d080 63 65 73 20 66 72 6f 6d 20 74 68 65 20 72 69 67  ces from the rig
1d090 68 74 0a 20 20 73 69 64 65 20 6f 66 20 58 2e 0a  ht.  side of X..
1d0a0 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 6f 75 6e  }..funcdef {soun
1d0b0 64 65 78 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  dex(X)} {} {.  ^
1d0c0 54 68 65 20 73 6f 75 6e 64 65 78 28 58 29 20 66  The soundex(X) f
1d0d0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1d0e0 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
1d0f0 20 74 68 65 20 73 6f 75 6e 64 65 78 20 65 6e 63   the soundex enc
1d100 6f 64 69 6e 67 20 0a 20 20 6f 66 20 74 68 65 20  oding .  of the 
1d110 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 54 68 65  string X..  ^The
1d120 20 73 74 72 69 6e 67 20 22 3f 30 30 30 22 20 69   string "?000" i
1d130 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68  s returned if th
1d140 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 4e 55  e argument is NU
1d150 4c 4c 20 6f 72 20 63 6f 6e 74 61 69 6e 73 0a 20  LL or contains. 
1d160 20 6e 6f 20 41 53 43 49 49 20 61 6c 70 68 61 62   no ASCII alphab
1d170 65 74 69 63 20 63 68 61 72 61 63 74 65 72 73 2e  etic characters.
1d180 0a 20 20 5e 28 54 68 69 73 20 66 75 6e 63 74 69  .  ^(This functi
1d190 6f 6e 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  on is omitted fr
1d1a0 6f 6d 20 53 51 4c 69 74 65 20 62 79 20 64 65 66  om SQLite by def
1d1b0 61 75 6c 74 2e 0a 20 20 49 74 20 69 73 20 6f 6e  ault..  It is on
1d1c0 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20  ly available if 
1d1d0 74 68 65 20 5b 53 51 4c 49 54 45 5f 53 4f 55 4e  the [SQLITE_SOUN
1d1e0 44 45 58 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  DEX] compile-tim
1d1f0 65 20 6f 70 74 69 6f 6e 0a 20 20 69 73 20 75 73  e option.  is us
1d200 65 64 20 77 68 65 6e 20 53 51 4c 69 74 65 20 69  ed when SQLite i
1d210 73 20 62 75 69 6c 74 2e 29 5e 0a 7d 0a 0a 66 75  s built.)^.}..fu
1d220 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 63 6f  ncdef {sqlite_co
1d230 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28  mpileoption_get(
1d240 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  N)} {} {.  ^The 
1d250 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70  sqlite_compileop
1d260 74 69 6f 6e 5f 67 65 74 28 29 20 53 51 4c 20 66  tion_get() SQL f
1d270 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61  unction is a wra
1d280 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a  pper around the.
1d290 20 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69    [sqlite3_compi
1d2a0 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29 5d 20  leoption_get()] 
1d2b0 43 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a  C/C++ function..
1d2c0 20 20 5e 54 68 69 73 20 72 6f 75 74 69 6e 65 20    ^This routine 
1d2d0 72 65 74 75 72 6e 73 20 74 68 65 20 4e 2d 74 68  returns the N-th
1d2e0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
1d2f0 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 62 75 69  tion used to bui
1d300 6c 64 20 53 51 4c 69 74 65 0a 20 20 6f 72 20 4e  ld SQLite.  or N
1d310 55 4c 4c 20 69 66 20 4e 20 69 73 20 6f 75 74 20  ULL if N is out 
1d320 6f 66 20 72 61 6e 67 65 2e 20 20 53 65 65 20 61  of range.  See a
1d330 6c 73 6f 20 74 68 65 20 5b 63 6f 6d 70 69 6c 65  lso the [compile
1d340 5f 6f 70 74 69 6f 6e 73 20 70 72 61 67 6d 61 5d  _options pragma]
1d350 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
1d360 6c 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  lite_compileopti
1d370 6f 6e 5f 75 73 65 64 28 58 29 7d 20 7b 7d 20 7b  on_used(X)} {} {
1d380 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 63  .  ^The sqlite_c
1d390 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73 65  ompileoption_use
1d3a0 64 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  d() SQL function
1d3b0 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61 72   is a wrapper ar
1d3c0 6f 75 6e 64 20 74 68 65 0a 20 20 5b 73 71 6c 69  ound the.  [sqli
1d3d0 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
1d3e0 6e 5f 75 73 65 64 28 29 5d 20 43 2f 43 2b 2b 20  n_used()] C/C++ 
1d3f0 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 5e 57 68 65  function..  ^Whe
1d400 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58  n the argument X
1d410 20 74 6f 20 73 71 6c 69 74 65 5f 63 6f 6d 70 69   to sqlite_compi
1d420 6c 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29  leoption_used(X)
1d430 20 69 73 20 61 20 73 74 72 69 6e 67 20 77 68 69   is a string whi
1d440 63 68 0a 20 20 69 73 20 74 68 65 20 6e 61 6d 65  ch.  is the name
1d450 20 6f 66 20 61 20 63 6f 6d 70 69 6c 65 2d 74 69   of a compile-ti
1d460 6d 65 20 6f 70 74 69 6f 6e 2c 20 74 68 69 73 20  me option, this 
1d470 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20  routine returns 
1d480 74 72 75 65 20 28 31 29 20 6f 72 0a 20 20 66 61  true (1) or.  fa
1d490 6c 73 65 20 28 30 29 20 64 65 70 65 6e 64 69 6e  lse (0) dependin
1d4a0 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20  g on whether or 
1d4b0 6e 6f 74 20 74 68 61 74 20 6f 70 74 69 6f 6e 20  not that option 
1d4c0 77 61 73 20 75 73 65 64 20 64 75 72 69 6e 67 20  was used during 
1d4d0 74 68 65 0a 20 20 62 75 69 6c 64 2e 0a 7d 0a 0a  the.  build..}..
1d4e0 66 75 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f  funcdef {sqlite_
1d4f0 6f 66 66 73 65 74 28 58 29 7d 20 7b 7d 20 7b 0a  offset(X)} {} {.
1d500 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 6f 66    ^The sqlite_of
1d510 66 73 65 74 28 58 29 20 66 75 6e 63 74 69 6f 6e  fset(X) function
1d520 20 72 65 74 75 72 6e 73 20 74 68 65 20 62 79 74   returns the byt
1d530 65 20 6f 66 66 73 65 74 20 69 6e 20 74 68 65 20  e offset in the 
1d540 64 61 74 61 62 61 73 65 0a 20 20 66 69 6c 65 20  database.  file 
1d550 66 6f 72 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  for the beginnin
1d560 67 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  g of the record 
1d570 66 72 6f 6d 20 77 68 69 63 68 20 76 61 6c 75 65  from which value
1d580 20 77 6f 75 6c 64 20 62 65 20 72 65 61 64 2e 0a   would be read..
1d590 20 20 49 66 20 58 20 69 73 20 6e 6f 74 20 61 20    If X is not a 
1d5a0 63 6f 6c 75 6d 6e 20 69 6e 20 61 6e 20 6f 72 64  column in an ord
1d5b0 69 6e 61 72 79 20 74 61 62 6c 65 2c 20 74 68 65  inary table, the
1d5c0 6e 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28  n sqlite_offset(
1d5d0 58 29 20 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c  X) returns.  NUL
1d5e0 4c 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72 65  L.  The value re
1d5f0 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
1d600 5f 6f 66 66 73 65 74 28 58 29 20 6d 69 67 68 74  _offset(X) might
1d610 20 72 65 66 65 72 65 6e 63 65 20 65 69 74 68 65   reference eithe
1d620 72 20 74 68 65 0a 20 20 6f 72 69 67 69 6e 61 6c  r the.  original
1d630 20 74 61 62 6c 65 20 6f 72 20 61 6e 20 69 6e 64   table or an ind
1d640 65 78 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  ex, depending on
1d650 20 74 68 65 20 71 75 65 72 79 2e 20 20 49 66 20   the query.  If 
1d660 74 68 65 20 76 61 6c 75 65 20 58 20 77 6f 75 6c  the value X woul
1d670 64 0a 20 20 6e 6f 72 6d 61 6c 6c 79 20 62 65 20  d.  normally be 
1d680 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20 61  extracted from a
1d690 6e 20 69 6e 64 65 78 2c 20 74 68 65 20 73 71 6c  n index, the sql
1d6a0 69 74 65 5f 6f 66 66 73 65 74 28 58 29 20 72 65  ite_offset(X) re
1d6b0 74 75 72 6e 73 20 74 68 65 0a 20 20 6f 66 66 73  turns the.  offs
1d6c0 65 74 20 74 6f 20 74 68 65 20 63 6f 72 72 65 73  et to the corres
1d6d0 70 6f 6e 64 69 6e 67 20 69 6e 64 65 78 20 72 65  ponding index re
1d6e0 63 6f 72 64 2e 20 20 49 66 20 74 68 65 20 76 61  cord.  If the va
1d6f0 6c 75 65 20 58 20 77 6f 75 6c 64 20 62 65 0a 20  lue X would be. 
1d700 20 65 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20   extracted from 
1d710 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 74 61 62  the original tab
1d720 6c 65 2c 20 74 68 65 6e 20 73 71 6c 69 74 65 5f  le, then sqlite_
1d730 6f 66 66 73 65 74 28 58 29 20 72 65 74 75 72 6e  offset(X) return
1d740 73 20 74 68 65 20 6f 66 66 73 65 74 0a 20 20 74  s the offset.  t
1d750 6f 20 74 68 65 20 74 61 62 6c 65 20 72 65 63 6f  o the table reco
1d760 72 64 2e 0a 0a 20 20 3c 70 3e 54 68 65 20 73 71  rd...  <p>The sq
1d770 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29 20 53  lite_offset(X) S
1d780 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  QL function is o
1d790 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69 66  nly available if
1d7a0 20 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74   SQLite is built
1d7b0 0a 20 20 75 73 69 6e 67 20 74 68 65 20 5b 2d 44  .  using the [-D
1d7c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46  SQLITE_ENABLE_OF
1d7d0 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43 5d 20 63  FSET_SQL_FUNC] c
1d7e0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
1d7f0 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  on..}..funcdef {
1d800 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64  sqlite_source_id
1d810 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  ()} {} {.  ^The 
1d820 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64  sqlite_source_id
1d830 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
1d840 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61  rns a string tha
1d850 74 20 69 64 65 6e 74 69 66 69 65 73 20 74 68 65  t identifies the
1d860 0a 20 20 73 70 65 63 69 66 69 63 20 76 65 72 73  .  specific vers
1d870 69 6f 6e 20 6f 66 20 74 68 65 20 73 6f 75 72 63  ion of the sourc
1d880 65 20 63 6f 64 65 20 74 68 61 74 20 77 61 73 20  e code that was 
1d890 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 74 68  used to build th
1d8a0 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61  e SQLite.  libra
1d8b0 72 79 2e 20 20 5e 54 68 65 20 73 74 72 69 6e 67  ry.  ^The string
1d8c0 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
1d8d0 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 20  ite_source_id() 
1d8e0 69 73 0a 20 20 74 68 65 20 64 61 74 65 20 61 6e  is.  the date an
1d8f0 64 20 74 69 6d 65 20 74 68 61 74 20 74 68 65 20  d time that the 
1d900 73 6f 75 72 63 65 20 63 6f 64 65 20 77 61 73 20  source code was 
1d910 63 68 65 63 6b 65 64 20 69 6e 20 66 6f 6c 6c 6f  checked in follo
1d920 77 65 64 20 62 79 0a 20 20 74 68 65 20 53 48 41  wed by.  the SHA
1d930 31 20 68 61 73 68 20 66 6f 72 20 74 68 61 74 20  1 hash for that 
1d940 63 68 65 63 6b 2d 69 6e 2e 20 20 5e 54 68 69 73  check-in.  ^This
1d950 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a 20 20 61   function is.  a
1d960 6e 20 53 51 4c 20 77 72 61 70 70 65 72 20 61 72  n SQL wrapper ar
1d970 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65  ound the [sqlite
1d980 33 5f 73 6f 75 72 63 65 69 64 28 29 5d 20 43 20  3_sourceid()] C 
1d990 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66 75  interface..}..fu
1d9a0 6e 63 64 65 66 20 7b 73 71 6c 69 74 65 5f 76 65  ncdef {sqlite_ve
1d9b0 72 73 69 6f 6e 28 29 7d 20 7b 7d 20 7b 0a 20 20  rsion()} {} {.  
1d9c0 5e 54 68 65 20 73 71 6c 69 74 65 5f 76 65 72 73  ^The sqlite_vers
1d9d0 69 6f 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  ion() function r
1d9e0 65 74 75 72 6e 73 20 74 68 65 20 76 65 72 73 69  eturns the versi
1d9f0 6f 6e 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  on string for th
1da00 65 20 53 51 4c 69 74 65 0a 20 20 6c 69 62 72 61  e SQLite.  libra
1da10 72 79 20 74 68 61 74 20 69 73 20 72 75 6e 6e 69  ry that is runni
1da20 6e 67 2e 20 20 5e 54 68 69 73 20 66 75 6e 63 74  ng.  ^This funct
1da30 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 0a 20 20  ion is an SQL.  
1da40 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74  wrapper around t
1da50 68 65 20 5b 73 71 6c 69 74 65 33 5f 6c 69 62 76  he [sqlite3_libv
1da60 65 72 73 69 6f 6e 28 29 5d 20 43 2d 69 6e 74 65  ersion()] C-inte
1da70 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  rface..}..funcde
1da80 66 20 7b 73 75 62 73 74 72 28 58 2c 59 2c 5a 29  f {substr(X,Y,Z)
1da90 20 73 75 62 73 74 72 28 58 2c 59 29 7d 20 7b 7d   substr(X,Y)} {}
1daa0 20 7b 0a 20 20 5e 54 68 65 20 73 75 62 73 74 72   {.  ^The substr
1dab0 28 58 2c 59 2c 5a 29 20 66 75 6e 63 74 69 6f 6e  (X,Y,Z) function
1dac0 20 72 65 74 75 72 6e 73 20 61 20 73 75 62 73 74   returns a subst
1dad0 72 69 6e 67 20 6f 66 20 69 6e 70 75 74 20 73 74  ring of input st
1dae0 72 69 6e 67 20 58 20 74 68 61 74 20 62 65 67 69  ring X that begi
1daf0 6e 73 0a 20 20 77 69 74 68 20 74 68 65 20 59 2d  ns.  with the Y-
1db00 74 68 20 63 68 61 72 61 63 74 65 72 20 61 6e 64  th character and
1db10 20 77 68 69 63 68 20 69 73 20 5a 20 63 68 61 72   which is Z char
1db20 61 63 74 65 72 73 20 6c 6f 6e 67 2e 0a 20 20 5e  acters long..  ^
1db30 49 66 20 5a 20 69 73 20 6f 6d 69 74 74 65 64 20  If Z is omitted 
1db40 74 68 65 6e 20 73 75 62 73 74 72 28 58 2c 59 29  then substr(X,Y)
1db50 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 63 68 61   returns all cha
1db60 72 61 63 74 65 72 73 20 74 68 72 6f 75 67 68 20  racters through 
1db70 74 68 65 20 65 6e 64 0a 20 20 6f 66 20 74 68 65  the end.  of the
1db80 20 73 74 72 69 6e 67 20 58 20 62 65 67 69 6e 6e   string X beginn
1db90 69 6e 67 20 77 69 74 68 20 74 68 65 20 59 2d 74  ing with the Y-t
1dba0 68 2e 0a 20 20 5e 54 68 65 20 6c 65 66 74 2d 6d  h..  ^The left-m
1dbb0 6f 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  ost character of
1dbc0 20 58 20 69 73 20 6e 75 6d 62 65 72 20 31 2e 20   X is number 1. 
1dbd0 20 5e 49 66 20 59 20 69 73 20 6e 65 67 61 74 69   ^If Y is negati
1dbe0 76 65 0a 20 20 74 68 65 6e 20 74 68 65 20 66 69  ve.  then the fi
1dbf0 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  rst character of
1dc00 20 74 68 65 20 73 75 62 73 74 72 69 6e 67 20 69   the substring i
1dc10 73 20 66 6f 75 6e 64 20 62 79 20 63 6f 75 6e 74  s found by count
1dc20 69 6e 67 20 66 72 6f 6d 20 74 68 65 0a 20 20 72  ing from the.  r
1dc30 69 67 68 74 20 72 61 74 68 65 72 20 74 68 61 6e  ight rather than
1dc40 20 74 68 65 20 6c 65 66 74 2e 20 20 5e 49 66 20   the left.  ^If 
1dc50 5a 20 69 73 20 6e 65 67 61 74 69 76 65 20 74 68  Z is negative th
1dc60 65 6e 0a 20 20 74 68 65 20 61 62 73 28 5a 29 20  en.  the abs(Z) 
1dc70 63 68 61 72 61 63 74 65 72 73 20 70 72 65 63 65  characters prece
1dc80 64 69 6e 67 20 74 68 65 20 59 2d 74 68 20 63 68  ding the Y-th ch
1dc90 61 72 61 63 74 65 72 20 61 72 65 20 72 65 74 75  aracter are retu
1dca0 72 6e 65 64 2e 0a 20 20 5e 49 66 20 58 20 69 73  rned..  ^If X is
1dcb0 20 61 20 73 74 72 69 6e 67 20 74 68 65 6e 20 63   a string then c
1dcc0 68 61 72 61 63 74 65 72 73 20 69 6e 64 69 63 65  haracters indice
1dcd0 73 20 72 65 66 65 72 20 74 6f 20 61 63 74 75 61  s refer to actua
1dce0 6c 20 55 54 46 2d 38 20 0a 20 20 63 68 61 72 61  l UTF-8 .  chara
1dcf0 63 74 65 72 73 2e 20 20 5e 49 66 20 58 20 69 73  cters.  ^If X is
1dd00 20 61 20 42 4c 4f 42 20 74 68 65 6e 20 74 68 65   a BLOB then the
1dd10 20 69 6e 64 69 63 65 73 20 72 65 66 65 72 20 74   indices refer t
1dd20 6f 20 62 79 74 65 73 2e 0a 7d 0a 0a 66 75 6e 63  o bytes..}..func
1dd30 64 65 66 20 7b 74 6f 74 61 6c 5f 63 68 61 6e 67  def {total_chang
1dd40 65 73 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  es()} {} {.  ^Th
1dd50 65 20 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  e total_changes(
1dd60 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1dd70 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
1dd80 20 72 6f 77 20 63 68 61 6e 67 65 73 0a 20 20 63   row changes.  c
1dd90 61 75 73 65 64 20 62 79 20 49 4e 53 45 52 54 2c  aused by INSERT,
1dda0 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
1ddb0 45 0a 20 20 73 74 61 74 65 6d 65 6e 74 73 20 73  E.  statements s
1ddc0 69 6e 63 65 20 74 68 65 20 63 75 72 72 65 6e 74  ince the current
1ddd0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
1dde0 74 69 6f 6e 20 77 61 73 20 6f 70 65 6e 65 64 2e  tion was opened.
1ddf0 0a 20 20 5e 54 68 69 73 20 66 75 6e 63 74 69 6f  .  ^This functio
1de00 6e 20 69 73 20 61 20 77 72 61 70 70 65 72 20 61  n is a wrapper a
1de10 72 6f 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74  round the [sqlit
1de20 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
1de30 28 29 5d 0a 20 20 43 2f 43 2b 2b 20 69 6e 74 65  ()].  C/C++ inte
1de40 72 66 61 63 65 2e 0a 7d 0a 0a 66 75 6e 63 64 65  rface..}..funcde
1de50 66 20 7b 74 72 69 6d 28 58 29 20 74 72 69 6d 28  f {trim(X) trim(
1de60 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68  X,Y)} {} {.  ^Th
1de70 65 20 74 72 69 6d 28 58 2c 59 29 20 66 75 6e 63  e trim(X,Y) func
1de80 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 73  tion returns a s
1de90 74 72 69 6e 67 20 66 6f 72 6d 65 64 20 62 79 20  tring formed by 
1dea0 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 61 6e 64  removing any and
1deb0 20 61 6c 6c 0a 20 20 63 68 61 72 61 63 74 65 72   all.  character
1dec0 73 20 74 68 61 74 20 61 70 70 65 61 72 20 69 6e  s that appear in
1ded0 20 59 20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64   Y from both end
1dee0 73 20 6f 66 20 58 2e 0a 20 20 5e 49 66 20 74 68  s of X..  ^If th
1def0 65 20 59 20 61 72 67 75 6d 65 6e 74 20 69 73 20  e Y argument is 
1df00 6f 6d 69 74 74 65 64 2c 20 74 72 69 6d 28 58 29  omitted, trim(X)
1df10 20 72 65 6d 6f 76 65 73 20 73 70 61 63 65 73 20   removes spaces 
1df20 66 72 6f 6d 20 62 6f 74 68 20 65 6e 64 73 20 6f  from both ends o
1df30 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
1df40 7b 74 79 70 65 6f 66 28 58 29 7d 20 7b 7d 20 7b  {typeof(X)} {} {
1df50 0a 20 20 5e 54 68 65 20 74 79 70 65 6f 66 28 58  .  ^The typeof(X
1df60 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1df70 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  ns a string that
1df80 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 5b   indicates the [
1df90 64 61 74 61 74 79 70 65 5d 20 6f 66 0a 20 20 74  datatype] of.  t
1dfa0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 58 3a  he expression X:
1dfb0 20 22 6e 75 6c 6c 22 2c 20 22 69 6e 74 65 67 65   "null", "intege
1dfc0 72 22 2c 20 22 72 65 61 6c 22 2c 20 22 74 65 78  r", "real", "tex
1dfd0 74 22 2c 20 6f 72 20 22 62 6c 6f 62 22 2e 0a 7d  t", or "blob"..}
1dfe0 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 6c 69 6b  ..funcdef {unlik
1dff0 65 6c 79 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  ely(X)} {} {.  ^
1e000 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20  The unlikely(X) 
1e010 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
1e020 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 58 20   the argument X 
1e030 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 54 68  unchanged..  ^Th
1e040 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66 75  e unlikely(X) fu
1e050 6e 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  nction is a no-o
1e060 70 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  p that the code 
1e070 67 65 6e 65 72 61 74 6f 72 0a 20 20 6f 70 74 69  generator.  opti
1e080 6d 69 7a 65 73 20 61 77 61 79 20 73 6f 20 74 68  mizes away so th
1e090 61 74 20 69 74 20 63 6f 6e 73 75 6d 65 73 20 6e  at it consumes n
1e0a0 6f 20 43 50 55 20 63 79 63 6c 65 73 20 61 74 0a  o CPU cycles at.
1e0b0 20 20 72 75 6e 2d 74 69 6d 65 20 28 74 68 61 74    run-time (that
1e0c0 20 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c   is, during call
1e0d0 73 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74  s to [sqlite3_st
1e0e0 65 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70  ep()])..  ^The p
1e0f0 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 75 6e  urpose of the un
1e100 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69  likely(X) functi
1e110 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65  on is to provide
1e120 20 61 20 68 69 6e 74 0a 20 20 74 6f 20 74 68 65   a hint.  to the
1e130 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74   query planner t
1e140 68 61 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74  hat the argument
1e150 20 58 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20   X is a boolean 
1e160 76 61 6c 75 65 0a 20 20 74 68 61 74 20 69 73 20  value.  that is 
1e170 75 73 75 61 6c 6c 79 20 6e 6f 74 20 74 72 75 65  usually not true
1e180 2e 20 5e 28 54 68 65 20 75 6e 6c 69 6b 65 6c 79  . ^(The unlikely
1e190 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  (X) function is 
1e1a0 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 74 6f 20  equivalent.  to 
1e1b0 5b 6c 69 6b 65 6c 69 68 6f 6f 64 5d 28 58 2c 20  [likelihood](X, 
1e1c0 30 2e 30 36 32 35 29 2e 29 5e 0a 7d 0a 0a 66 75  0.0625).)^.}..fu
1e1d0 6e 63 64 65 66 20 7b 75 6e 69 63 6f 64 65 28 58  ncdef {unicode(X
1e1e0 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 75  )} {} {.  ^The u
1e1f0 6e 69 63 6f 64 65 28 58 29 20 66 75 6e 63 74 69  nicode(X) functi
1e200 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  on returns the n
1e210 75 6d 65 72 69 63 20 75 6e 69 63 6f 64 65 20 63  umeric unicode c
1e220 6f 64 65 20 70 6f 69 6e 74 20 63 6f 72 72 65 73  ode point corres
1e230 70 6f 6e 64 69 6e 67 20 74 6f 0a 20 20 74 68 65  ponding to.  the
1e240 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72   first character
1e250 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 58   of the string X
1e260 2e 20 20 49 66 20 74 68 65 20 61 72 67 75 6d 65  .  If the argume
1e270 6e 74 20 74 6f 20 75 6e 69 63 6f 64 65 28 58 29  nt to unicode(X)
1e280 20 69 73 20 6e 6f 74 20 61 20 73 74 72 69 6e 67   is not a string
1e290 0a 20 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  .  then the resu
1e2a0 6c 74 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  lt is undefined.
1e2b0 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 70 70  .}..funcdef {upp
1e2c0 65 72 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  er(X)} {} {.  ^T
1e2d0 68 65 20 75 70 70 65 72 28 58 29 20 66 75 6e 63  he upper(X) func
1e2e0 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63  tion returns a c
1e2f0 6f 70 79 20 6f 66 20 69 6e 70 75 74 20 73 74 72  opy of input str
1e300 69 6e 67 20 58 20 69 6e 20 77 68 69 63 68 20 61  ing X in which a
1e310 6c 6c 20 0a 20 20 6c 6f 77 65 72 2d 63 61 73 65  ll .  lower-case
1e320 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
1e330 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20  s are converted 
1e340 74 6f 20 74 68 65 69 72 20 75 70 70 65 72 2d 63  to their upper-c
1e350 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74 2e 0a  ase equivalent..
1e360 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 7a 65 72 6f  }..funcdef {zero
1e370 62 6c 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20  blob(N)} {} {.  
1e380 5e 54 68 65 20 7a 65 72 6f 62 6c 6f 62 28 4e 29  ^The zeroblob(N)
1e390 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1e3a0 73 20 61 20 42 4c 4f 42 20 63 6f 6e 73 69 73 74  s a BLOB consist
1e3b0 69 6e 67 20 6f 66 20 4e 20 62 79 74 65 73 20 6f  ing of N bytes o
1e3c0 66 20 30 78 30 30 2e 0a 20 20 53 51 4c 69 74 65  f 0x00..  SQLite
1e3d0 20 6d 61 6e 61 67 65 73 20 74 68 65 73 65 20 7a   manages these z
1e3e0 65 72 6f 62 6c 6f 62 73 20 76 65 72 79 20 65 66  eroblobs very ef
1e3f0 66 69 63 69 65 6e 74 6c 79 2e 20 20 5a 65 72 6f  ficiently.  Zero
1e400 62 6c 6f 62 73 20 63 61 6e 20 62 65 20 75 73 65  blobs can be use
1e410 64 20 74 6f 0a 20 20 72 65 73 65 72 76 65 20 73  d to.  reserve s
1e420 70 61 63 65 20 66 6f 72 20 61 20 42 4c 4f 42 20  pace for a BLOB 
1e430 74 68 61 74 20 69 73 20 6c 61 74 65 72 20 77 72  that is later wr
1e440 69 74 74 65 6e 20 75 73 69 6e 67 20 0a 20 20 5b  itten using .  [
1e450 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 6f 70 65  sqlite3_blob_ope
1e460 6e 28 29 20 7c 20 69 6e 63 72 65 6d 65 6e 74 61  n() | incrementa
1e470 6c 20 42 4c 4f 42 20 49 2f 4f 5d 2e 0a 20 20 5e  l BLOB I/O]..  ^
1e480 54 68 69 73 20 53 51 4c 20 66 75 6e 63 74 69 6f  This SQL functio
1e490 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  n is implemented
1e4a0 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69   using the [sqli
1e4b0 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62  te3_result_zerob
1e4c0 6c 6f 62 28 29 5d 0a 20 20 72 6f 75 74 69 6e 65  lob()].  routine
1e4d0 20 66 72 6f 6d 20 74 68 65 20 43 2f 43 2b 2b 20   from the C/C++ 
1e4e0 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 3c 2f 74  interface..}.</t
1e4f0 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65  cl>..<p>The core
1e500 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e   functions shown
1e510 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c   below are avail
1e520 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e  able by default.
1e530 20 0a 5b 64 61 74 65 66 75 6e 63 20 7c 20 44 61   .[datefunc | Da
1e540 74 65 20 26 61 6d 70 3b 20 54 69 6d 65 20 66 75  te &amp; Time fu
1e550 6e 63 74 69 6f 6e 73 5d 2c 0a 5b 61 67 67 66 75  nctions],.[aggfu
1e560 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66  nc | aggregate f
1e570 75 6e 63 74 69 6f 6e 73 5d 2c 0a 5b 62 75 69 6c  unctions],.[buil
1e580 74 69 6e 20 77 69 6e 64 6f 77 20 66 75 6e 63 74  tin window funct
1e590 69 6f 6e 73 7c 77 69 6e 64 6f 77 20 66 75 6e 63  ions|window func
1e5a0 74 69 6f 6e 73 5d 2c 20 61 6e 64 0a 5b 6a 73 6f  tions], and.[jso
1e5b0 6e 31 20 7c 20 4a 53 4f 4e 20 66 75 6e 63 74 69  n1 | JSON functi
1e5c0 6f 6e 73 5d 20 61 72 65 20 64 6f 63 75 6d 65 6e  ons] are documen
1e5d0 74 65 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20  ted separately. 
1e5e0 20 41 6e 0a 61 70 70 6c 69 63 61 74 69 6f 6e 20   An.application 
1e5f0 6d 61 79 20 64 65 66 69 6e 65 20 61 64 64 69 74  may define addit
1e600 69 6f 6e 61 6c 0a 66 75 6e 63 74 69 6f 6e 73 20  ional.functions 
1e610 77 72 69 74 74 65 6e 20 69 6e 20 43 20 61 6e 64  written in C and
1e620 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 64 61   added to the da
1e630 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 75 73  tabase engine us
1e640 69 6e 67 0a 74 68 65 20 5b 73 71 6c 69 74 65 33  ing.the [sqlite3
1e650 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
1e660 28 29 5d 20 41 50 49 2e 3c 2f 70 3e 0a 0a 3c 74  ()] API.</p>..<t
1e670 63 6c 3e 0a 73 65 74 20 6c 78 20 7b 7d 0a 66 6f  cl>.set lx {}.fo
1e680 72 65 61 63 68 20 62 61 73 65 73 79 6e 74 61 78  reach basesyntax
1e690 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 63 6f   [array names co
1e6a0 72 65 66 75 6e 63 73 65 74 5d 20 7b 0a 20 20 66  refuncset] {.  f
1e6b0 6f 72 65 61 63 68 20 7b 73 79 6e 74 61 78 20 6b  oreach {syntax k
1e6c0 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 24 63  eywords desc} $c
1e6d0 6f 72 65 66 75 6e 63 73 65 74 28 24 62 61 73 65  orefuncset($base
1e6e0 73 79 6e 74 61 78 29 20 62 72 65 61 6b 0a 20 20  syntax) break.  
1e6f0 72 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 5f 5d 2b  regexp {^[a-z_]+
1e700 7d 20 24 62 61 73 65 73 79 6e 74 61 78 20 66 72  } $basesyntax fr
1e710 61 67 6d 65 6e 74 0a 20 20 66 6f 72 65 61 63 68  agment.  foreach
1e720 20 63 6f 72 65 73 79 6e 74 61 78 20 24 73 79 6e   coresyntax $syn
1e730 74 61 78 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e  tax {.    lappen
1e740 64 20 6c 78 20 5b 6c 69 73 74 20 24 66 72 61 67  d lx [list $frag
1e750 6d 65 6e 74 20 24 63 6f 72 65 73 79 6e 74 61 78  ment $coresyntax
1e760 20 30 5d 0a 20 20 7d 0a 7d 0a 68 64 5f 6c 69 73   0].  }.}.hd_lis
1e770 74 5f 6f 66 5f 6c 69 6e 6b 73 20 7b 7d 20 32 32  t_of_links {} 22
1e780 35 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20  5 [lsort -index 
1e790 31 20 24 6c 78 5d 0a 0a 68 64 5f 70 75 74 73 6e  1 $lx]..hd_putsn
1e7a0 6c 20 22 3c 68 72 20 63 6c 61 73 73 3d 27 78 68  l "<hr class='xh
1e7b0 72 27 3e 22 0a 68 64 5f 70 75 74 73 6e 6c 20 22  r'>".hd_putsnl "
1e7c0 3c 64 6c 3e 22 0a 66 6f 72 65 61 63 68 20 62 61  <dl>".foreach ba
1e7d0 73 65 73 79 6e 74 61 78 20 5b 6c 73 6f 72 74 20  sesyntax [lsort 
1e7e0 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 63 6f 72  [array names cor
1e7f0 65 66 75 6e 63 73 65 74 5d 5d 20 7b 0a 20 20 66  efuncset]] {.  f
1e800 6f 72 65 61 63 68 20 7b 73 79 6e 74 61 78 20 6b  oreach {syntax k
1e810 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20 24 63  eywords desc} $c
1e820 6f 72 65 66 75 6e 63 73 65 74 28 24 62 61 73 65  orefuncset($base
1e830 73 79 6e 74 61 78 29 20 62 72 65 61 6b 0a 20 20  syntax) break.  
1e840 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b  regsub -all {\s+
1e850 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24  } [string trim $
1e860 73 79 6e 74 61 78 5d 20 7b 3c 62 72 20 2f 3e 7d  syntax] {<br />}
1e870 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62   syntax.  regsub
1e880 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b   -all {\(([^*)]+
1e890 29 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28 3c  )\)} $syntax {(<
1e8a0 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74 61  i>\1</i>)} synta
1e8b0 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  x.  regsub -all 
1e8c0 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f 69  {,} $syntax {</i
1e8d0 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20 20  >,<i>} syntax.  
1e8e0 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e  regsub -all {<i>
1e8f0 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e  \.\.\.</i>} $syn
1e900 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78  tax {...} syntax
1e910 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b 61 2d 7a  .  regexp {^[a-z
1e920 5d 2b 7d 20 24 62 61 73 65 73 79 6e 74 61 78 20  ]+} $basesyntax 
1e930 66 72 61 67 6d 65 6e 74 0a 20 20 69 66 20 7b 5b  fragment.  if {[
1e940 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64  llength $keyword
1e950 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65 67  s]==0} {.    reg
1e960 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73  exp {[a-z_]+} $s
1e970 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20 20 68  yntax name.    h
1e980 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61 6d 65  d_fragment $name
1e990 20 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d 65 7d   *$name "${name}
1e9a0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 22  () SQL function"
1e9b0 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
1e9c0 73 65 74 20 66 72 61 67 6e 61 6d 65 20 5b 6c 69  set fragname [li
1e9d0 6e 64 65 78 20 24 6b 65 79 77 6f 72 64 73 20 30  ndex $keywords 0
1e9e0 5d 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c  ].    regsub -al
1e9f0 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72 61 67  l {[^a-z]} $frag
1ea00 6e 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61 6d 65  name {} fragname
1ea10 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74  .    hd_fragment
1ea20 20 24 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 65   $fragname.    e
1ea30 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  val hd_keywords 
1ea40 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c 6e 20  [string map {\n 
1ea50 7b 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73 5d 0a  { }} $keywords].
1ea60 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 3c    }.  hd_puts "<
1ea70 64 74 3e 3c 70 3e 3c 62 3e 24 73 79 6e 74 61 78  dt><p><b>$syntax
1ea80 3c 2f 62 3e 3c 2f 64 74 3e 22 0a 20 20 68 64 5f  </b></dt>".  hd_
1ea90 72 65 73 6f 6c 76 65 20 22 3c 64 64 3e 3c 70 3e  resolve "<dd><p>
1eaa0 24 64 65 73 63 3c 2f 64 64 3e 5c 6e 22 0a 7d 0a  $desc</dd>\n".}.
1eab0 68 64 5f 70 75 74 73 6e 6c 20 22 3c 2f 64 6c 3e  hd_putsnl "</dl>
1eac0 22 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  "..#############
1ead0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eaf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1eb10 23 0a 53 65 63 74 69 6f 6e 20 7b 44 61 74 65 20  #.Section {Date 
1eb20 41 6e 64 20 54 69 6d 65 20 46 75 6e 63 74 69 6f  And Time Functio
1eb30 6e 73 7d 20 64 61 74 65 66 75 6e 63 20 7b 2a 64  ns} datefunc {*d
1eb40 61 74 65 66 75 6e 63 20 7b 64 61 74 65 20 61 6e  atefunc {date an
1eb50 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
1eb60 7d 7d 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b  }}.hd_keywords {
1eb70 64 61 74 65 28 29 20 53 51 4c 20 66 75 6e 63 74  date() SQL funct
1eb80 69 6f 6e 7d 20 7b 74 69 6d 65 28 29 20 53 51 4c  ion} {time() SQL
1eb90 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b 65   function}.hd_ke
1eba0 79 77 6f 72 64 73 20 7b 64 61 74 65 74 69 6d 65  ywords {datetime
1ebb0 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1ebc0 20 7b 6a 75 6c 69 61 6e 64 61 79 28 29 20 53 51   {julianday() SQ
1ebd0 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a 68 64 5f 6b  L function}.hd_k
1ebe0 65 79 77 6f 72 64 73 20 7b 73 74 72 66 74 69 6d  eywords {strftim
1ebf0 65 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  e() SQL function
1ec00 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 0a 53 51  }.</tcl>..<p>.SQ
1ec10 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 66 69  Lite supports fi
1ec20 76 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65  ve date and time
1ec30 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 20 66 6f   functions as fo
1ec40 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e 0a 0a 3c 70 3e  llows:.</p>..<p>
1ec50 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e  .<ol>.<li> ^(<b>
1ec60 64 61 74 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  date(</b><i>time
1ec70 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
1ec80 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
1ec90 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
1eca0 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 74 69  li>.<li> ^(<b>ti
1ecb0 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65 73 74  me(</b><i>timest
1ecc0 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20  ring, modifier, 
1ecd0 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69  modifier, ...</i
1ece0 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69  ><b>)</b>)^ </li
1ecf0 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 64 61 74 65  >.<li> ^(<b>date
1ed00 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74 69 6d 65  time(</b><i>time
1ed10 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72  string, modifier
1ed20 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c  , modifier, ...<
1ed30 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f  /i><b>)</b>)^ </
1ed40 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62 3e 6a 75  li>.<li> ^(<b>ju
1ed50 6c 69 61 6e 64 61 79 28 3c 2f 62 3e 3c 69 3e 74  lianday(</b><i>t
1ed60 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
1ed70 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
1ed80 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e  ..</i><b>)</b>)^
1ed90 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62   </li>.<li> ^(<b
1eda0 3e 73 74 72 66 74 69 6d 65 28 3c 2f 62 3e 3c 69  >strftime(</b><i
1edb0 3e 66 6f 72 6d 61 74 2c 20 74 69 6d 65 73 74 72  >format, timestr
1edc0 69 6e 67 2c 20 6d 6f 64 69 66 69 65 72 2c 20 6d  ing, modifier, m
1edd0 6f 64 69 66 69 65 72 2c 20 2e 2e 2e 3c 2f 69 3e  odifier, ...</i>
1ede0 3c 62 3e 29 3c 2f 62 3e 29 5e 20 3c 2f 6c 69 3e  <b>)</b>)^ </li>
1edf0 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 0a 5e 41 6c 6c  .</ol>..<p>.^All
1ee00 20 66 69 76 65 20 64 61 74 65 20 61 6e 64 20 74   five date and t
1ee10 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 61  ime functions ta
1ee20 6b 65 20 61 20 74 69 6d 65 20 73 74 72 69 6e 67  ke a time string
1ee30 20 61 73 20 61 6e 20 61 72 67 75 6d 65 6e 74 2e   as an argument.
1ee40 20 0a 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69   .^The time stri
1ee50 6e 67 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  ng is followed b
1ee60 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d  y zero or more m
1ee70 6f 64 69 66 69 65 72 73 2e 20 0a 5e 54 68 65 20  odifiers. .^The 
1ee80 73 74 72 66 74 69 6d 65 28 29 20 66 75 6e 63 74  strftime() funct
1ee90 69 6f 6e 20 61 6c 73 6f 20 74 61 6b 65 73 20 61  ion also takes a
1eea0 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 61   format string a
1eeb0 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67 75  s its first argu
1eec0 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  ment..</p>..<p>.
1eed0 54 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  The date and tim
1eee0 65 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20  e functions use 
1eef0 61 20 73 75 62 73 65 74 20 6f 66 0a 5b 68 74 74  a subset of.[htt
1ef00 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61  p://en.wikipedia
1ef10 2e 6f 72 67 2f 77 69 6b 69 2f 49 53 4f 5f 38 36  .org/wiki/ISO_86
1ef20 30 31 20 7c 20 49 53 30 2d 38 36 30 31 5d 20 64  01 | IS0-8601] d
1ef30 61 74 65 20 61 6e 64 20 74 69 6d 65 0a 66 6f 72  ate and time.for
1ef40 6d 61 74 73 2e 0a 5e 54 68 65 20 64 61 74 65 28  mats..^The date(
1ef50 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1ef60 6e 73 20 74 68 65 20 64 61 74 65 20 69 6e 20 74  ns the date in t
1ef70 68 69 73 20 66 6f 72 6d 61 74 3a 20 59 59 59 59  his format: YYYY
1ef80 2d 4d 4d 2d 44 44 2e 20 0a 5e 54 68 65 20 74 69  -MM-DD. .^The ti
1ef90 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  me() function re
1efa0 74 75 72 6e 73 20 74 68 65 20 74 69 6d 65 20 61  turns the time a
1efb0 73 20 48 48 3a 4d 4d 3a 53 53 2e 20 0a 5e 54 68  s HH:MM:SS. .^Th
1efc0 65 20 64 61 74 65 74 69 6d 65 28 29 20 66 75 6e  e datetime() fun
1efd0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 22 59  ction returns "Y
1efe0 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a  YYY-MM-DD HH:MM:
1eff0 53 53 22 2e 20 0a 5e 28 54 68 65 20 6a 75 6c 69  SS". .^(The juli
1f000 61 6e 64 61 79 28 29 20 66 75 6e 63 74 69 6f 6e  anday() function
1f010 20 72 65 74 75 72 6e 73 20 74 68 65 20 0a 5b 68   returns the .[h
1f020 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1f030 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 4a 75 6c 69  ia.org/wiki/Juli
1f040 61 6e 5f 64 61 79 20 7c 20 4a 75 6c 69 61 6e 20  an_day | Julian 
1f050 64 61 79 5d 20 2d 20 74 68 65 0a 6e 75 6d 62 65  day] - the.numbe
1f060 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20  r of days since 
1f070 6e 6f 6f 6e 20 69 6e 20 47 72 65 65 6e 77 69 63  noon in Greenwic
1f080 68 20 6f 6e 20 4e 6f 76 65 6d 62 65 72 20 32 34  h on November 24
1f090 2c 20 34 37 31 34 20 42 2e 43 2e 20 0a 28 5b 68  , 4714 B.C. .([h
1f0a0 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64  ttp://en.wikiped
1f0b0 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 50 72 6f 6c  ia.org/wiki/Prol
1f0c0 65 70 74 69 63 5f 47 72 65 67 6f 72 69 61 6e 5f  eptic_Gregorian_
1f0d0 63 61 6c 65 6e 64 61 72 20 7c 20 50 72 6f 6c 65  calendar | Prole
1f0e0 70 74 69 63 20 47 72 65 67 6f 72 69 61 6e 20 63  ptic Gregorian c
1f0f0 61 6c 65 6e 64 61 72 5d 29 2e 29 5e 0a 5e 54 68  alendar]).)^.^Th
1f100 65 20 73 74 72 66 74 69 6d 65 28 29 20 72 6f 75  e strftime() rou
1f110 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65  tine returns the
1f120 20 64 61 74 65 20 66 6f 72 6d 61 74 74 65 64 20   date formatted 
1f130 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 0a 74 68  according to .th
1f140 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
1f150 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
1f160 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
1f170 0a 5e 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72  .^The format str
1f180 69 6e 67 20 73 75 70 70 6f 72 74 73 20 74 68 65  ing supports the
1f190 20 6d 6f 73 74 20 63 6f 6d 6d 6f 6e 20 73 75 62   most common sub
1f1a0 73 74 69 74 75 74 69 6f 6e 73 20 66 6f 75 6e 64  stitutions found
1f1b0 20 69 6e 20 74 68 65 20 0a 5b 68 74 74 70 3a 2f   in the .[http:/
1f1c0 2f 6f 70 65 6e 67 72 6f 75 70 2e 6f 72 67 2f 6f  /opengroup.org/o
1f1d0 6e 6c 69 6e 65 70 75 62 73 2f 30 30 37 39 30 38  nlinepubs/007908
1f1e0 37 39 39 2f 78 73 68 2f 73 74 72 66 74 69 6d 65  799/xsh/strftime
1f1f0 2e 68 74 6d 6c 20 7c 20 73 74 72 66 74 69 6d 65  .html | strftime
1f200 28 29 20 66 75 6e 63 74 69 6f 6e 5d 0a 66 72 6f  () function].fro
1f210 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43  m the standard C
1f220 20 6c 69 62 72 61 72 79 20 70 6c 75 73 20 74 77   library plus tw
1f230 6f 20 6e 65 77 20 73 75 62 73 74 69 74 75 74 69  o new substituti
1f240 6f 6e 73 2c 20 25 66 20 61 6e 64 20 25 4a 2e 0a  ons, %f and %J..
1f250 5e 28 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  ^(The following 
1f260 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 6c 69  is a complete li
1f270 73 74 20 6f 66 20 76 61 6c 69 64 20 73 74 72 66  st of valid strf
1f280 74 69 6d 65 28 29 20 73 75 62 73 74 69 74 75 74  time() substitut
1f290 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ions:.</p>..<blo
1f2a0 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20  ckquote>.<table 
1f2b0 62 6f 72 64 65 72 3d 22 30 22 20 63 65 6c 6c 70  border="0" cellp
1f2c0 61 64 64 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73  adding="0" cells
1f2d0 70 61 63 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e  pacing="0">.<tr>
1f2e0 3c 74 64 3e 3c 74 64 20 77 69 64 74 68 3d 22 31  <td><td width="1
1f2f0 30 22 3e 3c 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74  0"><td></tr>..<t
1f300 72 3e 3c 74 64 3e 20 25 64 20 3c 74 64 3e 3c 74  r><td> %d <td><t
1f310 64 3e 20 64 61 79 20 6f 66 20 6d 6f 6e 74 68 3a  d> day of month:
1f320 20 30 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 66 20   00.<tr><td> %f 
1f330 3c 74 64 3e 3c 74 64 3e 20 66 72 61 63 74 69 6f  <td><td> fractio
1f340 6e 61 6c 20 73 65 63 6f 6e 64 73 3a 20 53 53 2e  nal seconds: SS.
1f350 53 53 53 0a 3c 74 72 3e 3c 74 64 3e 20 25 48 20  SSS.<tr><td> %H 
1f360 3c 74 64 3e 3c 74 64 3e 20 68 6f 75 72 3a 20 30  <td><td> hour: 0
1f370 30 2d 32 34 20 0a 3c 74 72 3e 3c 74 64 3e 20 25  0-24 .<tr><td> %
1f380 6a 20 3c 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f  j <td><td> day o
1f390 66 20 79 65 61 72 3a 20 30 30 31 2d 33 36 36 0a  f year: 001-366.
1f3a0 3c 74 72 3e 3c 74 64 3e 20 25 4a 20 3c 74 64 3e  <tr><td> %J <td>
1f3b0 3c 74 64 3e 20 4a 75 6c 69 61 6e 20 64 61 79 20  <td> Julian day 
1f3c0 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 3e 20  number.<tr><td> 
1f3d0 25 6d 20 3c 74 64 3e 3c 74 64 3e 20 6d 6f 6e 74  %m <td><td> mont
1f3e0 68 3a 20 30 31 2d 31 32 0a 3c 74 72 3e 3c 74 64  h: 01-12.<tr><td
1f3f0 3e 20 25 4d 20 3c 74 64 3e 3c 74 64 3e 20 6d 69  > %M <td><td> mi
1f400 6e 75 74 65 3a 20 30 30 2d 35 39 0a 3c 74 72 3e  nute: 00-59.<tr>
1f410 3c 74 64 3e 20 25 73 20 3c 74 64 3e 3c 74 64 3e  <td> %s <td><td>
1f420 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 31   seconds since 1
1f430 39 37 30 2d 30 31 2d 30 31 0a 3c 74 72 3e 3c 74  970-01-01.<tr><t
1f440 64 3e 20 25 53 20 3c 74 64 3e 3c 74 64 3e 20 73  d> %S <td><td> s
1f450 65 63 6f 6e 64 73 3a 20 30 30 2d 35 39 0a 3c 74  econds: 00-59.<t
1f460 72 3e 3c 74 64 3e 20 25 77 20 3c 74 64 3e 3c 74  r><td> %w <td><t
1f470 64 3e 20 64 61 79 20 6f 66 20 77 65 65 6b 20 30  d> day of week 0
1f480 2d 36 20 77 69 74 68 20 53 75 6e 64 61 79 3d 3d  -6 with Sunday==
1f490 30 0a 3c 74 72 3e 3c 74 64 3e 20 25 57 20 3c 74  0.<tr><td> %W <t
1f4a0 64 3e 3c 74 64 3e 20 77 65 65 6b 20 6f 66 20 79  d><td> week of y
1f4b0 65 61 72 3a 20 30 30 2d 35 33 0a 3c 74 72 3e 3c  ear: 00-53.<tr><
1f4c0 74 64 3e 20 25 59 20 3c 74 64 3e 3c 74 64 3e 20  td> %Y <td><td> 
1f4d0 79 65 61 72 3a 20 30 30 30 30 2d 39 39 39 39 0a  year: 0000-9999.
1f4e0 3c 74 72 3e 3c 74 64 3e 20 25 25 20 3c 74 64 3e  <tr><td> %% <td>
1f4f0 3c 74 64 3e 20 25 0a 3c 2f 74 61 62 6c 65 3e 0a  <td> %.</table>.
1f500 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
1f510 0a 3c 70 3e 0a 5e 28 4e 6f 74 69 63 65 20 74 68  .<p>.^(Notice th
1f520 61 74 20 61 6c 6c 20 6f 74 68 65 72 20 64 61 74  at all other dat
1f530 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74  e and time funct
1f540 69 6f 6e 73 20 63 61 6e 20 62 65 20 65 78 70 72  ions can be expr
1f550 65 73 73 65 64 0a 69 6e 20 74 65 72 6d 73 20 6f  essed.in terms o
1f560 66 20 73 74 72 66 74 69 6d 65 28 29 3a 0a 3c 2f  f strftime():.</
1f570 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1f580 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
1f590 30 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  0" cellpadding="
1f5a0 30 22 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22  0" cellspacing="
1f5b0 30 22 3e 0a 3c 74 72 3e 3c 74 64 3e 3c 62 3e 46  0">.<tr><td><b>F
1f5c0 75 6e 63 74 69 6f 6e 3c 2f 62 3e 3c 74 64 20 77  unction</b><td w
1f5d0 69 64 74 68 3d 22 33 30 22 3e 3c 74 64 3e 3c 62  idth="30"><td><b
1f5e0 3e 45 71 75 69 76 61 6c 65 6e 74 20 73 74 72 66  >Equivalent strf
1f5f0 74 69 6d 65 28 29 3c 2f 62 3e 0a 3c 74 72 3e 3c  time()</b>.<tr><
1f600 74 64 3e 20 20 20 64 61 74 65 28 2e 2e 2e 29 20  td>   date(...) 
1f610 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73       <td><td>  s
1f620 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25  trftime('%Y-%m-%
1f630 64 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64  d', ...).<tr><td
1f640 3e 20 20 20 74 69 6d 65 28 2e 2e 2e 29 20 20 20  >   time(...)   
1f650 20 20 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72     <td><td>  str
1f660 66 74 69 6d 65 28 27 25 48 3a 25 4d 3a 25 53 27  ftime('%H:%M:%S'
1f670 2c 20 2e 2e 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20  , ...).<tr><td> 
1f680 20 20 64 61 74 65 74 69 6d 65 28 2e 2e 2e 29 20    datetime(...) 
1f690 20 3c 74 64 3e 3c 74 64 3e 20 20 73 74 72 66 74   <td><td>  strft
1f6a0 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 25 48  ime('%Y-%m-%d %H
1f6b0 3a 25 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74  :%M:%S', ...).<t
1f6c0 72 3e 3c 74 64 3e 20 20 20 6a 75 6c 69 61 6e 64  r><td>   juliand
1f6d0 61 79 28 2e 2e 2e 29 20 3c 74 64 3e 3c 74 64 3e  ay(...) <td><td>
1f6e0 20 20 73 74 72 66 74 69 6d 65 28 27 25 4a 27 2c    strftime('%J',
1f6f0 20 2e 2e 2e 29 0a 3c 2f 74 61 62 6c 65 3e 0a 3c   ...).</table>.<
1f700 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
1f710 3c 70 3e 0a 54 68 65 20 6f 6e 6c 79 20 72 65 61  <p>.The only rea
1f720 73 6f 6e 73 20 66 6f 72 20 70 72 6f 76 69 64 69  sons for providi
1f730 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 74 68  ng functions oth
1f740 65 72 20 74 68 61 6e 20 73 74 72 66 74 69 6d 65  er than strftime
1f750 28 29 20 69 73 0a 66 6f 72 20 63 6f 6e 76 65 6e  () is.for conven
1f760 69 65 6e 63 65 20 61 6e 64 20 66 6f 72 20 65 66  ience and for ef
1f770 66 69 63 69 65 6e 63 79 2e 0a 3c 2f 70 3e 0a 0a  ficiency..</p>..
1f780 3c 68 33 3e 54 69 6d 65 20 53 74 72 69 6e 67 73  <h3>Time Strings
1f790 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 41 20 74 69  </h3>..<p>^(A ti
1f7a0 6d 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62 65  me string can be
1f7b0 20 69 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 66   in any of the f
1f7c0 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 73  ollowing formats
1f7d0 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
1f7e0 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f   <i>YYYY-MM-DD</
1f7f0 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d  i>.<li> <i>YYYY-
1f800 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3c 2f 69 3e 0a  MM-DD HH:MM</i>.
1f810 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1f820 44 44 20 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a  DD HH:MM:SS</i>.
1f830 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d  <li> <i>YYYY-MM-
1f840 44 44 20 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  DD HH:MM:SS.SSS<
1f850 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1f860 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
1f870 62 3e 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e 0a 3c  b><i>HH:MM</i>.<
1f880 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44  li> <i>YYYY-MM-D
1f890 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e  D</i><b>T</b><i>
1f8a0 48 48 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69  HH:MM:SS</i>.<li
1f8b0 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c  > <i>YYYY-MM-DD<
1f8c0 2f 69 3e 3c 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48  /i><b>T</b><i>HH
1f8d0 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c  :MM:SS.SSS</i>.<
1f8e0 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3c 2f 69 3e  li> <i>HH:MM</i>
1f8f0 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d 4d 3a 53  .<li> <i>HH:MM:S
1f900 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  S</i>.<li> <i>HH
1f910 3a 4d 4d 3a 53 53 2e 53 53 53 3c 2f 69 3e 0a 3c  :MM:SS.SSS</i>.<
1f920 6c 69 3e 20 3c 62 3e 6e 6f 77 3c 2f 62 3e 0a 3c  li> <b>now</b>.<
1f930 6c 69 3e 20 3c 69 3e 44 44 44 44 44 44 44 44 44  li> <i>DDDDDDDDD
1f940 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c  D</i>.</ol>)^..<
1f950 70 3e 0a 5e 49 6e 20 66 6f 72 6d 61 74 73 20 35  p>.^In formats 5
1f960 20 74 68 72 6f 75 67 68 20 37 2c 20 74 68 65 20   through 7, the 
1f970 22 54 22 20 69 73 20 61 20 6c 69 74 65 72 61 6c  "T" is a literal
1f980 20 63 68 61 72 61 63 74 65 72 20 73 65 70 61 72   character separ
1f990 61 74 69 6e 67 20 0a 74 68 65 20 64 61 74 65 20  ating .the date 
1f9a0 61 6e 64 20 74 68 65 20 74 69 6d 65 2c 20 61 73  and the time, as
1f9b0 20 72 65 71 75 69 72 65 64 20 62 79 20 0a 5b 68   required by .[h
1f9c0 74 74 70 3a 2f 2f 77 77 77 2e 77 33 63 2e 6f 72  ttp://www.w3c.or
1f9d0 67 2f 54 52 2f 4e 4f 54 45 2d 64 61 74 65 74 69  g/TR/NOTE-dateti
1f9e0 6d 65 20 7c 20 49 53 4f 2d 38 36 30 31 5d 2e 20  me | ISO-8601]. 
1f9f0 0a 5e 46 6f 72 6d 61 74 73 20 38 20 74 68 72 6f  .^Formats 8 thro
1fa00 75 67 68 20 31 30 20 74 68 61 74 20 73 70 65 63  ugh 10 that spec
1fa10 69 66 79 20 6f 6e 6c 79 20 61 20 74 69 6d 65 20  ify only a time 
1fa20 61 73 73 75 6d 65 20 61 20 64 61 74 65 20 6f 66  assume a date of
1fa30 20 0a 32 30 30 30 2d 30 31 2d 30 31 2e 20 46 6f   .2000-01-01. Fo
1fa40 72 6d 61 74 20 31 31 2c 20 74 68 65 20 73 74 72  rmat 11, the str
1fa50 69 6e 67 20 27 6e 6f 77 27 2c 20 69 73 20 63 6f  ing 'now', is co
1fa60 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nverted into the
1fa70 20 0a 63 75 72 72 65 6e 74 20 64 61 74 65 20 61   .current date a
1fa80 6e 64 20 74 69 6d 65 20 61 73 20 6f 62 74 61 69  nd time as obtai
1fa90 6e 65 64 20 66 72 6f 6d 20 74 68 65 20 78 43 75  ned from the xCu
1faa0 72 72 65 6e 74 54 69 6d 65 20 6d 65 74 68 6f 64  rrentTime method
1fab0 0a 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33  .of the [sqlite3
1fac0 5f 76 66 73 5d 20 6f 62 6a 65 63 74 20 69 6e 20  _vfs] object in 
1fad0 75 73 65 2e 0a 5e 54 68 65 20 27 6e 6f 77 27 20  use..^The 'now' 
1fae0 61 72 67 75 6d 65 6e 74 20 74 6f 20 64 61 74 65  argument to date
1faf0 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69   and time functi
1fb00 6f 6e 73 20 61 6c 77 61 79 73 20 72 65 74 75 72  ons always retur
1fb10 6e 73 20 65 78 61 63 74 6c 79 20 74 68 65 0a 73  ns exactly the.s
1fb20 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 6d 75  ame value for mu
1fb30 6c 74 69 70 6c 65 20 69 6e 76 6f 63 61 74 69 6f  ltiple invocatio
1fb40 6e 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ns within the sa
1fb50 6d 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70  me [sqlite3_step
1fb60 28 29 5d 20 63 61 6c 6c 2e 0a 5e 5b 68 74 74 70  ()] call..^[http
1fb70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e  ://en.wikipedia.
1fb80 6f 72 67 2f 77 69 6b 69 2f 43 6f 6f 72 64 69 6e  org/wiki/Coordin
1fb90 61 74 65 64 5f 55 6e 69 76 65 72 73 61 6c 5f 54  ated_Universal_T
1fba0 69 6d 65 20 7c 20 55 6e 69 76 65 72 73 61 6c 20  ime | Universal 
1fbb0 43 6f 6f 72 64 69 6e 61 74 65 64 20 54 69 6d 65  Coordinated Time
1fbc0 20 28 55 54 43 29 5d 20 69 73 20 75 73 65 64 2e   (UTC)] is used.
1fbd0 20 0a 5e 46 6f 72 6d 61 74 20 31 32 20 69 73 20   .^Format 12 is 
1fbe0 74 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  the .[http://en.
1fbf0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
1fc00 6b 69 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20  ki/Julian_day | 
1fc10 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
1fc20 72 5d 0a 65 78 70 72 65 73 73 65 64 20 61 73 20  r].expressed as 
1fc30 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
1fc40 20 76 61 6c 75 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70   value..</p>..<p
1fc50 3e 0a 46 6f 72 6d 61 74 73 20 32 20 74 68 72 6f  >.Formats 2 thro
1fc60 75 67 68 20 31 30 20 6d 61 79 20 62 65 20 6f 70  ugh 10 may be op
1fc70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
1fc80 64 20 62 79 20 61 20 74 69 6d 65 7a 6f 6e 65 20  d by a timezone 
1fc90 69 6e 64 69 63 61 74 6f 72 20 6f 66 20 74 68 65  indicator of the
1fca0 20 66 6f 72 6d 0a 22 3c 69 3e 26 23 39 31 3b 2b   form."<i>&#91;+
1fcb0 2d 26 23 39 33 3b 48 48 3a 4d 4d 3c 2f 69 3e 22  -&#93;HH:MM</i>"
1fcc0 20 6f 72 20 6a 75 73 74 20 22 3c 69 3e 5a 3c 2f   or just "<i>Z</
1fcd0 69 3e 22 2e 20 20 54 68 65 20 64 61 74 65 20 61  i>".  The date a
1fce0 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  nd time function
1fcf0 73 20 75 73 65 20 55 54 43 20 6f 72 20 22 7a 75  s use UTC or "zu
1fd00 6c 75 22 0a 74 69 6d 65 20 69 6e 74 65 72 6e 61  lu".time interna
1fd10 6c 6c 79 2c 20 61 6e 64 20 73 6f 20 74 68 65 20  lly, and so the 
1fd20 22 5a 22 20 73 75 66 66 69 78 20 69 73 20 61 20  "Z" suffix is a 
1fd30 6e 6f 2d 6f 70 2e 20 20 41 6e 79 20 6e 6f 6e 2d  no-op.  Any non-
1fd40 7a 65 72 6f 20 22 48 48 3a 4d 4d 22 20 73 75 66  zero "HH:MM" suf
1fd50 66 69 78 20 69 73 0a 73 75 62 74 72 61 63 74 65  fix is.subtracte
1fd60 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 69 63  d from the indic
1fd70 61 74 65 64 20 64 61 74 65 20 61 6e 64 20 74 69  ated date and ti
1fd80 6d 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  me in order to c
1fd90 6f 6d 70 75 74 65 20 7a 75 6c 75 20 74 69 6d 65  ompute zulu time
1fda0 2e 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61  ..For example, a
1fdb0 6c 6c 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ll of the follow
1fdc0 69 6e 67 20 74 69 6d 65 20 73 74 72 69 6e 67 73  ing time strings
1fdd0 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a   are equivalent:
1fde0 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
1fdf0 74 65 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20 30  te>.2013-10-07 0
1fe00 38 3a 32 33 3a 31 39 2e 31 32 30 3c 62 72 3e 0a  8:23:19.120<br>.
1fe10 32 30 31 33 2d 31 30 2d 30 37 54 30 38 3a 32 33  2013-10-07T08:23
1fe20 3a 31 39 2e 31 32 30 5a 3c 62 72 3e 0a 32 30 31  :19.120Z<br>.201
1fe30 33 2d 31 30 2d 30 37 20 30 34 3a 32 33 3a 31 39  3-10-07 04:23:19
1fe40 2e 31 32 30 2d 30 34 3a 30 30 3c 62 72 3e 0a 32  .120-04:00<br>.2
1fe50 34 35 36 35 37 32 2e 38 34 39 35 32 36 38 35 0a  456572.84952685.
1fe60 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
1fe70 70 3e 0a 5e 28 49 6e 20 66 6f 72 6d 61 74 73 20  p>.^(In formats 
1fe80 34 2c 20 37 2c 20 61 6e 64 20 31 30 2c 20 74 68  4, 7, and 10, th
1fe90 65 20 66 72 61 63 74 69 6f 6e 61 6c 20 73 65 63  e fractional sec
1fea0 6f 6e 64 73 20 76 61 6c 75 65 20 53 53 2e 53 53  onds value SS.SS
1feb0 53 20 63 61 6e 20 68 61 76 65 0a 6f 6e 65 20 6f  S can have.one o
1fec0 72 20 6d 6f 72 65 20 64 69 67 69 74 73 20 66 6f  r more digits fo
1fed0 6c 6c 6f 77 69 6e 67 20 74 68 65 20 64 65 63 69  llowing the deci
1fee0 6d 61 6c 20 70 6f 69 6e 74 2e 20 20 45 78 61 63  mal point.  Exac
1fef0 74 6c 79 20 74 68 72 65 65 20 64 69 67 69 74 73  tly three digits
1ff00 20 61 72 65 0a 73 68 6f 77 6e 20 69 6e 20 74 68   are.shown in th
1ff10 65 20 65 78 61 6d 70 6c 65 73 20 62 65 63 61 75  e examples becau
1ff20 73 65 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73  se only the firs
1ff30 74 20 74 68 72 65 65 20 64 69 67 69 74 73 20 61  t three digits a
1ff40 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 74  re significant.t
1ff50 6f 20 74 68 65 20 72 65 73 75 6c 74 2c 20 62 75  o the result, bu
1ff60 74 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69  t the input stri
1ff70 6e 67 20 63 61 6e 20 68 61 76 65 20 66 65 77 65  ng can have fewe
1ff80 72 20 6f 72 20 6d 6f 72 65 20 74 68 61 6e 20 74  r or more than t
1ff90 68 72 65 65 20 64 69 67 69 74 73 0a 61 6e 64 20  hree digits.and 
1ffa0 74 68 65 20 64 61 74 65 2f 74 69 6d 65 20 66 75  the date/time fu
1ffb0 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 74 69  nctions will sti
1ffc0 6c 6c 20 6f 70 65 72 61 74 65 20 63 6f 72 72 65  ll operate corre
1ffd0 63 74 6c 79 2e 29 5e 0a 53 69 6d 69 6c 61 72 6c  ctly.)^.Similarl
1ffe0 79 2c 20 66 6f 72 6d 61 74 20 31 32 20 69 73 20  y, format 12 is 
1fff0 73 68 6f 77 6e 20 77 69 74 68 20 31 30 20 73 69  shown with 10 si
20000 67 6e 69 66 69 63 61 6e 74 20 64 69 67 69 74 73  gnificant digits
20010 2c 20 62 75 74 20 74 68 65 20 64 61 74 65 2f 74  , but the date/t
20020 69 6d 65 0a 66 75 6e 63 74 69 6f 6e 73 20 77 69  ime.functions wi
20030 6c 6c 20 72 65 61 6c 6c 79 20 61 63 63 65 70 74  ll really accept
20040 20 61 73 20 6d 61 6e 79 20 6f 72 20 61 73 20 66   as many or as f
20050 65 77 20 64 69 67 69 74 73 20 61 73 20 61 72 65  ew digits as are
20060 20 6e 65 63 65 73 73 61 72 79 20 74 6f 0a 72 65   necessary to.re
20070 70 72 65 73 65 6e 74 20 74 68 65 20 4a 75 6c 69  present the Juli
20080 61 6e 20 64 61 79 20 6e 75 6d 62 65 72 2e 0a 3c  an day number..<
20090 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f 64 69 66 69 65  /p>..<h3>Modifie
200a0 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  rs</h3>..<p>^The
200b0 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63 61 6e   time string can
200c0 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
200d0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 6d 6f 64  zero or more mod
200e0 69 66 69 65 72 73 20 74 68 61 74 20 0a 61 6c 74  ifiers that .alt
200f0 65 72 20 64 61 74 65 20 61 6e 64 2f 6f 72 20 74  er date and/or t
20100 69 6d 65 2e 20 5e 45 61 63 68 20 6d 6f 64 69 66  ime. ^Each modif
20110 69 65 72 0a 69 73 20 61 20 74 72 61 6e 73 66 6f  ier.is a transfo
20120 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  rmation that is 
20130 61 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20 74  applied to the t
20140 69 6d 65 20 76 61 6c 75 65 20 74 6f 20 69 74 73  ime value to its
20150 20 6c 65 66 74 2e 0a 5e 4d 6f 64 69 66 69 65 72   left..^Modifier
20160 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 66 72  s are applied fr
20170 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
20180 3b 20 6f 72 64 65 72 20 69 73 20 69 6d 70 6f 72  ; order is impor
20190 74 61 6e 74 2e 0a 5e 28 54 68 65 20 61 76 61 69  tant..^(The avai
201a0 6c 61 62 6c 65 20 6d 6f 64 69 66 69 65 72 73 20  lable modifiers 
201b0 61 72 65 20 61 73 20 66 6f 6c 6c 6f 77 73 2e 3c  are as follows.<
201c0 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20 4e  /p>..<ol>.<li> N
201d0 4e 4e 20 64 61 79 73 0a 3c 6c 69 3e 20 4e 4e 4e  NN days.<li> NNN
201e0 20 68 6f 75 72 73 0a 3c 6c 69 3e 20 4e 4e 4e 20   hours.<li> NNN 
201f0 6d 69 6e 75 74 65 73 0a 3c 6c 69 3e 20 4e 4e 4e  minutes.<li> NNN
20200 2e 4e 4e 4e 4e 20 73 65 63 6f 6e 64 73 0a 3c 6c  .NNNN seconds.<l
20210 69 3e 20 4e 4e 4e 20 6d 6f 6e 74 68 73 0a 3c 6c  i> NNN months.<l
20220 69 3e 20 4e 4e 4e 20 79 65 61 72 73 0a 3c 6c 69  i> NNN years.<li
20230 3e 20 73 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68  > start of month
20240 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20 79  .<li> start of y
20250 65 61 72 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f  ear.<li> start o
20260 66 20 64 61 79 0a 3c 6c 69 3e 20 77 65 65 6b 64  f day.<li> weekd
20270 61 79 20 4e 0a 3c 6c 69 3e 20 75 6e 69 78 65 70  ay N.<li> unixep
20280 6f 63 68 0a 3c 6c 69 3e 20 6c 6f 63 61 6c 74 69  och.<li> localti
20290 6d 65 0a 3c 6c 69 3e 20 75 74 63 20 0a 3c 2f 6f  me.<li> utc .</o
202a0 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 66 69  l>)^..<p>^The fi
202b0 72 73 74 20 73 69 78 20 6d 6f 64 69 66 69 65 72  rst six modifier
202c0 73 20 28 31 20 74 68 72 6f 75 67 68 20 36 29 20  s (1 through 6) 
202d0 0a 73 69 6d 70 6c 79 20 61 64 64 20 74 68 65 20  .simply add the 
202e0 73 70 65 63 69 66 69 65 64 20 61 6d 6f 75 6e 74  specified amount
202f0 20 6f 66 20 74 69 6d 65 20 74 6f 20 74 68 65 20   of time to the 
20300 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 0a 73  date and time .s
20310 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
20320 70 72 65 63 65 64 69 6e 67 20 74 69 6d 65 73 74  preceding timest
20330 72 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66 69 65  ring and modifie
20340 72 73 2e 0a 5e 54 68 65 20 27 73 27 20 63 68 61  rs..^The 's' cha
20350 72 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e  racter at the en
20360 64 20 6f 66 20 74 68 65 20 6d 6f 64 69 66 69 65  d of the modifie
20370 72 20 6e 61 6d 65 73 20 69 73 20 6f 70 74 69 6f  r names is optio
20380 6e 61 6c 2e 0a 5e 4e 6f 74 65 20 74 68 61 74 20  nal..^Note that 
20390 22 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 6d 6f 6e  "&plusmn;NNN mon
203a0 74 68 73 22 20 77 6f 72 6b 73 20 62 79 20 72 65  ths" works by re
203b0 6e 64 65 72 69 6e 67 20 74 68 65 20 6f 72 69 67  ndering the orig
203c0 69 6e 61 6c 20 64 61 74 65 20 69 6e 74 6f 0a 74  inal date into.t
203d0 68 65 20 59 59 59 59 2d 4d 4d 2d 44 44 20 66 6f  he YYYY-MM-DD fo
203e0 72 6d 61 74 2c 20 61 64 64 69 6e 67 20 74 68 65  rmat, adding the
203f0 20 26 70 6c 75 73 6d 6e 3b 4e 4e 4e 20 74 6f 20   &plusmn;NNN to 
20400 74 68 65 20 4d 4d 20 6d 6f 6e 74 68 20 76 61 6c  the MM month val
20410 75 65 2c 20 74 68 65 6e 0a 6e 6f 72 6d 61 6c 69  ue, then.normali
20420 7a 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2e  zing the result.
20430 20 20 5e 54 68 75 73 2c 20 66 6f 72 20 65 78 61    ^Thus, for exa
20440 6d 70 6c 65 2c 20 74 68 65 20 64 61 74 61 20 32  mple, the data 2
20450 30 30 31 2d 30 33 2d 33 31 20 6d 6f 64 69 66 69  001-03-31 modifi
20460 65 64 0a 62 79 20 27 2b 31 20 6d 6f 6e 74 68 27  ed.by '+1 month'
20470 20 69 6e 69 74 69 61 6c 6c 79 20 79 69 65 6c 64   initially yield
20480 73 20 32 30 30 31 2d 30 34 2d 33 31 2c 20 62 75  s 2001-04-31, bu
20490 74 20 41 70 72 69 6c 20 6f 6e 6c 79 20 68 61 73  t April only has
204a0 20 33 30 20 64 61 79 73 0a 73 6f 20 74 68 65 20   30 days.so the 
204b0 64 61 74 65 20 69 73 20 6e 6f 72 6d 61 6c 69 7a  date is normaliz
204c0 65 64 20 74 6f 20 32 30 30 31 2d 30 35 2d 30 31  ed to 2001-05-01
204d0 2e 20 20 5e 41 20 73 69 6d 69 6c 61 72 20 65 66  .  ^A similar ef
204e0 66 65 63 74 20 6f 63 63 75 72 73 20 77 68 65 6e  fect occurs when
204f0 0a 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 61  .the original da
20500 74 65 20 69 73 20 46 65 62 72 75 61 72 79 20 32  te is February 2
20510 39 20 6f 66 20 61 20 6c 65 61 70 79 65 61 72 20  9 of a leapyear 
20520 61 6e 64 20 74 68 65 20 6d 6f 64 69 66 69 65 72  and the modifier
20530 20 69 73 0a 26 70 6c 75 73 6d 6e 3b 4e 20 79 65   is.&plusmn;N ye
20540 61 72 73 20 77 68 65 72 65 20 4e 20 69 73 20 6e  ars where N is n
20550 6f 74 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66  ot a multiple of
20560 20 66 6f 75 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   four.</p>..<p>^
20570 54 68 65 20 22 73 74 61 72 74 20 6f 66 22 20 6d  The "start of" m
20580 6f 64 69 66 69 65 72 73 20 28 37 20 74 68 72 6f  odifiers (7 thro
20590 75 67 68 20 39 29 20 73 68 69 66 74 20 74 68 65  ugh 9) shift the
205a0 20 64 61 74 65 20 62 61 63 6b 77 61 72 64 73 20   date backwards 
205b0 0a 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  .to the beginnin
205c0 67 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  g of the current
205d0 20 6d 6f 6e 74 68 2c 20 79 65 61 72 20 6f 72 20   month, year or 
205e0 64 61 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  day.</p>..<p>^Th
205f0 65 20 22 77 65 65 6b 64 61 79 22 20 6d 6f 64 69  e "weekday" modi
20600 66 69 65 72 20 61 64 76 61 6e 63 65 73 20 74 68  fier advances th
20610 65 20 64 61 74 65 20 66 6f 72 77 61 72 64 2c 20  e date forward, 
20620 69 66 20 6e 65 63 65 73 73 61 72 79 2c 0a 74 6f  if necessary,.to
20630 20 74 68 65 20 6e 65 78 74 20 64 61 74 65 20 77   the next date w
20640 68 65 72 65 20 74 68 65 20 77 65 65 6b 64 61 79  here the weekday
20650 20 6e 75 6d 62 65 72 20 69 73 20 4e 2e 20 53 75   number is N. Su
20660 6e 64 61 79 20 69 73 20 30 2c 20 4d 6f 6e 64 61  nday is 0, Monda
20670 79 20 69 73 20 31 2c 0a 61 6e 64 20 73 6f 20 66  y is 1,.and so f
20680 6f 72 74 68 2e 0a 5e 49 66 20 74 68 65 20 64 61  orth..^If the da
20690 74 65 20 69 73 20 61 6c 72 65 61 64 79 20 6f 6e  te is already on
206a0 20 74 68 65 20 64 65 73 69 72 65 64 20 77 65 65   the desired wee
206b0 6b 64 61 79 2c 20 74 68 65 20 22 77 65 65 6b 64  kday, the "weekd
206c0 61 79 22 20 6d 6f 64 69 66 69 65 72 0a 6c 65 61  ay" modifier.lea
206d0 76 65 73 20 74 68 65 20 64 61 74 65 20 75 6e 63  ves the date unc
206e0 68 61 6e 67 65 64 2e 20 20 3c 2f 70 3e 0a 0a 3c  hanged.  </p>..<
206f0 70 3e 5e 54 68 65 20 22 75 6e 69 78 65 70 6f 63  p>^The "unixepoc
20700 68 22 20 6d 6f 64 69 66 69 65 72 20 28 31 31 29  h" modifier (11)
20710 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69 66 20 69   only works if i
20720 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  t immediately fo
20730 6c 6c 6f 77 73 20 0a 61 20 74 69 6d 65 73 74 72  llows .a timestr
20740 69 6e 67 20 69 6e 20 74 68 65 20 44 44 44 44 44  ing in the DDDDD
20750 44 44 44 44 44 20 66 6f 72 6d 61 74 2e 20 0a 5e  DDDDD format. .^
20760 54 68 69 73 20 6d 6f 64 69 66 69 65 72 20 63 61  This modifier ca
20770 75 73 65 73 20 74 68 65 20 44 44 44 44 44 44 44  uses the DDDDDDD
20780 44 44 44 20 74 6f 20 62 65 20 69 6e 74 65 72 70  DDD to be interp
20790 72 65 74 65 64 20 6e 6f 74 20 0a 61 73 20 61 20  reted not .as a 
207a0 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62 65  Julian day numbe
207b0 72 20 61 73 20 69 74 20 6e 6f 72 6d 61 6c 6c 79  r as it normally
207c0 20 77 6f 75 6c 64 20 62 65 2c 20 62 75 74 20 61   would be, but a
207d0 73 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b  s.[http://en.wik
207e0 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f  ipedia.org/wiki/
207f0 55 6e 69 78 5f 74 69 6d 65 20 7c 20 55 6e 69 78  Unix_time | Unix
20800 20 54 69 6d 65 5d 20 2d 20 74 68 65 20 0a 6e 75   Time] - the .nu
20810 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20  mber of seconds 
20820 73 69 6e 63 65 20 31 39 37 30 2e 20 20 49 66 20  since 1970.  If 
20830 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  the "unixepoch" 
20840 6d 6f 64 69 66 69 65 72 20 64 6f 65 73 20 6e 6f  modifier does no
20850 74 0a 66 6f 6c 6c 6f 77 20 61 20 74 69 6d 65 73  t.follow a times
20860 74 72 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 72  tring of the for
20870 6d 20 44 44 44 44 44 44 44 44 44 44 20 77 68 69  m DDDDDDDDDD whi
20880 63 68 20 65 78 70 72 65 73 73 65 73 20 74 68 65  ch expresses the
20890 20 6e 75 6d 62 65 72 0a 6f 66 20 73 65 63 6f 6e   number.of secon
208a0 64 73 20 73 69 6e 63 65 20 31 39 37 30 20 6f 72  ds since 1970 or
208b0 20 69 66 20 6f 74 68 65 72 20 6d 6f 64 69 66 69   if other modifi
208c0 65 72 73 0a 73 65 70 61 72 61 74 65 20 74 68 65  ers.separate the
208d0 20 22 75 6e 69 78 65 70 6f 63 68 22 20 6d 6f 64   "unixepoch" mod
208e0 69 66 69 65 72 20 66 72 6f 6d 20 70 72 69 6f 72  ifier from prior
208f0 20 44 44 44 44 44 44 44 44 44 44 20 74 68 65 6e   DDDDDDDDDD then
20900 20 74 68 65 0a 62 65 68 61 76 69 6f 72 20 69 73   the.behavior is
20910 20 75 6e 64 65 66 69 6e 65 64 2e 0a 46 6f 72 20   undefined..For 
20920 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  SQLite versions 
20930 62 65 66 6f 72 65 20 33 2e 31 36 2e 30 20 28 5b  before 3.16.0 ([
20940 64 61 74 65 6f 66 3a 33 2e 31 36 2e 30 5d 29 2c  dateof:3.16.0]),
20950 20 0a 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68   .the "unixepoch
20960 22 20 6d 6f 64 69 66 69 65 72 20 6f 6e 6c 79 20  " modifier only 
20970 77 6f 72 6b 73 20 66 6f 72 0a 64 61 74 65 73 20  works for.dates 
20980 62 65 74 77 65 65 6e 20 30 30 30 30 2d 30 31 2d  between 0000-01-
20990 30 31 20 30 30 3a 30 30 3a 30 30 20 61 6e 64 20  01 00:00:00 and 
209a0 35 33 35 32 2d 31 31 2d 30 31 20 31 30 3a 35 32  5352-11-01 10:52
209b0 3a 34 37 20 28 75 6e 69 78 20 74 69 6d 65 73 0a  :47 (unix times.
209c0 6f 66 20 2d 36 32 31 36 37 32 31 39 32 30 30 20  of -62167219200 
209d0 74 68 72 6f 75 67 68 20 31 30 36 37 35 31 39 39  through 10675199
209e0 31 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  1167).</p>..<tcl
209f0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c 6f 63  >hd_fragment loc
20a00 61 6c 74 69 6d 65 20 7b 6c 6f 63 61 6c 74 69 6d  altime {localtim
20a10 65 20 6d 6f 64 69 66 69 65 72 7d 20 7b 27 75 74  e modifier} {'ut
20a20 63 27 20 6d 6f 64 69 66 69 65 72 7d 3c 2f 74 63  c' modifier}</tc
20a30 6c 3e 0a 3c 70 3e 5e 54 68 65 20 22 6c 6f 63 61  l>.<p>^The "loca
20a40 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69 65 72 20  ltime" modifier 
20a50 28 31 32 29 20 61 73 73 75 6d 65 73 20 74 68 65  (12) assumes the
20a60 20 74 69 6d 65 20 73 74 72 69 6e 67 20 74 6f 20   time string to 
20a70 69 74 73 20 6c 65 66 74 20 69 73 20 69 6e 0a 55  its left is in.U
20a80 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72 64 69 6e  niversal Coordin
20a90 61 74 65 64 20 54 69 6d 65 20 28 55 54 43 29 20  ated Time (UTC) 
20aa0 61 6e 64 20 61 64 6a 75 73 74 73 20 74 68 65 20  and adjusts the 
20ab0 74 69 6d 65 0a 73 74 72 69 6e 67 20 73 6f 20 74  time.string so t
20ac0 68 61 74 20 69 74 20 64 69 73 70 6c 61 79 73 20  hat it displays 
20ad0 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49 66 20 22  localtime.  If "
20ae0 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f 6c 6c 6f  localtime".follo
20af0 77 73 20 61 20 74 69 6d 65 20 74 68 61 74 20 69  ws a time that i
20b00 73 20 6e 6f 74 20 55 54 43 2c 20 74 68 65 6e 20  s not UTC, then 
20b10 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
20b20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28 54 68 65  undefined..^(The
20b30 20 22 75 74 63 22 20 6d 6f 64 69 66 69 65 72 20   "utc" modifier 
20b40 69 73 20 74 68 65 20 6f 70 70 6f 73 69 74 65 20  is the opposite 
20b50 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 2e 20  of "localtime". 
20b60 20 0a 22 75 74 63 22 20 61 73 73 75 6d 65 73 20   ."utc" assumes 
20b70 74 68 61 74 20 74 68 65 20 73 74 72 69 6e 67 0a  that the string.
20b80 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69  to its left is i
20b90 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74 69 6d 65  n the local time
20ba0 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75 73 74 73  zone and adjusts
20bb0 20 74 68 61 74 20 73 74 72 69 6e 67 20 74 6f 20   that string to 
20bc0 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a 49 66 20  be in UTC.)^.If 
20bd0 74 68 65 20 70 72 69 6f 72 20 73 74 72 69 6e 67  the prior string
20be0 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f 63 61 6c   is not in local
20bf0 74 69 6d 65 2c 20 74 68 65 6e 20 74 68 65 20 72  time, then the r
20c00 65 73 75 6c 74 20 6f 66 20 22 75 74 63 22 20 69  esult of "utc" i
20c10 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70 3e  s.undefined.</p>
20c20 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65 73 3c 2f  ..<h3>Examples</
20c30 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74  h3>..^(<p>Comput
20c40 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 61  e the current da
20c50 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  te.<p>..<blockqu
20c60 6f 74 65 3e 53 45 4c 45 43 54 20 64 61 74 65 28  ote>SELECT date(
20c70 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63 6b 71 75  'now');</blockqu
20c80 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
20c90 70 75 74 65 20 74 68 65 20 6c 61 73 74 20 64 61  pute the last da
20ca0 79 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  y of the current
20cb0 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a 3c 62 6c   month.</p>..<bl
20cc0 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20  ockquote>SELECT 
20cd0 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61 72  date('now','star
20ce0 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27 2b 31 20  t of month','+1 
20cf0 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61 79 27 29  month','-1 day')
20d00 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  ;.</blockquote>)
20d10 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20  ^..^(<p>Compute 
20d20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69 6d  the date and tim
20d30 65 20 67 69 76 65 6e 20 61 20 75 6e 69 78 20 74  e given a unix t
20d40 69 6d 65 73 74 61 6d 70 20 31 30 39 32 39 34 31  imestamp 1092941
20d50 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  466.</p>..<block
20d60 71 75 6f 74 65 3e 0a 20 20 20 20 53 45 4c 45 43  quote>.    SELEC
20d70 54 20 64 61 74 65 74 69 6d 65 28 31 30 39 32 39  T datetime(10929
20d80 34 31 34 36 36 2c 20 27 75 6e 69 78 65 70 6f 63  41466, 'unixepoc
20d90 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  h');.</blockquot
20da0 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
20db0 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  te the date and 
20dc0 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69  time given a uni
20dd0 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32  x timestamp 1092
20de0 39 34 31 34 36 36 2c 20 61 6e 64 20 0a 63 6f 6d  941466, and .com
20df0 70 65 6e 73 61 74 65 20 66 6f 72 20 79 6f 75 72  pensate for your
20e00 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f 6e 65 2e   local timezone.
20e10 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
20e20 65 3e 0a 20 20 53 45 4c 45 43 54 20 64 61 74 65  e>.  SELECT date
20e30 74 69 6d 65 28 31 30 39 32 39 34 31 34 36 36 2c  time(1092941466,
20e40 20 27 75 6e 69 78 65 70 6f 63 68 27 2c 20 27 6c   'unixepoch', 'l
20e50 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c 2f 62 6c  ocaltime');.</bl
20e60 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c  ockquote>)^..^(<
20e70 70 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 63 75  p>Compute the cu
20e80 72 72 65 6e 74 20 75 6e 69 78 20 74 69 6d 65 73  rrent unix times
20e90 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  tamp.</p>..<bloc
20ea0 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
20eb0 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
20ec0 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  now');.</blockqu
20ed0 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d  ote>)^..^(<p>Com
20ee0 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  pute the number 
20ef0 6f 66 20 64 61 79 73 20 73 69 6e 63 65 20 74 68  of days since th
20f00 65 20 73 69 67 6e 69 6e 67 20 6f 66 20 74 68 65  e signing of the
20f10 20 55 53 20 44 65 63 6c 61 72 61 74 69 6f 6e 0a   US Declaration.
20f20 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e 63 65 2e  of Independence.
20f30 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
20f40 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a 75 6c 69  e>.  SELECT juli
20f50 61 6e 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 6a  anday('now') - j
20f60 75 6c 69 61 6e 64 61 79 28 27 31 37 37 36 2d 30  ulianday('1776-0
20f70 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  7-04');.</blockq
20f80 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
20f90 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62 65 72  mpute the number
20fa0 20 6f 66 20 73 65 63 6f 6e 64 73 20 73 69 6e 63   of seconds sinc
20fb0 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 6d  e a particular m
20fc0 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34 3a 3c 2f  oment in 2004:</
20fd0 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
20fe0 0a 20 20 53 45 4c 45 43 54 20 73 74 72 66 74 69  .  SELECT strfti
20ff0 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27 29 20 2d  me('%s','now') -
21000 20 73 74 72 66 74 69 6d 65 28 27 25 73 27 2c 27   strftime('%s','
21010 32 30 30 34 2d 30 31 2d 30 31 20 30 32 3a 33 34  2004-01-01 02:34
21020 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75  :56');.</blockqu
21030 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 0a 43 6f  ote>)^..^(<p>.Co
21040 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 6f  mpute the date o
21050 66 20 74 68 65 20 66 69 72 73 74 20 54 75 65 73  f the first Tues
21060 64 61 79 20 69 6e 20 4f 63 74 6f 62 65 72 0a 66  day in October.f
21070 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 79  or the current y
21080 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ear..</p>..<bloc
21090 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54  kquote>.  SELECT
210a0 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73 74 61   date('now','sta
210b0 72 74 20 6f 66 20 79 65 61 72 27 2c 27 2b 39 20  rt of year','+9 
210c0 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b 64 61 79  months','weekday
210d0 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f   2');.</blockquo
210e0 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70  te>)^..^(<p>Comp
210f0 75 74 65 20 74 68 65 20 74 69 6d 65 20 73 69 6e  ute the time sin
21100 63 65 20 74 68 65 20 75 6e 69 78 20 65 70 6f 63  ce the unix epoc
21110 68 20 69 6e 20 73 65 63 6f 6e 64 73 20 0a 28 6c  h in seconds .(l
21120 69 6b 65 20 73 74 72 66 74 69 6d 65 28 27 25 73  ike strftime('%s
21130 27 2c 27 6e 6f 77 27 29 20 65 78 63 65 70 74 20  ','now') except 
21140 69 6e 63 6c 75 64 65 73 20 66 72 61 63 74 69 6f  includes fractio
21150 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70 3e 0a 0a  nal part):</p>..
21160 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53  <blockquote>.  S
21170 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e 64 61 79  ELECT (julianday
21180 28 27 6e 6f 77 27 29 20 2d 20 32 34 34 30 35 38  ('now') - 244058
21190 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b 0a 3c 2f  7.5)*86400.0;.</
211a0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
211b0 68 33 3e 43 61 76 65 61 74 73 20 41 6e 64 20 42  h3>Caveats And B
211c0 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ugs</h3>..<p>The
211d0 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 6f 66 20   computation of 
211e0 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65 70 65 6e  local time depen
211f0 64 73 20 68 65 61 76 69 6c 79 20 6f 6e 20 74 68  ds heavily on th
21200 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f 6c 69 74  e whim .of polit
21210 69 63 69 61 6e 73 20 61 6e 64 20 69 73 20 74 68  icians and is th
21220 75 73 20 64 69 66 66 69 63 75 6c 74 20 74 6f 20  us difficult to 
21230 67 65 74 20 63 6f 72 72 65 63 74 20 66 6f 72 20  get correct for 
21240 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e 20 5e 49  .all locales. ^I
21250 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74  n this implement
21260 61 74 69 6f 6e 2c 20 74 68 65 20 73 74 61 6e 64  ation, the stand
21270 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 0a 66  ard C library .f
21280 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c 74 69 6d  unction localtim
21290 65 5f 72 28 29 20 69 73 20 75 73 65 64 20 74 6f  e_r() is used to
212a0 20 61 73 73 69 73 74 20 69 6e 20 74 68 65 20 63   assist in the c
212b0 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66 20 0a 6c  alculation of .l
212c0 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e 28 54 68  ocal time.  ^(Th
212d0 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f 72 28 29  e .localtime_r()
212e0 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e 6f 72 6d   C function norm
212f0 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ally only works 
21300 66 6f 72 20 79 65 61 72 73 0a 62 65 74 77 65 65  for years.betwee
21310 6e 20 31 39 37 30 20 61 6e 64 20 32 30 33 37 2e  n 1970 and 2037.
21320 20 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73 69   For dates outsi
21330 64 65 20 74 68 69 73 20 72 61 6e 67 65 2c 20 53  de this range, S
21340 51 4c 69 74 65 20 0a 61 74 74 65 6d 70 74 73 20  QLite .attempts 
21350 74 6f 20 6d 61 70 20 74 68 65 20 79 65 61 72 20  to map the year 
21360 69 6e 74 6f 20 61 6e 20 65 71 75 69 76 61 6c 65  into an equivale
21370 6e 74 20 79 65 61 72 20 77 69 74 68 69 6e 20 0a  nt year within .
21380 74 68 69 73 20 72 61 6e 67 65 2c 20 64 6f 20 74  this range, do t
21390 68 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2c 20  he calculation, 
213a0 74 68 65 6e 20 6d 61 70 20 74 68 65 20 79 65 61  then map the yea
213b0 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e 0a 0a 0a  r back.)^</p>...
213c0 3c 70 3e 5e 28 54 68 65 73 65 20 66 75 6e 63 74  <p>^(These funct
213d0 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66  ions only work f
213e0 6f 72 20 64 61 74 65 73 20 62 65 74 77 65 65 6e  or dates between
213f0 20 30 30 30 30 2d 30 31 2d 30 31 20 30 30 3a 30   0000-01-01 00:0
21400 30 3a 30 30 0a 61 6e 64 20 39 39 39 39 2d 31 32  0:00.and 9999-12
21410 2d 33 31 20 32 33 3a 35 39 3a 35 39 20 28 6a 75  -31 23:59:59 (ju
21420 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d 62 65 72  lidan day number
21430 73 20 31 37 32 31 30 35 39 2e 35 20 74 68 72 6f  s 1721059.5 thro
21440 75 67 68 20 35 33 37 33 34 38 34 2e 35 29 2e 29  ugh 5373484.5).)
21450 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f 75 74 73  ^.For dates outs
21460 69 64 65 20 74 68 61 74 20 72 61 6e 67 65 2c 20  ide that range, 
21470 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
21480 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e 73 20 61  hese.functions a
21490 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 3c 2f 70  re undefined.</p
214a0 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73 74 61 20  >..<p>Non-Vista 
214b0 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d  Windows platform
214c0 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f  s only support o
214d0 6e 65 20 73 65 74 20 6f 66 20 44 53 54 20 72 75  ne set of DST ru
214e0 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f 6e 6c 79  les. .Vista only
214f0 20 73 75 70 70 6f 72 74 73 20 74 77 6f 2e 20 54   supports two. T
21500 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20 74 68 65  herefore, on the
21510 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c 20 0a 68  se platforms, .h
21520 69 73 74 6f 72 69 63 61 6c 20 44 53 54 20 63 61  istorical DST ca
21530 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69 6c 6c 20  lculations will 
21540 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 0a 46  be incorrect. .F
21550 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 20 74  or example, in t
21560 68 65 20 55 53 2c 20 69 6e 20 32 30 30 37 20 74  he US, in 2007 t
21570 68 65 20 44 53 54 20 72 75 6c 65 73 20 63 68 61  he DST rules cha
21580 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69 73 74 61  nged. .Non-Vista
21590 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66 6f 72   Windows platfor
215a0 6d 73 20 61 70 70 6c 79 20 74 68 65 20 6e 65 77  ms apply the new
215b0 20 32 30 30 37 20 44 53 54 20 72 75 6c 65 73 20   2007 DST rules 
215c0 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69 6f 75 73  .to all previous
215d0 20 79 65 61 72 73 20 61 73 20 77 65 6c 6c 2e 20   years as well. 
215e0 56 69 73 74 61 20 64 6f 65 73 20 73 6f 6d 65 77  Vista does somew
215f0 68 61 74 20 62 65 74 74 65 72 0a 67 65 74 74 69  hat better.getti
21600 6e 67 20 72 65 73 75 6c 74 73 20 63 6f 72 72 65  ng results corre
21610 63 74 20 62 61 63 6b 20 74 6f 20 31 39 38 36 2c  ct back to 1986,
21620 20 77 68 65 6e 20 74 68 65 20 72 75 6c 65 73 20   when the rules 
21630 77 65 72 65 20 61 6c 73 6f 20 63 68 61 6e 67 65  were also change
21640 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 69  d.</p>..<p>All i
21650 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75 74 61 74  nternal computat
21660 69 6f 6e 73 20 61 73 73 75 6d 65 20 74 68 65 20  ions assume the 
21670 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
21680 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 47  pedia.org/wiki/G
21690 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65 6e 64 61  regorian_calenda
216a0 72 20 7c 20 47 72 65 67 6f 72 69 61 6e 20 63 61  r | Gregorian ca
216b0 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65 6d 2e 20  lendar].system. 
216c0 20 49 74 20 69 73 20 61 6c 73 6f 20 61 73 73 75   It is also assu
216d0 6d 65 64 20 74 68 61 74 20 65 76 65 72 79 0a 64  med that every.d
216e0 61 79 20 69 73 20 65 78 61 63 74 6c 79 20 38 36  ay is exactly 86
216f0 34 30 30 20 73 65 63 6f 6e 64 73 20 69 6e 20 64  400 seconds in d
21700 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 74  uration.</p>..<t
21710 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
21720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21760 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41 67 67 72  ##.Section {Aggr
21770 65 67 61 74 65 20 46 75 6e 63 74 69 6f 6e 73 7d  egate Functions}
21780 20 61 67 67 66 75 6e 63 20 7b 2a 61 67 67 66 75   aggfunc {*aggfu
21790 6e 63 7d 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  nc}.unset -nocom
217a0 70 6c 61 69 6e 20 63 6f 72 65 66 75 6e 63 73 65  plain corefuncse
217b0 74 0a 0a 66 75 6e 63 64 65 66 20 7b 61 76 67 28  t..funcdef {avg(
217c0 58 29 7d 20 7b 2a 61 76 67 20 7b 61 76 67 28 29  X)} {*avg {avg()
217d0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
217e0 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 61  ion}} {.  ^The a
217f0 76 67 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  vg() function.  
21800 72 65 74 75 72 6e 73 20 74 68 65 20 61 76 65 72  returns the aver
21810 61 67 65 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c  age value of all
21820 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e 58 3c 2f   non-NULL <i>X</
21830 69 3e 20 77 69 74 68 69 6e 20 61 0a 20 20 67 72  i> within a.  gr
21840 6f 75 70 2e 20 20 5e 53 74 72 69 6e 67 20 61 6e  oup.  ^String an
21850 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 20 74 68  d BLOB values th
21860 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f 6b 20 6c  at do not look l
21870 69 6b 65 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ike numbers are.
21880 20 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73    interpreted as
21890 20 30 2e 0a 20 20 5e 54 68 65 20 72 65 73 75 6c   0..  ^The resul
218a0 74 20 6f 66 20 61 76 67 28 29 20 69 73 20 61 6c  t of avg() is al
218b0 77 61 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  ways a floating 
218c0 70 6f 69 6e 74 20 76 61 6c 75 65 20 61 73 20 6c  point value as l
218d0 6f 6e 67 20 61 73 0a 20 20 61 74 20 74 68 65 72  ong as.  at ther
218e0 65 20 69 73 20 61 74 20 6c 65 61 73 74 20 6f 6e  e is at least on
218f0 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74  e non-NULL input
21900 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a 20 20 69   even if all.  i
21910 6e 70 75 74 73 20 61 72 65 20 69 6e 74 65 67 65  nputs are intege
21920 72 73 2e 20 20 5e 54 68 65 20 72 65 73 75 6c 74  rs.  ^The result
21930 20 6f 66 20 61 76 67 28 29 20 69 73 20 4e 55 4c   of avg() is NUL
21940 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  L if and only if
21950 0a 20 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  .  there are no 
21960 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 2e  non-NULL inputs.
21970 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 63    .}..funcdef {c
21980 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74 28 2a 29  ount(X) count(*)
21990 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f 75 6e 74  } {*count {count
219a0 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
219b0 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
219c0 20 63 6f 75 6e 74 28 58 29 20 66 75 6e 63 74 69   count(X) functi
219d0 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20 61 20 63  on returns.  a c
219e0 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e 75 6d 62  ount of the numb
219f0 65 72 20 6f 66 20 74 69 6d 65 73 0a 20 20 74 68  er of times.  th
21a00 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69 73 20 6e  at <i>X</i> is n
21a10 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20 67 72 6f  ot NULL in a gro
21a20 75 70 2e 20 20 5e 54 68 65 20 63 6f 75 6e 74 28  up.  ^The count(
21a30 2a 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 28 77  *) function.  (w
21a40 69 74 68 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73  ith no arguments
21a50 29 20 72 65 74 75 72 6e 73 20 74 68 65 20 74 6f  ) returns the to
21a60 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  tal number of ro
21a70 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ws in the group.
21a80 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 67 72 6f  .}..funcdef {gro
21a90 75 70 5f 63 6f 6e 63 61 74 28 58 29 20 67 72 6f  up_concat(X) gro
21aa0 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59 29 7d 20  up_concat(X,Y)} 
21ab0 7b 0a 20 20 2a 67 72 6f 75 70 5f 63 6f 6e 63 61  {.  *group_conca
21ac0 74 20 7b 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  t {group_concat(
21ad0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
21ae0 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54 68 65  tion}.} {.  ^The
21af0 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 29 20   group_concat() 
21b00 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
21b10 0a 20 20 61 20 73 74 72 69 6e 67 20 77 68 69 63  .  a string whic
21b20 68 20 69 73 20 74 68 65 20 63 6f 6e 63 61 74 65  h is the concate
21b30 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61 6c 6c 20  nation of.  all 
21b40 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20  non-NULL values 
21b50 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20 20 5e 49  of <i>X</i>.  ^I
21b60 66 20 70 61 72 61 6d 65 74 65 72 20 3c 69 3e 59  f parameter <i>Y
21b70 3c 2f 69 3e 20 69 73 20 70 72 65 73 65 6e 74 20  </i> is present 
21b80 74 68 65 6e 0a 20 20 69 74 20 69 73 20 75 73 65  then.  it is use
21b90 64 20 61 73 20 74 68 65 20 73 65 70 61 72 61 74  d as the separat
21ba0 6f 72 0a 20 20 62 65 74 77 65 65 6e 20 69 6e 73  or.  between ins
21bb0 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e 58 3c 2f  tances of <i>X</
21bc0 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61 20 28 22  i>.  ^A comma ("
21bd0 2c 22 29 20 69 73 20 75 73 65 64 20 61 73 20 74  ,") is used as t
21be0 68 65 20 73 65 70 61 72 61 74 6f 72 0a 20 20 69  he separator.  i
21bf0 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73 20 6f 6d  f <i>Y</i> is om
21c00 69 74 74 65 64 2e 20 20 54 68 65 20 6f 72 64 65  itted.  The orde
21c10 72 20 6f 66 20 74 68 65 20 63 6f 6e 63 61 74 65  r of the concate
21c20 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74 73 20 69  nated elements i
21c30 73 0a 20 20 61 72 62 69 74 72 61 72 79 2e 0a 7d  s.  arbitrary..}
21c40 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61 78 28 58  ..funcdef {max(X
21c50 29 7d 20 7b 2a 6d 61 78 41 67 67 46 75 6e 63 20  )} {*maxAggFunc 
21c60 2a 61 67 67 5f 6d 61 78 20 7b 6d 61 78 28 29 20  *agg_max {max() 
21c70 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
21c80 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 61  on}} {.  ^The ma
21c90 78 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  x() aggregate fu
21ca0 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73  nction.  returns
21cb0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 76 61 6c   the maximum val
21cc0 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c 75 65 73  ue of all values
21cd0 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20   in the group.. 
21ce0 20 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 76 61   ^The maximum va
21cf0 6c 75 65 20 69 73 20 74 68 65 20 76 61 6c 75 65  lue is the value
21d00 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65 20 72   that would be r
21d10 65 74 75 72 6e 65 64 20 6c 61 73 74 20 69 6e 20  eturned last in 
21d20 61 6e 0a 20 20 4f 52 44 45 52 20 42 59 20 6f 6e  an.  ORDER BY on
21d30 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e   the same column
21d40 2e 20 20 5e 41 67 67 72 65 67 61 74 65 20 6d 61  .  ^Aggregate ma
21d50 78 28 29 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  x() returns NULL
21d60 20 0a 20 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20   .  if and only 
21d70 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
21d80 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20  non-NULL values 
21d90 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 7d 0a  in the group..}.
21da0 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e 28 58 29  .funcdef {min(X)
21db0 7d 20 7b 2a 6d 69 6e 41 67 67 46 75 6e 63 20 2a  } {*minAggFunc *
21dc0 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28 29 20 61  agg_min {min() a
21dd0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
21de0 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20 6d 69 6e  n}} {.  ^The min
21df0 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
21e00 63 74 69 6f 6e 0a 20 20 72 65 74 75 72 6e 73 20  ction.  returns 
21e10 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e 6f 6e 2d  the minimum non-
21e20 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66 20 61 6c  NULL value of al
21e30 6c 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  l values in the 
21e40 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65 20 6d 69  group..  ^The mi
21e50 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69 73 20 74  nimum value is t
21e60 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 55 4c  he first non-NUL
21e70 4c 20 76 61 6c 75 65 20 74 68 61 74 20 77 6f 75  L value that wou
21e80 6c 64 20 61 70 70 65 61 72 0a 20 20 69 6e 20 61  ld appear.  in a
21e90 6e 20 4f 52 44 45 52 20 42 59 20 6f 66 20 74 68  n ORDER BY of th
21ea0 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e 41 67 67  e column..  ^Agg
21eb0 72 65 67 61 74 65 20 6d 69 6e 28 29 20 72 65 74  regate min() ret
21ec0 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20 61 6e 64  urns NULL if and
21ed0 20 6f 6e 6c 79 20 69 66 20 74 68 65 72 65 20 61   only if there a
21ee0 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 0a 20  re no non-NULL. 
21ef0 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 67   values in the g
21f00 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  roup..}..funcdef
21f10 20 7b 73 75 6d 28 58 29 20 74 6f 74 61 6c 28 58   {sum(X) total(X
21f20 29 7d 20 7b 0a 20 20 2a 73 75 6d 46 75 6e 63 20  )} {.  *sumFunc 
21f30 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a 20 20 7b 73  *sum *total.  {s
21f40 75 6d 28 29 20 61 67 67 72 65 67 61 74 65 20 66  um() aggregate f
21f50 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74 6f 74 61  unction}.  {tota
21f60 6c 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  l() aggregate fu
21f70 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e 54  nction}.} {.  ^T
21f80 68 65 20 73 75 6d 28 29 20 61 6e 64 20 74 6f 74  he sum() and tot
21f90 61 6c 28 29 20 61 67 67 72 65 67 61 74 65 20 66  al() aggregate f
21fa0 75 6e 63 74 69 6f 6e 73 0a 20 20 72 65 74 75 72  unctions.  retur
21fb0 6e 20 73 75 6d 20 6f 66 20 61 6c 6c 20 6e 6f 6e  n sum of all non
21fc0 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20  -NULL values in 
21fd0 74 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 49 66  the group..  ^If
21fe0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6e 6f   there are no no
21ff0 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20 72 6f 77  n-NULL input row
22000 73 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65 74  s then sum() ret
22010 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62 75 74 20  urns.  NULL but 
22020 74 6f 74 61 6c 28 29 20 72 65 74 75 72 6e 73 20  total() returns 
22030 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69 73 20 6e  0.0..  NULL is n
22040 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61 20 68 65  ot normally a he
22050 6c 70 66 75 6c 20 72 65 73 75 6c 74 20 66 6f 72  lpful result for
22060 20 74 68 65 20 73 75 6d 20 6f 66 20 6e 6f 20 72   the sum of no r
22070 6f 77 73 0a 20 20 62 75 74 20 74 68 65 20 53 51  ows.  but the SQ
22080 4c 20 73 74 61 6e 64 61 72 64 20 72 65 71 75 69  L standard requi
22090 72 65 73 20 69 74 20 61 6e 64 20 6d 6f 73 74 20  res it and most 
220a0 6f 74 68 65 72 0a 20 20 53 51 4c 20 64 61 74 61  other.  SQL data
220b0 62 61 73 65 20 65 6e 67 69 6e 65 73 20 69 6d 70  base engines imp
220c0 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20 74 68 61  lement sum() tha
220d0 74 20 77 61 79 20 73 6f 20 53 51 4c 69 74 65 20  t way so SQLite 
220e0 64 6f 65 73 20 69 74 20 69 6e 20 74 68 65 0a 20  does it in the. 
220f0 20 73 61 6d 65 20 77 61 79 20 69 6e 20 6f 72 64   same way in ord
22100 65 72 20 74 6f 20 62 65 20 63 6f 6d 70 61 74 69  er to be compati
22110 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f 6e 2d 73  ble.   The non-s
22120 74 61 6e 64 61 72 64 20 74 6f 74 61 6c 28 29 20  tandard total() 
22130 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73 20 70 72  function.  is pr
22140 6f 76 69 64 65 64 20 61 73 20 61 20 63 6f 6e 76  ovided as a conv
22150 65 6e 69 65 6e 74 20 77 61 79 20 74 6f 20 77 6f  enient way to wo
22160 72 6b 20 61 72 6f 75 6e 64 20 74 68 69 73 20 64  rk around this d
22170 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d 0a 20 20  esign problem.  
22180 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75  in the SQL langu
22190 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e  age.</p>..  <p>^
221a0 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 6f  The result of to
221b0 74 61 6c 28 29 20 69 73 20 61 6c 77 61 79 73 20  tal() is always 
221c0 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  a floating point
221d0 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68 65 20 72   value..  ^The r
221e0 65 73 75 6c 74 20 6f 66 20 73 75 6d 28 29 20 69  esult of sum() i
221f0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  s an integer val
22200 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e 2d 4e 55  ue if all non-NU
22210 4c 4c 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e  LL inputs are in
22220 74 65 67 65 72 73 2e 0a 20 20 5e 49 66 20 61 6e  tegers..  ^If an
22230 79 20 69 6e 70 75 74 20 74 6f 20 73 75 6d 28 29  y input to sum()
22240 20 69 73 20 6e 65 69 74 68 65 72 20 61 6e 20 69   is neither an i
22250 6e 74 65 67 65 72 20 6f 72 20 61 20 4e 55 4c 4c  nteger or a NULL
22260 0a 20 20 74 68 65 6e 20 73 75 6d 28 29 20 72 65  .  then sum() re
22270 74 75 72 6e 73 20 61 20 66 6c 6f 61 74 69 6e 67  turns a floating
22280 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a 20 20 77   point value.  w
22290 68 69 63 68 20 6d 69 67 68 74 20 62 65 20 61 6e  hich might be an
222a0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 74   approximation t
222b0 6f 20 74 68 65 20 74 72 75 65 20 73 75 6d 2e 3c  o the true sum.<
222c0 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75 6d 28 29  /p>..  <p>^Sum()
222d0 20 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 22   will throw an "
222e0 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c 6f 77  integer overflow
222f0 22 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20 61  " exception if a
22300 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61 72 65 20  ll inputs.  are 
22310 69 6e 74 65 67 65 72 73 20 6f 72 20 4e 55 4c 4c  integers or NULL
22320 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74 65 67 65  .  and an intege
22330 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63 63 75 72  r overflow occur
22340 73 20 61 74 20 61 6e 79 20 70 6f 69 6e 74 20 64  s at any point d
22350 75 72 69 6e 67 20 74 68 65 20 63 6f 6d 70 75 74  uring the comput
22360 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74 61 6c 28  ation..  ^Total(
22370 29 20 6e 65 76 65 72 20 74 68 72 6f 77 73 20 61  ) never throws a
22380 6e 20 69 6e 74 65 67 65 72 20 6f 76 65 72 66 6c  n integer overfl
22390 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a 0a 0a 3c  ow..}.</tcl>...<
223a0 70 3e 0a 54 68 65 20 61 67 67 72 65 67 61 74 65  p>.The aggregate
223b0 20 66 75 6e 63 74 69 6f 6e 73 20 73 68 6f 77 6e   functions shown
223c0 20 62 65 6c 6f 77 20 61 72 65 20 61 76 61 69 6c   below are avail
223d0 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 2e  able by default.
223e0 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 61 67 67    Additional.agg
223f0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
22400 20 77 72 69 74 74 65 6e 20 69 6e 20 43 20 6d 61   written in C ma
22410 79 20 62 65 20 61 64 64 65 64 20 75 73 69 6e 67  y be added using
22420 20 74 68 65 20 0a 5b 73 71 6c 69 74 65 33 5f 63   the .[sqlite3_c
22430 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29  reate_function()
22440 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70 3e 0a 0a  ]</a>.API.</p>..
22450 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20 61 67 67 72  <p>.^In any aggr
22460 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 74  egate function t
22470 68 61 74 20 74 61 6b 65 73 20 61 20 73 69 6e 67  hat takes a sing
22480 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20 74 68 61  le argument, tha
22490 74 20 61 72 67 75 6d 65 6e 74 0a 63 61 6e 20 62  t argument.can b
224a0 65 20 70 72 65 63 65 64 65 64 20 62 79 20 74 68  e preceded by th
224b0 65 20 6b 65 79 77 6f 72 64 20 44 49 53 54 49 4e  e keyword DISTIN
224c0 43 54 2e 20 20 5e 49 6e 20 73 75 63 68 20 63 61  CT.  ^In such ca
224d0 73 65 73 2c 20 64 75 70 6c 69 63 61 74 65 0a 65  ses, duplicate.e
224e0 6c 65 6d 65 6e 74 73 20 61 72 65 20 66 69 6c 74  lements are filt
224f0 65 72 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e  ered before bein
22500 67 20 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68  g passed into th
22510 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
22520 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70  tion..^For examp
22530 6c 65 2c 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  le, the function
22540 20 22 63 6f 75 6e 74 28 64 69 73 74 69 6e 63 74   "count(distinct
22550 20 58 29 22 20 77 69 6c 6c 20 72 65 74 75 72 6e   X)" will return
22560 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 64   the number.of d
22570 69 73 74 69 6e 63 74 20 76 61 6c 75 65 73 20 6f  istinct values o
22580 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e 73 74 65  f column X inste
22590 61 64 20 6f 66 20 74 68 65 20 74 6f 74 61 6c 20  ad of the total 
225a0 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75  number of non-nu
225b0 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20 63 6f 6c  ll.values in col
225c0 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a 3c 74 63  umn X..</p>..<tc
225d0 6c 3e 0a 73 65 74 20 6c 78 20 7b 7d 0a 66 6f 72  l>.set lx {}.for
225e0 65 61 63 68 20 62 61 73 65 73 79 6e 74 61 78 20  each basesyntax 
225f0 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 63 6f 72  [array names cor
22600 65 66 75 6e 63 73 65 74 5d 20 7b 0a 20 20 66 6f  efuncset] {.  fo
22610 72 65 61 63 68 20 7b 73 79 6e 74 61 78 20 6b 65  reach {syntax ke
22620 79 77 6f 72 64 73 20 64 65 73 63 7d 20 24 63 6f  ywords desc} $co
22630 72 65 66 75 6e 63 73 65 74 28 24 62 61 73 65 73  refuncset($bases
22640 79 6e 74 61 78 29 20 62 72 65 61 6b 0a 20 20 72  yntax) break.  r
22650 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 5f 5d 2b 7d  egexp {^[a-z_]+}
22660 20 24 62 61 73 65 73 79 6e 74 61 78 20 66 72 61   $basesyntax fra
22670 67 6d 65 6e 74 0a 20 20 66 6f 72 65 61 63 68 20  gment.  foreach 
22680 63 6f 72 65 73 79 6e 74 61 78 20 24 73 79 6e 74  coresyntax $synt
22690 61 78 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64  ax {.    lappend
226a0 20 6c 78 20 5b 6c 69 73 74 20 24 66 72 61 67 6d   lx [list $fragm
226b0 65 6e 74 20 24 63 6f 72 65 73 79 6e 74 61 78 20  ent $coresyntax 
226c0 30 5d 0a 20 20 7d 0a 7d 0a 68 64 5f 6c 69 73 74  0].  }.}.hd_list
226d0 5f 6f 66 5f 6c 69 6e 6b 73 20 7b 7d 20 32 32 35  _of_links {} 225
226e0 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 31   [lsort -index 1
226f0 20 24 6c 78 5d 0a 0a 68 64 5f 70 75 74 73 6e 6c   $lx]..hd_putsnl
22700 20 22 3c 68 72 20 63 6c 61 73 73 3d 27 78 68 72   "<hr class='xhr
22710 27 3e 22 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c  '>".hd_putsnl "<
22720 64 6c 3e 22 0a 66 6f 72 65 61 63 68 20 62 61 73  dl>".foreach bas
22730 65 73 79 6e 74 61 78 20 5b 6c 73 6f 72 74 20 5b  esyntax [lsort [
22740 61 72 72 61 79 20 6e 61 6d 65 73 20 63 6f 72 65  array names core
22750 66 75 6e 63 73 65 74 5d 5d 20 7b 0a 20 20 66 6f  funcset]] {.  fo
22760 72 65 61 63 68 20 7b 73 79 6e 74 61 78 20 6b 65  reach {syntax ke
22770 79 77 6f 72 64 73 20 64 65 73 63 7d 20 24 63 6f  ywords desc} $co
22780 72 65 66 75 6e 63 73 65 74 28 24 62 61 73 65 73  refuncset($bases
22790 79 6e 74 61 78 29 20 62 72 65 61 6b 0a 20 20 72  yntax) break.  r
227a0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 73 2b 7d  egsub -all {\s+}
227b0 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73   [string trim $s
227c0 79 6e 74 61 78 5d 20 7b 3c 62 72 20 2f 3e 7d 20  yntax] {<br />} 
227d0 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
227e0 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29 5d 2b 29  -all {\(([^*)]+)
227f0 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b 28 3c 69  \)} $syntax {(<i
22800 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e 74 61 78  >\1</i>)} syntax
22810 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
22820 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c 2f 69 3e  ,} $syntax {</i>
22830 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72  ,<i>} syntax.  r
22840 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 69 3e 5c  egsub -all {<i>\
22850 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73 79 6e 74  .\.\.</i>} $synt
22860 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74 61 78 0a  ax {...} syntax.
22870 20 20 72 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 5d    regexp {^[a-z]
22880 2b 7d 20 24 62 61 73 65 73 79 6e 74 61 78 20 66  +} $basesyntax f
22890 72 61 67 6d 65 6e 74 0a 20 20 69 66 20 7b 5b 6c  ragment.  if {[l
228a0 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 73  length $keywords
228b0 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72 65 67 65  ]==0} {.    rege
228c0 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20 24 73 79  xp {[a-z_]+} $sy
228d0 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20 20 68 64  ntax name.    hd
228e0 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61 6d 65 20  _fragment $name 
228f0 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d 65 7d 28  *$name "${name}(
22900 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 22 0a  ) SQL function".
22910 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73    } else {.    s
22920 65 74 20 66 72 61 67 6e 61 6d 65 20 5b 6c 69 6e  et fragname [lin
22930 64 65 78 20 24 6b 65 79 77 6f 72 64 73 20 30 5d  dex $keywords 0]
22940 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  .    regsub -all
22950 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72 61 67 6e   {[^a-z]} $fragn
22960 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61 6d 65 0a  ame {} fragname.
22970 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20      hd_fragment 
22980 24 66 72 61 67 6e 61 6d 65 0a 20 20 20 20 65 76  $fragname.    ev
22990 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 5b  al hd_keywords [
229a0 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c 6e 20 7b  string map {\n {
229b0 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73 5d 0a 20   }} $keywords]. 
229c0 20 7d 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 64   }.  hd_puts "<d
229d0 74 3e 3c 70 3e 3c 62 3e 24 73 79 6e 74 61 78 3c  t><p><b>$syntax<
229e0 2f 62 3e 3c 2f 64 74 3e 22 0a 20 20 68 64 5f 72  /b></dt>".  hd_r
229f0 65 73 6f 6c 76 65 20 22 3c 64 64 3e 3c 70 3e 24  esolve "<dd><p>$
22a00 64 65 73 63 3c 2f 64 64 3e 5c 6e 22 0a 7d 0a 68  desc</dd>\n".}.h
22a10 64 5f 70 75 74 73 6e 6c 20 22 3c 2f 64 6c 3e 22  d_putsnl "</dl>"
22a20 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
22a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22a70 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45 52 54 20  .Section INSERT 
22a80 69 6e 73 65 72 74 20 7b 49 4e 53 45 52 54 20 2a  insert {INSERT *
22a90 49 4e 53 45 52 54 73 7d 0a 0a 52 65 63 75 72 73  INSERTs}..Recurs
22aa0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
22ab0 20 69 6e 73 65 72 74 2d 73 74 6d 74 0a 3c 2f 74   insert-stmt.</t
22ac0 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e 53 45  cl>..<p>The INSE
22ad0 52 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  RT statement com
22ae0 65 73 20 69 6e 20 74 68 72 65 65 20 62 61 73 69  es in three basi
22af0 63 20 66 6f 72 6d 73 2e 20 20 0a 3c 6f 6c 3e 0a  c forms.  .<ol>.
22b00 3c 6c 69 3e 3c 70 3e 3c 62 3e 49 4e 53 45 52 54  <li><p><b>INSERT
22b10 20 49 4e 54 4f 20 3c 2f 62 3e 3c 69 3e 74 61 62   INTO </b><i>tab
22b20 6c 65 3c 2f 69 3e 3c 62 3e 20 56 41 4c 55 45 53  le</i><b> VALUES
22b30 28 2e 2e 2e 29 3b 3c 2f 62 3e 0a 3c 70 3e 5e 54  (...);</b>.<p>^T
22b40 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 28 77  he first form (w
22b50 69 74 68 20 74 68 65 20 22 56 41 4c 55 45 53 22  ith the "VALUES"
22b60 20 6b 65 79 77 6f 72 64 29 20 63 72 65 61 74 65   keyword) create
22b70 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 6e 65  s one or more.ne
22b80 77 20 72 6f 77 73 20 69 6e 0a 61 6e 20 65 78 69  w rows in.an exi
22b90 73 74 69 6e 67 20 74 61 62 6c 65 2e 20 5e 49 66  sting table. ^If
22ba0 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 63 6f 6c   the <yyterm>col
22bb0 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  umn-name</yyterm
22bc0 3e 20 6c 69 73 74 20 61 66 74 65 72 0a 3c 79 79  > list after.<yy
22bd0 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c  term>table-name<
22be0 2f 79 79 74 65 72 6d 3e 20 69 73 20 6f 6d 69 74  /yyterm> is omit
22bf0 74 65 64 20 74 68 65 6e 20 74 68 65 20 6e 75 6d  ted then the num
22c00 62 65 72 0a 6f 66 20 76 61 6c 75 65 73 20 69 6e  ber.of values in
22c10 73 65 72 74 65 64 20 69 6e 74 6f 20 65 61 63 68  serted into each
22c20 20 72 6f 77 0a 6d 75 73 74 20 62 65 20 74 68 65   row.must be the
22c30 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75 6d   same as the num
22c40 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
22c50 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 5e 49 6e  n the table. ^In
22c60 20 74 68 69 73 20 63 61 73 65 0a 74 68 65 20 72   this case.the r
22c70 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74  esult of evaluat
22c80 69 6e 67 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73  ing the left-mos
22c90 74 20 65 78 70 72 65 73 73 69 6f 6e 20 66 72 6f  t expression fro
22ca0 6d 20 65 61 63 68 20 74 65 72 6d 20 6f 66 0a 74  m each term of.t
22cb0 68 65 20 56 41 4c 55 45 53 20 6c 69 73 74 20 69  he VALUES list i
22cc0 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
22cd0 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f  the left-most co
22ce0 6c 75 6d 6e 20 6f 66 20 65 61 63 68 20 6e 65 77  lumn of each new
22cf0 20 72 6f 77 2c 0a 61 6e 64 20 73 6f 20 66 6f 72   row,.and so for
22d00 74 68 20 66 6f 72 20 65 61 63 68 20 73 75 62 73  th for each subs
22d10 65 71 75 65 6e 74 20 65 78 70 72 65 73 73 69 6f  equent expressio
22d20 6e 2e 20 5e 49 66 20 61 20 3c 79 79 74 65 72 6d  n. ^If a <yyterm
22d30 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79  >column-name</yy
22d40 74 65 72 6d 3e 0a 6c 69 73 74 20 69 73 20 73 70  term>.list is sp
22d50 65 63 69 66 69 65 64 2c 20 74 68 65 6e 20 74 68  ecified, then th
22d60 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75  e number of valu
22d70 65 73 20 69 6e 20 65 61 63 68 20 74 65 72 6d 20  es in each term 
22d80 6f 66 20 74 68 65 0a 56 41 4c 55 45 20 6c 69 73  of the.VALUE lis
22d90 74 20 6d 75 73 74 20 6d 61 74 63 68 20 74 68 65  t must match the
22da0 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70 65 63 69   number of.speci
22db0 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e 20 5e 45  fied columns. ^E
22dc0 61 63 68 20 6f 66 20 74 68 65 20 6e 61 6d 65 64  ach of the named
22dd0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
22de0 6e 65 77 20 72 6f 77 20 69 73 20 70 6f 70 75 6c  new row is popul
22df0 61 74 65 64 0a 77 69 74 68 20 74 68 65 20 72 65  ated.with the re
22e00 73 75 6c 74 73 20 6f 66 20 65 76 61 6c 75 61 74  sults of evaluat
22e10 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
22e20 6e 64 69 6e 67 20 56 41 4c 55 45 53 20 65 78 70  nding VALUES exp
22e30 72 65 73 73 69 6f 6e 2e 20 5e 54 61 62 6c 65 0a  ression. ^Table.
22e40 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 64 6f 20  columns that do 
22e50 6e 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  not appear in th
22e60 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74 20 61 72  e column list ar
22e70 65 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68  e populated with
22e80 20 74 68 65 20 0a 5b 64 65 66 61 75 6c 74 20 63   the .[default c
22e90 6f 6c 75 6d 6e 20 76 61 6c 75 65 5d 20 28 73 70  olumn value] (sp
22ea0 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74 20  ecified as part 
22eb0 6f 66 20 74 68 65 20 5b 43 52 45 41 54 45 20 54  of the [CREATE T
22ec0 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 29  ABLE] statement)
22ed0 2c 20 6f 72 0a 77 69 74 68 20 4e 55 4c 4c 20 69  , or.with NULL i
22ee0 66 20 6e 6f 20 5b 64 65 66 61 75 6c 74 20 76 61  f no [default va
22ef0 6c 75 65 5d 20 69 73 20 73 70 65 63 69 66 69 65  lue] is specifie
22f00 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49 4e  d...<li><p><b>IN
22f10 53 45 52 54 20 49 4e 54 4f 20 3c 2f 62 3e 3c 69  SERT INTO </b><i
22f20 3e 74 61 62 6c 65 3c 2f 69 3e 3c 62 3e 20 53 45  >table</i><b> SE
22f30 4c 45 43 54 20 2e 2e 2e 3b 3c 2f 62 3e 0a 3c 70  LECT ...;</b>.<p
22f40 3e 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d  >The second form
22f50 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20 73   of the INSERT s
22f60 74 61 74 65 6d 65 6e 74 20 63 6f 6e 74 61 69 6e  tatement contain
22f70 73 20 61 20 5b 53 45 4c 45 43 54 5d 20 73 74 61  s a [SELECT] sta
22f80 74 65 6d 65 6e 74 0a 69 6e 73 74 65 61 64 20 6f  tement.instead o
22f90 66 20 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73  f a VALUES claus
22fa0 65 2e 20 5e 41 20 6e 65 77 20 65 6e 74 72 79 20  e. ^A new entry 
22fb0 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  is inserted into
22fc0 20 74 68 65 20 74 61 62 6c 65 20 66 6f 72 20 65   the table for e
22fd0 61 63 68 0a 72 6f 77 20 6f 66 20 64 61 74 61 20  ach.row of data 
22fe0 72 65 74 75 72 6e 65 64 20 62 79 20 65 78 65 63  returned by exec
22ff0 75 74 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54  uting the SELECT
23000 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49 66 20   statement. ^If 
23010 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73  a column-list is
23020 0a 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 20  .specified, the 
23030 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
23040 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  s in the result 
23050 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 6d 75  of the SELECT mu
23060 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 0a 61  st be the same.a
23070 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
23080 69 74 65 6d 73 20 69 6e 20 74 68 65 20 63 6f 6c  items in the col
23090 75 6d 6e 2d 6c 69 73 74 2e 20 5e 4f 74 68 65 72  umn-list. ^Other
230a0 77 69 73 65 2c 20 69 66 20 6e 6f 20 63 6f 6c 75  wise, if no colu
230b0 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70 65 63 69  mn-list is.speci
230c0 66 69 65 64 2c 20 74 68 65 20 6e 75 6d 62 65 72  fied, the number
230d0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
230e0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
230f0 20 53 45 4c 45 43 54 20 6d 75 73 74 20 62 65 20   SELECT must be 
23100 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20  the same.as the 
23110 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
23120 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
23130 5e 41 6e 79 20 53 45 4c 45 43 54 20 73 74 61 74  ^Any SELECT stat
23140 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64 69 6e 67  ement, including
23150 0a 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  .[compound SELEC
23160 54 73 5d 20 61 6e 64 20 53 45 4c 45 43 54 20 73  Ts] and SELECT s
23170 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 5b  tatements with [
23180 4f 52 44 45 52 20 42 59 5d 20 61 6e 64 2f 6f 72  ORDER BY] and/or
23190 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73   [LIMIT] clauses
231a0 2c 20 0a 6d 61 79 20 62 65 20 75 73 65 64 20 69  , .may be used i
231b0 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  n an INSERT stat
231c0 65 6d 65 6e 74 20 6f 66 20 74 68 69 73 20 66 6f  ement of this fo
231d0 72 6d 2e 0a 0a 3c 70 3e 54 6f 20 61 76 6f 69 64  rm...<p>To avoid
231e0 20 61 20 70 61 72 73 69 6e 67 20 61 6d 62 69 67   a parsing ambig
231f0 75 69 74 79 2c 20 74 68 65 20 53 45 4c 45 43 54  uity, the SELECT
23200 20 73 74 61 74 65 6d 65 6e 74 20 73 68 6f 75 6c   statement shoul
23210 64 20 61 6c 77 61 79 73 0a 63 6f 6e 74 61 69 6e  d always.contain
23220 20 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 2c   a WHERE clause,
23230 20 65 76 65 6e 20 69 66 20 74 68 61 74 20 63 6c   even if that cl
23240 61 75 73 65 20 69 73 20 73 69 6d 70 6c 79 20 22  ause is simply "
23250 57 48 45 52 45 20 74 72 75 65 22 2c 0a 69 66 20  WHERE true",.if 
23260 74 68 65 20 5b 75 70 73 65 72 74 2d 63 6c 61 75  the [upsert-clau
23270 73 65 5d 20 69 73 20 70 72 65 73 65 6e 74 2e 20  se] is present. 
23280 20 57 69 74 68 6f 75 74 20 74 68 65 20 57 48 45   Without the WHE
23290 52 45 20 63 6c 61 75 73 65 2c 20 74 68 65 0a 70  RE clause, the.p
232a0 61 72 73 65 72 20 64 6f 65 73 20 6e 6f 74 20 6b  arser does not k
232b0 6e 6f 77 20 69 66 20 74 68 65 20 74 6f 6b 65 6e  now if the token
232c0 20 22 4f 4e 22 20 69 73 20 70 61 72 74 20 6f 66   "ON" is part of
232d0 20 61 20 6a 6f 69 6e 20 63 6f 6e 73 74 72 61 69   a join constrai
232e0 6e 74 0a 6f 6e 20 74 68 65 20 53 45 4c 45 43 54  nt.on the SELECT
232f0 2c 20 6f 72 20 74 68 65 20 62 65 67 69 6e 6e 69  , or the beginni
23300 6e 67 20 6f 66 20 74 68 65 20 5b 75 70 73 65 72  ng of the [upser
23310 74 2d 63 6c 61 75 73 65 5d 2e 0a 0a 3c 6c 69 3e  t-clause]...<li>
23320 3c 70 3e 3c 62 3e 49 4e 53 45 52 54 20 49 4e 54  <p><b>INSERT INT
23330 4f 20 3c 2f 62 3e 3c 69 3e 74 61 62 6c 65 3c 2f  O </b><i>table</
23340 69 3e 3c 62 3e 20 44 45 46 41 55 4c 54 20 56 41  i><b> DEFAULT VA
23350 4c 55 45 53 3b 3c 2f 62 3e 0a 3c 70 3e 54 68 65  LUES;</b>.<p>The
23360 20 74 68 69 72 64 20 66 6f 72 6d 20 6f 66 20 61   third form of a
23370 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
23380 6e 74 20 69 73 20 77 69 74 68 20 44 45 46 41 55  nt is with DEFAU
23390 4c 54 20 56 41 4c 55 45 53 2e 0a 5e 28 54 68 65  LT VALUES..^(The
233a0 20 49 4e 53 45 52 54 20 2e 2e 2e 20 44 45 46 41   INSERT ... DEFA
233b0 55 4c 54 20 56 41 4c 55 45 53 20 73 74 61 74 65  ULT VALUES state
233c0 6d 65 6e 74 20 69 6e 73 65 72 74 73 20 61 20 73  ment inserts a s
233d0 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 69 6e  ingle new row in
233e0 74 6f 20 74 68 65 0a 6e 61 6d 65 64 20 74 61 62  to the.named tab
233f0 6c 65 2e 29 5e 20 5e 45 61 63 68 20 63 6f 6c 75  le.)^ ^Each colu
23400 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 72 6f  mn of the new ro
23410 77 20 69 73 20 70 6f 70 75 6c 61 74 65 64 20 77  w is populated w
23420 69 74 68 20 69 74 73 20 0a 5b 64 65 66 61 75 6c  ith its .[defaul
23430 74 20 76 61 6c 75 65 5d 2c 20 6f 72 20 77 69 74  t value], or wit
23440 68 20 61 20 4e 55 4c 4c 20 69 66 20 6e 6f 20 64  h a NULL if no d
23450 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 73 20  efault value is 
23460 73 70 65 63 69 66 69 65 64 20 0a 61 73 20 70 61  specified .as pa
23470 72 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  rt of the column
23480 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6e 20 74   definition in t
23490 68 65 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he [CREATE TABLE
234a0 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65  ] statement..The
234b0 20 5b 75 70 73 65 72 74 2d 63 6c 61 75 73 65 5d   [upsert-clause]
234c0 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65   is not supporte
234d0 64 20 61 66 74 65 72 20 44 45 46 41 55 4c 54 20  d after DEFAULT 
234e0 56 41 4c 55 45 53 2e 0a 0a 3c 2f 6f 6c 3e 0a 0a  VALUES...</ol>..
234f0 3c 70 3e 0a 5e 54 68 65 20 69 6e 69 74 69 61 6c  <p>.^The initial
23500 20 22 49 4e 53 45 52 54 22 20 6b 65 79 77 6f 72   "INSERT" keywor
23510 64 20 63 61 6e 20 62 65 20 72 65 70 6c 61 63 65  d can be replace
23520 64 20 62 79 0a 22 52 45 50 4c 41 43 45 22 20 6f  d by."REPLACE" o
23530 72 20 22 49 4e 53 45 52 54 20 4f 52 20 3c 69 3e  r "INSERT OR <i>
23540 61 63 74 69 6f 6e 3c 2f 69 3e 22 20 74 6f 20 73  action</i>" to s
23550 70 65 63 69 66 79 20 61 6e 20 61 6c 74 65 72 6e  pecify an altern
23560 61 74 69 76 65 0a 63 6f 6e 73 74 72 61 69 6e 74  ative.constraint
23570 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7c 63 6f   [ON CONFLICT|co
23580 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
23590 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 20 74 6f 20  n algorithm] to 
235a0 75 73 65 20 64 75 72 69 6e 67 20 0a 74 68 61 74  use during .that
235b0 20 6f 6e 65 20 49 4e 53 45 52 54 20 63 6f 6d 6d   one INSERT comm
235c0 61 6e 64 2e 0a 46 6f 72 20 63 6f 6d 70 61 74 69  and..For compati
235d0 62 69 6c 69 74 79 20 77 69 74 68 20 4d 79 53 51  bility with MySQ
235e0 4c 2c 20 5e 74 68 65 20 70 61 72 73 65 72 20 61  L, ^the parser a
235f0 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 20 6f 66  llows the use of
23600 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b 65 79 77   the.single keyw
23610 6f 72 64 20 3c 61 20 68 72 65 66 3d 22 6c 61 6e  ord <a href="lan
23620 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d 6c 22 3e  g_replace.html">
23630 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61 73 20 61  REPLACE</a> as a
23640 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20 22 49 4e  n .alias for "IN
23650 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43 45 22  SERT OR REPLACE"
23660 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f 70 74 69  ...<p>^(The opti
23670 6f 6e 61 6c 20 22 3c 69 3e 73 63 68 65 6d 61 2d  onal "<i>schema-
23680 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c 2f 62 3e  name</i><b>.</b>
23690 22 20 70 72 65 66 69 78 20 6f 6e 20 74 68 65 20  " prefix on the 
236a0 0a 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e  .<yyterm>table-n
236b0 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a 69 73 20  ame</yyterm>.is 
236c0 73 75 70 70 6f 72 74 65 64 20 66 6f 72 20 74 6f  supported for to
236d0 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
236e0 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 2e 29  tatements only.)
236f0 5e 20 20 5e 54 68 65 20 74 61 62 6c 65 20 6e 61  ^  ^The table na
23700 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e 71 75 61  me must be.unqua
23710 6c 69 66 69 65 64 20 66 6f 72 20 49 4e 53 45 52  lified for INSER
23720 54 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  T statements tha
23730 74 20 6f 63 63 75 72 20 77 69 74 68 69 6e 20 5b  t occur within [
23740 43 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20  CREATE TRIGGER] 
23750 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e 53 69 6d  statements..^Sim
23760 69 6c 61 72 6c 79 2c 20 74 68 65 20 22 44 45 46  ilarly, the "DEF
23770 41 55 4c 54 20 56 41 4c 55 45 53 22 20 66 6f 72  AULT VALUES" for
23780 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52 54 20  m of the INSERT 
23790 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 75 70  statement is sup
237a0 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f 70 2d 6c  ported for.top-l
237b0 65 76 65 6c 20 49 4e 53 45 52 54 20 73 74 61 74  evel INSERT stat
237c0 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61 6e 64 20  ements only and 
237d0 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52 54 20 73  not for INSERT s
237e0 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
237f0 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70 3e 0a 0a  .triggers..<p>..
23800 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20  <p>The optional 
23810 22 41 53 20 3c 79 79 74 65 72 6d 3e 61 6c 69 61  "AS <yyterm>alia
23820 73 3c 2f 79 79 74 65 72 6d 3e 22 20 70 68 72 61  s</yyterm>" phra
23830 73 65 20 70 72 6f 76 69 64 65 73 20 61 6e 20 61  se provides an a
23840 6c 74 65 72 6e 61 74 69 76 65 0a 6e 61 6d 65 20  lternative.name 
23850 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 69 6e  for the table in
23860 74 6f 20 77 68 69 63 68 20 63 6f 6e 74 65 6e 74  to which content
23870 20 69 73 20 62 65 69 6e 67 20 69 6e 73 65 72 74   is being insert
23880 65 64 2e 20 20 54 68 65 20 61 6c 69 61 73 20 6e  ed.  The alias n
23890 61 6d 65 0a 63 61 6e 20 62 65 20 75 73 65 64 20  ame.can be used 
238a0 77 69 74 68 69 6e 20 57 48 45 52 45 20 61 6e 64  within WHERE and
238b0 20 53 45 54 20 63 6c 61 75 73 65 73 20 6f 66 20   SET clauses of 
238c0 74 68 65 20 5b 55 50 53 45 52 54 5d 2e 20 20 49  the [UPSERT].  I
238d0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 0a 5b 75  f there is no.[u
238e0 70 73 65 72 74 2d 63 6c 61 75 73 65 5d 2c 20 74  psert-clause], t
238f0 68 65 6e 20 74 68 65 20 3c 79 79 74 65 72 6d 3e  hen the <yyterm>
23900 61 6c 69 61 73 3c 2f 79 79 74 65 72 6d 3e 20 69  alias</yyterm> i
23910 73 20 70 6f 69 6e 74 6c 65 73 73 2c 20 62 75 74  s pointless, but
23920 20 61 6c 73 6f 0a 68 61 72 6d 6c 65 73 73 2e 0a   also.harmless..
23930 0a 3c 70 3e 53 65 65 20 74 68 65 20 73 65 70 61  .<p>See the sepa
23940 72 61 74 65 20 5b 55 50 53 45 52 54 5d 20 64 6f  rate [UPSERT] do
23950 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
23960 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 74  the additional t
23970 72 61 69 6c 69 6e 67 0a 73 79 6e 74 61 78 20 74  railing.syntax t
23980 68 61 74 20 63 61 6e 20 63 61 75 73 65 20 61 6e  hat can cause an
23990 20 49 4e 53 45 52 54 20 74 6f 20 62 65 68 61 76   INSERT to behav
239a0 65 20 61 73 20 61 6e 20 55 50 44 41 54 45 20 69  e as an UPDATE i
239b0 66 20 74 68 65 20 49 4e 53 45 52 54 20 77 6f 75  f the INSERT wou
239c0 6c 64 0a 6f 74 68 65 72 77 69 73 65 20 76 69 6f  ld.otherwise vio
239d0 6c 61 74 65 20 61 20 75 6e 69 71 75 65 6e 65 73  late a uniquenes
239e0 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 20 54  s constraint.  T
239f0 68 65 20 5b 75 70 73 65 72 74 20 63 6c 61 75 73  he [upsert claus
23a00 65 5d 20 69 73 20 6e 6f 74 0a 61 6c 6c 6f 77 65  e] is not.allowe
23a10 64 20 6f 6e 20 61 6e 20 22 49 4e 53 45 52 54 20  d on an "INSERT 
23a20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56 41 4c 55  ... DEFAULT VALU
23a30 45 53 22 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  ES"....<tcl>.###
23a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23a80 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
23a90 69 6f 6e 20 75 70 73 65 72 74 20 55 50 53 45 52  ion upsert UPSER
23aa0 54 20 7b 55 50 53 45 52 54 20 7b 75 70 73 65 72  T {UPSERT {upser
23ab0 74 20 63 6c 61 75 73 65 7d 7d 0a 0a 52 65 63 75  t clause}}..Recu
23ac0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
23ad0 61 6d 20 75 70 73 65 72 74 2d 63 6c 61 75 73 65  am upsert-clause
23ae0 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 55 50 53 45  .</tcl>..<p>UPSE
23af0 52 54 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  RT is a special 
23b00 73 79 6e 74 61 78 20 61 64 64 69 74 69 6f 6e 20  syntax addition 
23b10 74 6f 20 5b 49 4e 53 45 52 54 5d 20 74 68 61 74  to [INSERT] that
23b20 20 63 61 75 73 65 73 20 74 68 65 0a 49 4e 53 45   causes the.INSE
23b30 52 54 20 74 6f 20 62 65 68 61 76 65 20 61 73 20  RT to behave as 
23b40 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f 72 20 61  an [UPDATE] or a
23b50 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 49 4e   no-op if the IN
23b60 53 45 52 54 20 77 6f 75 6c 64 20 76 69 6f 6c 61  SERT would viola
23b70 74 65 0a 61 20 75 6e 69 71 75 65 6e 65 73 73 20  te.a uniqueness 
23b80 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 55 50 53 45  constraint..UPSE
23b90 52 54 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61  RT is not standa
23ba0 72 64 20 53 51 4c 2e 20 20 55 50 53 45 52 54 20  rd SQL.  UPSERT 
23bb0 69 6e 20 53 51 4c 69 74 65 20 66 6f 6c 6c 6f 77  in SQLite follow
23bc0 73 20 74 68 65 0a 73 79 6e 74 61 78 20 65 73 74  s the.syntax est
23bd0 61 62 6c 69 73 68 65 64 20 62 79 20 50 6f 73 74  ablished by Post
23be0 67 72 65 53 51 4c 2e 0a 55 50 53 45 52 54 20 73  greSQL..UPSERT s
23bf0 79 6e 74 61 78 20 77 61 73 20 61 64 64 65 64 20  yntax was added 
23c00 74 6f 20 53 51 4c 69 74 65 20 77 69 74 68 20 76  to SQLite with v
23c10 65 72 73 69 6f 6e 20 33 2e 32 34 2e 30 20 28 5b  ersion 3.24.0 ([
23c20 64 61 74 65 6f 66 3a 33 2e 32 34 2e 30 5d 29 2e  dateof:3.24.0]).
23c30 0a 0a 3c 70 3e 41 6e 20 55 50 53 45 52 54 20 69  ..<p>An UPSERT i
23c40 73 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 5b 49  s an ordinary [I
23c50 4e 53 45 52 54 5d 20 73 74 61 74 65 6d 65 6e 74  NSERT] statement
23c60 20 74 68 61 74 20 69 73 20 66 6f 6c 6c 6f 77 65   that is followe
23c70 64 20 62 79 0a 74 68 65 20 73 70 65 63 69 61 6c  d by.the special
23c80 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
23c90 75 73 65 20 73 68 6f 77 6e 20 61 62 6f 76 65 2e  use shown above.
23ca0 0a 0a 3c 70 3e 54 68 65 20 73 79 6e 74 61 78 20  ..<p>The syntax 
23cb0 74 68 61 74 20 6f 63 63 75 72 73 20 69 6e 20 62  that occurs in b
23cc0 65 74 77 65 65 6e 20 74 68 65 20 22 4f 4e 20 43  etween the "ON C
23cd0 4f 4e 46 4c 49 43 54 22 20 61 6e 64 20 22 44 4f  ONFLICT" and "DO
23ce0 22 20 6b 65 79 77 6f 72 64 73 0a 69 73 20 63 61  " keywords.is ca
23cf0 6c 6c 65 64 20 74 68 65 20 22 63 6f 6e 66 6c 69  lled the "confli
23d00 63 74 20 74 61 72 67 65 74 22 2e 20 20 54 68 65  ct target".  The
23d10 20 63 6f 6e 66 6c 69 63 74 20 74 61 72 67 65 74   conflict target
23d20 20 73 70 65 63 69 66 69 65 73 20 61 20 73 70 65   specifies a spe
23d30 63 69 66 69 63 0a 75 6e 69 71 75 65 6e 65 73 73  cific.uniqueness
23d40 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74   constraint that
23d50 20 77 69 6c 6c 20 74 72 69 67 67 65 72 20 74 68   will trigger th
23d60 65 20 75 70 73 65 72 74 2e 20 20 54 68 65 20 63  e upsert.  The c
23d70 6f 6e 66 6c 69 63 74 20 74 61 72 67 65 74 0a 69  onflict target.i
23d80 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 44  s required for D
23d90 4f 20 55 50 44 41 54 45 20 75 70 73 65 72 74 73  O UPDATE upserts
23da0 2c 20 62 75 74 20 69 73 20 6f 70 74 69 6f 6e 61  , but is optiona
23db0 6c 20 66 6f 72 20 44 4f 20 4e 4f 54 48 49 4e 47  l for DO NOTHING
23dc0 2e 0a 41 20 44 4f 20 4e 4f 54 48 49 4e 47 20 75  ..A DO NOTHING u
23dd0 70 73 65 72 74 20 77 69 74 68 6f 75 74 20 61 20  psert without a 
23de0 63 6f 6e 66 6c 69 63 74 20 74 61 72 67 65 74 20  conflict target 
23df0 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61  works the same a
23e00 73 20 61 6e 0a 5b 4f 4e 20 43 4f 4e 46 4c 49 43  s an.[ON CONFLIC
23e10 54 7c 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f  T|INSERT OR IGNO
23e20 52 45 5d 2e 0a 0a 3c 70 3e 49 66 20 74 68 65 20  RE]...<p>If the 
23e30 69 6e 73 65 72 74 20 6f 70 65 72 61 74 69 6f 6e  insert operation
23e40 20 77 6f 75 6c 64 20 63 61 75 73 65 20 74 68 65   would cause the
23e50 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73   uniqueness cons
23e60 74 72 61 69 6e 74 20 69 64 65 6e 74 69 66 69 65  traint identifie
23e70 64 0a 62 79 20 74 68 65 20 63 6f 6e 66 6c 69 63  d.by the conflic
23e80 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65 20  t-target clause 
23e90 74 6f 20 66 61 69 6c 2c 20 74 68 65 6e 20 74 68  to fail, then th
23ea0 65 20 69 6e 73 65 72 74 20 69 73 20 6f 6d 69 74  e insert is omit
23eb0 74 65 64 20 61 6e 64 0a 65 69 74 68 65 72 20 74  ted and.either t
23ec0 68 65 20 44 4f 20 4e 4f 54 48 49 4e 47 20 6f 72  he DO NOTHING or
23ed0 20 44 4f 20 55 50 44 41 54 45 20 6f 70 65 72 61   DO UPDATE opera
23ee0 74 69 6f 6e 20 69 73 20 70 65 72 66 6f 72 6d 65  tion is performe
23ef0 64 20 69 6e 73 74 65 61 64 2e 0a 49 6e 20 74 68  d instead..In th
23f00 65 20 63 61 73 65 20 6f 66 20 61 20 6d 75 6c 74  e case of a mult
23f10 69 2d 72 6f 77 20 69 6e 73 65 72 74 2c 20 74 68  i-row insert, th
23f20 69 73 20 64 65 63 69 73 69 6f 6e 20 69 73 20 6d  is decision is m
23f30 61 64 65 20 73 65 70 61 72 61 74 65 6c 79 0a 66  ade separately.f
23f40 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74  or each row of t
23f50 68 65 20 69 6e 73 65 72 74 2e 0a 0a 3c 70 3e 43  he insert...<p>C
23f60 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69 6e 20 74  olumn names in t
23f70 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  he expressions o
23f80 66 20 61 20 44 4f 20 55 50 44 41 54 45 20 72 65  f a DO UPDATE re
23f90 66 65 72 20 74 6f 20 74 68 65 20 6f 72 69 67 69  fer to the origi
23fa0 6e 61 6c 0a 75 6e 63 68 61 6e 67 65 64 20 76 61  nal.unchanged va
23fb0 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  lue of the colum
23fc0 6e 2c 20 62 65 66 6f 72 65 20 74 68 65 20 61 74  n, before the at
23fd0 74 65 6d 70 74 65 64 20 49 4e 53 45 52 54 2e 20  tempted INSERT. 
23fe0 20 54 6f 20 75 73 65 20 74 68 65 0a 76 61 6c 75   To use the.valu
23ff0 65 20 74 68 61 74 20 77 6f 75 6c 64 20 68 61 76  e that would hav
24000 65 20 62 65 65 6e 20 69 6e 73 65 72 74 65 64 20  e been inserted 
24010 68 61 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69  had the constrai
24020 6e 74 20 6e 6f 74 20 66 61 69 6c 65 64 2c 0a 61  nt not failed,.a
24030 64 64 20 74 68 65 20 73 70 65 63 69 61 6c 20 22  dd the special "
24040 65 78 63 6c 75 64 65 64 2e 22 20 74 61 62 6c 65  excluded." table
24050 20 71 75 61 6c 69 66 69 65 72 20 74 6f 20 74 68   qualifier to th
24060 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0a 0a  e column name...
24070 3c 70 3e 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73  <p>Some examples
24080 20 77 69 6c 6c 20 68 65 6c 70 20 69 6c 6c 75 73   will help illus
24090 74 72 61 74 65 20 74 68 65 20 64 69 66 66 65 72  trate the differ
240a0 65 6e 63 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  ence:..<blockquo
240b0 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
240c0 54 41 42 4c 45 20 76 6f 63 61 62 75 6c 61 72 79  TABLE vocabulary
240d0 28 77 6f 72 64 20 54 45 58 54 20 50 52 49 4d 41  (word TEXT PRIMA
240e0 52 59 20 4b 45 59 2c 20 63 6f 75 6e 74 20 49 4e  RY KEY, count IN
240f0 54 20 44 45 46 41 55 4c 54 20 31 29 3b 0a 49 4e  T DEFAULT 1);.IN
24100 53 45 52 54 20 49 4e 54 4f 20 76 6f 63 61 62 75  SERT INTO vocabu
24110 6c 61 72 79 28 77 6f 72 64 29 20 56 41 4c 55 45  lary(word) VALUE
24120 53 28 27 6a 6f 76 69 61 6c 27 29 0a 20 20 4f 4e  S('jovial').  ON
24130 20 43 4f 4e 46 4c 49 43 54 28 77 6f 72 64 29 20   CONFLICT(word) 
24140 44 4f 20 55 50 44 41 54 45 20 53 45 54 20 63 6f  DO UPDATE SET co
24150 75 6e 74 3d 63 6f 75 6e 74 2b 31 3b 0a 3c 2f 70  unt=count+1;.</p
24160 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
24170 0a 0a 3c 70 3e 54 68 65 20 75 70 73 65 72 74 20  ..<p>The upsert 
24180 61 62 6f 76 65 20 69 6e 73 65 72 74 73 20 74 68  above inserts th
24190 65 20 6e 65 77 20 76 6f 63 61 62 75 6c 61 72 79  e new vocabulary
241a0 20 77 6f 72 64 20 22 6a 6f 76 69 61 6c 22 20 69   word "jovial" i
241b0 66 20 74 68 61 74 0a 77 6f 72 64 20 69 73 20 6e  f that.word is n
241c0 6f 74 20 61 6c 72 65 61 64 79 20 69 6e 20 74 68  ot already in th
241d0 65 20 64 69 63 74 69 6f 6e 61 72 79 2c 20 6f 72  e dictionary, or
241e0 20 69 66 20 69 74 20 69 73 20 61 6c 72 65 61 64   if it is alread
241f0 79 20 69 6e 20 74 68 65 0a 64 69 63 74 69 6f 6e  y in the.diction
24200 61 72 79 2c 20 69 74 20 69 6e 63 72 65 6d 65 6e  ary, it incremen
24210 74 73 20 74 68 65 20 63 6f 75 6e 74 65 72 2e 20  ts the counter. 
24220 20 54 68 65 20 22 63 6f 75 6e 74 2b 31 22 20 65   The "count+1" e
24230 78 70 72 65 73 73 69 6f 6e 0a 63 6f 75 6c 64 20  xpression.could 
24240 61 6c 73 6f 20 62 65 20 77 72 69 74 74 65 6e 20  also be written 
24250 61 73 20 22 76 6f 63 61 62 75 6c 61 72 79 2e 63  as "vocabulary.c
24260 6f 75 6e 74 22 2e 20 20 50 6f 73 74 67 72 65 53  ount".  PostgreS
24270 51 4c 20 72 65 71 75 69 72 65 73 20 74 68 65 0a  QL requires the.
24280 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20 62 75 74  second form, but
24290 20 53 51 4c 69 74 65 20 61 63 63 65 70 74 73 20   SQLite accepts 
242a0 65 69 74 68 65 72 2e 0a 0a 3c 62 6c 6f 63 6b 71  either...<blockq
242b0 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
242c0 45 20 54 41 42 4c 45 20 70 68 6f 6e 65 62 6f 6f  E TABLE phoneboo
242d0 6b 28 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d  k(name TEXT PRIM
242e0 41 52 59 20 4b 45 59 2c 20 70 68 6f 6e 65 6e 75  ARY KEY, phonenu
242f0 6d 62 65 72 20 54 45 58 54 29 3b 0a 49 4e 53 45  mber TEXT);.INSE
24300 52 54 20 49 4e 54 4f 20 70 68 6f 6e 65 62 6f 6f  RT INTO phoneboo
24310 6b 28 6e 61 6d 65 2c 70 68 6f 6e 65 6e 75 6d 62  k(name,phonenumb
24320 65 72 29 20 56 41 4c 55 45 53 28 27 41 6c 69 63  er) VALUES('Alic
24330 65 27 2c 27 37 30 34 2d 35 35 35 2d 31 32 31 32  e','704-555-1212
24340 27 29 0a 20 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ').  ON CONFLICT
24350 28 6e 61 6d 65 29 20 44 4f 20 55 50 44 41 54 45  (name) DO UPDATE
24360 20 53 45 54 20 70 68 6f 6e 65 6e 75 6d 62 65 72   SET phonenumber
24370 3d 65 78 63 6c 75 64 65 64 2e 70 68 6f 6e 65 6e  =excluded.phonen
24380 75 6d 62 65 72 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  umber;.</pre></b
24390 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49  lockquote>..<p>I
243a0 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 65 78 61  n the second exa
243b0 6d 70 6c 65 2c 20 74 68 65 20 65 78 70 72 65 73  mple, the expres
243c0 73 69 6f 6e 20 69 6e 20 74 68 65 20 44 4f 20 55  sion in the DO U
243d0 50 44 41 54 45 20 63 6c 61 75 73 65 20 69 73 0a  PDATE clause is.
243e0 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 65 78 63  of the form "exc
243f0 6c 75 64 65 64 2e 70 68 6f 6e 65 6e 75 6d 62 65  luded.phonenumbe
24400 72 22 2e 20 20 54 68 65 20 22 65 78 63 6c 75 64  r".  The "exclud
24410 65 64 2e 22 20 70 72 65 66 69 78 20 63 61 75 73  ed." prefix caus
24420 65 73 20 74 68 65 0a 22 70 68 6f 6e 65 6e 75 6d  es the."phonenum
24430 62 65 72 22 20 74 6f 20 72 65 66 65 72 20 74 6f  ber" to refer to
24440 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20 70   the value for p
24450 68 6f 6e 65 6e 75 6d 62 65 72 20 74 68 61 74 20  honenumber that 
24460 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a  would have been.
24470 69 6e 73 65 72 74 65 64 20 68 61 64 20 74 68 65  inserted had the
24480 72 65 20 62 65 65 6e 20 6e 6f 20 63 6f 6e 66 6c  re been no confl
24490 69 63 74 2e 20 20 48 65 6e 63 65 2c 20 74 68 65  ict.  Hence, the
244a0 20 65 66 66 65 63 74 20 6f 66 20 74 68 65 20 75   effect of the u
244b0 70 73 65 72 74 0a 69 73 20 74 6f 20 69 6e 73 65  psert.is to inse
244c0 72 74 20 61 20 70 68 6f 6e 65 6e 75 6d 62 65 72  rt a phonenumber
244d0 20 6f 66 20 41 6c 69 63 65 20 69 66 20 6e 6f 6e   of Alice if non
244e0 65 20 65 78 69 73 74 73 2c 20 6f 72 20 74 6f 20  e exists, or to 
244f0 6f 76 65 72 77 72 69 74 65 0a 61 6e 79 20 70 72  overwrite.any pr
24500 69 6f 72 20 70 68 6f 6e 65 6e 75 6d 62 65 72 20  ior phonenumber 
24510 66 6f 72 20 41 6c 69 63 65 20 77 69 74 68 20 74  for Alice with t
24520 68 65 20 6e 65 77 20 6f 6e 65 2e 0a 0a 3c 70 3e  he new one...<p>
24530 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 44 4f  Note that the DO
24540 20 55 50 44 41 54 45 20 63 6c 61 75 73 65 20 61   UPDATE clause a
24550 63 74 73 20 6f 6e 6c 79 20 6f 6e 20 74 68 65 20  cts only on the 
24560 73 69 6e 67 6c 65 20 72 6f 77 0a 74 68 61 74 20  single row.that 
24570 65 78 70 65 72 69 65 6e 63 65 64 20 74 68 65 20  experienced the 
24580 63 6f 6e 73 74 72 61 69 6e 74 20 65 72 72 6f 72  constraint error
24590 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 2e 20   during INSERT. 
245a0 20 49 74 20 69 73 20 6e 6f 74 0a 6e 65 63 65 73   It is not.neces
245b0 73 61 72 79 20 74 6f 20 69 6e 63 6c 75 64 65 20  sary to include 
245c0 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 74  a WHERE clause t
245d0 68 61 74 20 72 65 73 74 72 69 63 74 69 6f 6e 73  hat restrictions
245e0 20 74 68 65 20 61 63 74 69 6f 6e 0a 74 6f 20 74   the action.to t
245f0 68 61 74 20 6f 6e 65 20 72 6f 77 2e 20 20 54 68  hat one row.  Th
24600 65 20 6f 6e 6c 79 20 75 73 65 20 66 6f 72 20 74  e only use for t
24610 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
24620 61 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at.the end of th
24630 65 20 44 4f 20 55 50 44 41 54 45 20 69 73 20 74  e DO UPDATE is t
24640 6f 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 63 68 61  o optionally cha
24650 6e 67 65 20 74 68 65 20 44 4f 20 55 50 44 41 54  nge the DO UPDAT
24660 45 0a 69 6e 74 6f 20 61 20 6e 6f 2d 6f 70 20 64  E.into a no-op d
24670 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
24680 6f 72 69 67 69 6e 61 6c 20 61 6e 64 2f 6f 72 20  original and/or 
24690 6e 65 77 20 76 61 6c 75 65 73 2e 0a 46 6f 72 20  new values..For 
246a0 65 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b  example:..<block
246b0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
246c0 54 45 20 54 41 42 4c 45 20 70 68 6f 6e 65 62 6f  TE TABLE phonebo
246d0 6f 6b 32 28 0a 20 20 6e 61 6d 65 20 54 45 58 54  ok2(.  name TEXT
246e0 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20   PRIMARY KEY,.  
246f0 70 68 6f 6e 65 6e 75 6d 62 65 72 20 54 45 58 54  phonenumber TEXT
24700 2c 0a 20 20 76 61 6c 69 64 44 61 74 65 20 44 41  ,.  validDate DA
24710 54 45 0a 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  TE.);.INSERT INT
24720 4f 20 70 68 6f 6e 65 62 6f 6f 6b 32 28 6e 61 6d  O phonebook2(nam
24730 65 2c 70 68 6f 6e 65 6e 75 6d 62 65 72 2c 76 61  e,phonenumber,va
24740 6c 69 64 44 61 74 65 29 0a 20 20 56 41 4c 55 45  lidDate).  VALUE
24750 53 28 27 41 6c 69 63 65 27 2c 27 37 30 34 2d 35  S('Alice','704-5
24760 35 35 2d 31 32 31 32 27 2c 27 32 30 31 38 2d 30  55-1212','2018-0
24770 35 2d 30 38 27 29 0a 20 20 4f 4e 20 43 4f 4e 46  5-08').  ON CONF
24780 4c 49 43 54 28 6e 61 6d 65 29 20 44 4f 20 55 50  LICT(name) DO UP
24790 44 41 54 45 20 53 45 54 0a 20 20 20 20 70 68 6f  DATE SET.    pho
247a0 6e 65 6e 75 6d 62 65 72 3d 65 78 63 6c 75 64 65  nenumber=exclude
247b0 64 2e 70 68 6f 6e 65 6e 75 6d 62 65 72 2c 0a 20  d.phonenumber,. 
247c0 20 20 20 76 61 6c 69 64 44 61 74 65 3d 65 78 63     validDate=exc
247d0 6c 75 64 65 64 2e 76 61 6c 69 64 44 61 74 65 0a  luded.validDate.
247e0 20 20 57 48 45 52 45 20 65 78 63 6c 75 64 65 64    WHERE excluded
247f0 2e 76 61 6c 69 64 44 61 74 65 3e 70 68 6f 6e 65  .validDate>phone
24800 62 6f 6f 6b 32 2e 76 61 6c 69 64 44 61 74 65 3b  book2.validDate;
24810 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
24820 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68 69 73  ote>..<p>In this
24830 20 6c 61 73 74 20 65 78 61 6d 70 6c 65 2c 20 74   last example, t
24840 68 65 20 70 68 6f 6e 65 62 6f 6f 6b 32 20 65 6e  he phonebook2 en
24850 74 72 79 20 69 73 20 6f 6e 6c 79 0a 75 70 64 61  try is only.upda
24860 74 65 64 20 69 66 20 74 68 65 20 76 61 6c 69 64  ted if the valid
24870 44 61 74 65 20 66 6f 72 20 74 68 65 20 6e 65 77  Date for the new
24880 6c 79 20 69 6e 73 65 72 74 65 64 20 76 61 6c 75  ly inserted valu
24890 65 20 69 73 0a 6e 65 77 65 72 20 74 68 61 6e 20  e is.newer than 
248a0 74 68 65 20 65 6e 74 72 79 20 61 6c 72 65 61 64  the entry alread
248b0 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  y in the table. 
248c0 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 61 6c   If the table al
248d0 72 65 61 64 79 0a 63 6f 6e 74 61 69 6e 73 20 61  ready.contains a
248e0 6e 20 65 6e 74 72 79 20 77 69 74 68 20 74 68 65  n entry with the
248f0 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e 64 20 61   same name and a
24900 20 63 75 72 72 65 6e 74 20 76 61 6c 69 64 44 61   current validDa
24910 74 65 2c 0a 74 68 65 6e 20 74 68 65 20 57 48 45  te,.then the WHE
24920 52 45 20 63 6c 61 75 73 65 20 63 61 75 73 65 73  RE clause causes
24930 20 74 68 65 20 44 4f 20 55 50 44 41 54 45 20 74   the DO UPDATE t
24940 6f 20 62 65 63 6f 6d 65 20 61 20 6e 6f 2d 6f 70  o become a no-op
24950 2e 0a 0a 3c 68 33 3e 4c 69 6d 69 74 61 74 69 6f  ...<h3>Limitatio
24960 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55 50 53 45  ns</h3>..<p>UPSE
24970 52 54 20 64 6f 65 73 20 6e 6f 74 20 63 75 72 72  RT does not curr
24980 65 6e 74 6c 79 20 77 6f 72 6b 20 66 6f 72 20 5b  ently work for [
24990 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e  virtual tables].
249a0 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23  ...<tcl>.#######
249b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
249c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
249d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
249e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
249f0 23 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20  #######.Section 
24a00 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61  {ON CONFLICT cla
24a10 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74 20 7b 7b  use} conflict {{
24a20 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65 7d  conflict clause}
24a30 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 7d 7d 0a   {ON CONFLICT}}.
24a40 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
24a50 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c 69 63 74  Diagram conflict
24a60 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a  -clause.</tcl>..
24a70 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  <p>The ON CONFLI
24a80 43 54 20 63 6c 61 75 73 65 20 69 73 20 61 0a 6e  CT clause is a.n
24a90 6f 6e 2d 73 74 61 6e 64 61 72 64 20 65 78 74 65  on-standard exte
24aa0 6e 73 69 6f 6e 20 73 70 65 63 69 66 69 63 20 74  nsion specific t
24ab0 6f 20 53 51 4c 69 74 65 20 0a 74 68 61 74 20 63  o SQLite .that c
24ac0 61 6e 20 61 70 70 65 61 72 20 69 6e 20 6d 61 6e  an appear in man
24ad0 79 20 6f 74 68 65 72 20 53 51 4c 20 63 6f 6d 6d  y other SQL comm
24ae0 61 6e 64 73 2e 0a 49 74 20 69 73 20 67 69 76 65  ands..It is give
24af0 6e 20 69 74 73 20 6f 77 6e 20 73 65 63 74 69 6f  n its own sectio
24b00 6e 20 69 6e 20 74 68 69 73 20 64 6f 63 75 6d 65  n in this docume
24b10 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 69 73  nt because it is
24b20 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20 73 74 61   not.part of sta
24b30 6e 64 61 72 64 20 53 51 4c 20 61 6e 64 20 74 68  ndard SQL and th
24b40 65 72 65 66 6f 72 65 20 6d 69 67 68 74 20 6e 6f  erefore might no
24b50 74 20 62 65 20 66 61 6d 69 6c 69 61 72 2e 3c 2f  t be familiar.</
24b60 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f  p>..<p>The ON CO
24b70 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 64 65  NFLICT clause de
24b80 73 63 72 69 62 65 64 20 68 65 72 65 20 68 61 73  scribed here has
24b90 20 62 65 65 6e 20 61 20 70 61 72 74 20 6f 66 0a   been a part of.
24ba0 53 51 4c 69 74 65 20 73 69 6e 63 65 20 62 65 66  SQLite since bef
24bb0 6f 72 65 20 76 65 72 73 69 6f 6e 20 33 2e 30 2e  ore version 3.0.
24bc0 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e 30 2e 30  0 ([dateof:3.0.0
24bd0 5d 29 2e 20 20 54 68 65 20 70 68 72 61 73 65 0a  ]).  The phrase.
24be0 22 4f 4e 26 6e 62 73 70 3b 43 4f 4e 46 4c 49 43  "ON&nbsp;CONFLIC
24bf0 54 22 20 69 73 20 61 6c 73 6f 20 70 61 72 74 20  T" is also part 
24c00 6f 66 20 5b 55 50 53 45 52 54 5d 2c 20 77 68 69  of [UPSERT], whi
24c10 63 68 20 69 73 20 61 6e 20 65 78 74 65 6e 73 69  ch is an extensi
24c20 6f 6e 0a 74 6f 20 5b 49 4e 53 45 52 54 5d 20 61  on.to [INSERT] a
24c30 64 64 65 64 20 69 6e 20 76 65 72 73 69 6f 6e 20  dded in version 
24c40 33 2e 32 34 2e 30 20 28 5b 64 61 74 65 6f 66 3a  3.24.0 ([dateof:
24c50 33 2e 32 34 2e 30 5d 29 2e 20 20 44 6f 20 6e 6f  3.24.0]).  Do no
24c60 74 0a 63 6f 6e 66 75 73 65 20 74 68 65 73 65 20  t.confuse these 
24c70 74 77 6f 20 73 65 70 61 72 61 74 65 20 75 73 65  two separate use
24c80 73 20 6f 66 20 74 68 65 20 22 4f 4e 26 6e 62 73  s of the "ON&nbs
24c90 70 3b 43 4f 4e 46 4c 49 43 54 22 20 70 68 72 61  p;CONFLICT" phra
24ca0 73 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 73 79 6e  se...<p>^The syn
24cb0 74 61 78 20 66 6f 72 20 74 68 65 20 4f 4e 20 43  tax for the ON C
24cc0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69  ONFLICT clause i
24cd0 73 20 61 73 20 73 68 6f 77 6e 20 61 62 6f 76 65  s as shown above
24ce0 20 66 6f 72 0a 74 68 65 20 43 52 45 41 54 45 20   for.the CREATE 
24cf0 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64 2e 20 20  TABLE command.  
24d00 5e 46 6f 72 20 74 68 65 20 49 4e 53 45 52 54 20  ^For the INSERT 
24d10 61 6e 64 0a 55 50 44 41 54 45 20 63 6f 6d 6d 61  and.UPDATE comma
24d20 6e 64 73 2c 20 74 68 65 20 6b 65 79 77 6f 72 64  nds, the keyword
24d30 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 22 20  s "ON CONFLICT" 
24d40 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 20  are replaced by 
24d50 22 4f 52 22 20 73 6f 20 74 68 61 74 0a 74 68 65  "OR" so that.the
24d60 20 73 79 6e 74 61 78 20 72 65 61 64 73 20 6d 6f   syntax reads mo
24d70 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e 20 20 46  re naturally.  F
24d80 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 6e 73 74  or example, inst
24d90 65 61 64 20 6f 66 0a 22 49 4e 53 45 52 54 20 4f  ead of."INSERT O
24da0 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
24db0 45 22 20 77 65 20 68 61 76 65 20 22 49 4e 53 45  E" we have "INSE
24dc0 52 54 20 4f 52 20 49 47 4e 4f 52 45 22 2e 0a 54  RT OR IGNORE"..T
24dd0 68 65 20 6b 65 79 77 6f 72 64 73 20 63 68 61 6e  he keywords chan
24de0 67 65 20 62 75 74 20 74 68 65 20 6d 65 61 6e 69  ge but the meani
24df0 6e 67 20 6f 66 20 74 68 65 20 63 6c 61 75 73 65  ng of the clause
24e00 20 69 73 20 74 68 65 20 73 61 6d 65 0a 65 69 74   is the same.eit
24e10 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a 0a 3c 70  her way.</p>..<p
24e20 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  >The ON CONFLICT
24e30 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20   clause applies 
24e40 74 6f 20 5b 55 4e 49 51 55 45 5d 2c 20 5b 4e 4f  to [UNIQUE], [NO
24e50 54 20 4e 55 4c 4c 5d 2c 0a 5b 43 48 45 43 4b 5d  T NULL],.[CHECK]
24e60 2c 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b  , and [PRIMARY K
24e70 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  EY] constraints.
24e80 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  .The ON CONFLICT
24e90 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f 65 73 20   algorithm does 
24ea0 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20 5b 46 4f  not.apply to [FO
24eb0 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
24ec0 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65 20 61 72  aints]..There ar
24ed0 65 20 66 69 76 65 20 63 6f 6e 66 6c 69 63 74 20  e five conflict 
24ee0 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
24ef0 69 74 68 6d 20 63 68 6f 69 63 65 73 3a 0a 52 4f  ithm choices:.RO
24f00 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54 2c 20 46  LLBACK, ABORT, F
24f10 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20 61 6e 64  AIL, IGNORE, and
24f20 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68 65 20 64   REPLACE..^The d
24f30 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20  efault conflict 
24f40 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
24f50 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 20 20  ithm is ABORT.  
24f60 54 68 69 73 0a 69 73 20 77 68 61 74 20 74 68 65  This.is what the
24f70 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a 3c 64 6c  y mean:</p>..<dl
24f80 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c 42 41 43  >.<dt><b>ROLLBAC
24f90 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  K</b></dt>.<dd><
24fa0 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
24fb0 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
24fc0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
24fd0 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42 41 43 4b  rs, the ROLLBACK
24fe0 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f  .resolution algo
24ff0 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65  rithm aborts the
25000 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61   current SQL sta
25010 74 65 6d 65 6e 74 20 77 69 74 68 0a 61 6e 20 53  tement with.an S
25020 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
25030 20 65 72 72 6f 72 20 61 6e 64 20 72 6f 6c 6c 73   error and rolls
25040 20 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e   back the curren
25050 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  t transaction..^
25060 49 66 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f  If no transactio
25070 6e 20 69 73 0a 61 63 74 69 76 65 20 28 6f 74 68  n is.active (oth
25080 65 72 20 74 68 61 6e 20 74 68 65 20 69 6d 70 6c  er than the impl
25090 69 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ied transaction 
250a0 74 68 61 74 20 69 73 20 63 72 65 61 74 65 64 20  that is created 
250b0 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d 61 6e 64  on every.command
250c0 29 20 74 68 65 6e 20 74 68 65 20 52 4f 4c 4c 42  ) then the ROLLB
250d0 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ACK resolution a
250e0 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b 73 20 74  lgorithm works t
250f0 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 0a 41  he same as the.A
25100 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 2e 3c  BORT algorithm.<
25110 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62  /p></dd>..<dt><b
25120 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64 74 3e 0a  >ABORT</b></dt>.
25130 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e  <dd><p> ^When an
25140 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73   applicable cons
25150 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
25160 20 6f 63 63 75 72 73 2c 20 74 68 65 20 41 42 4f   occurs, the ABO
25170 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  RT.resolution al
25180 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20 74  gorithm aborts t
25190 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73  he current SQL s
251a0 74 61 74 65 6d 65 6e 74 0a 77 69 74 68 20 61 6e  tatement.with an
251b0 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
251c0 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 62 61 63  NT error and bac
251d0 6b 73 20 6f 75 74 20 61 6e 79 20 63 68 61 6e 67  ks out any chang
251e0 65 73 0a 6d 61 64 65 20 62 79 20 74 68 65 20 63  es.made by the c
251f0 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65  urrent SQL state
25200 6d 65 6e 74 3b 20 62 75 74 20 63 68 61 6e 67 65  ment; but change
25210 73 20 63 61 75 73 65 64 0a 62 79 20 70 72 69 6f  s caused.by prio
25220 72 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  r SQL statements
25230 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
25240 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 72 65   transaction are
25250 20 70 72 65 73 65 72 76 65 64 20 61 6e 64 20 74   preserved and t
25260 68 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 72  he.transaction r
25270 65 6d 61 69 6e 73 20 61 63 74 69 76 65 2e 0a 54  emains active..T
25280 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75  his is the defau
25290 6c 74 20 62 65 68 61 76 69 6f 72 20 61 6e 64 20  lt behavior and 
252a0 74 68 65 20 62 65 68 61 76 69 6f 72 20 73 70 65  the behavior spe
252b0 63 69 66 69 65 64 20 62 79 20 74 68 65 20 53 51  cified by the SQ
252c0 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f 70 3e 3c  L.standard.</p><
252d0 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 46 41 49  /dd>..<dt><b>FAI
252e0 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  L</b></dt>.<dd><
252f0 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61 70 70 6c  p> ^When an appl
25300 69 63 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e  icable constrain
25310 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
25320 72 73 2c 20 74 68 65 20 46 41 49 4c 0a 72 65 73  rs, the FAIL.res
25330 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68  olution algorith
25340 6d 20 61 62 6f 72 74 73 20 74 68 65 20 63 75 72  m aborts the cur
25350 72 65 6e 74 20 53 51 4c 20 73 74 61 74 65 6d 65  rent SQL stateme
25360 6e 74 20 77 69 74 68 20 61 6e 0a 53 51 4c 49 54  nt with an.SQLIT
25370 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 65 72 72  E_CONSTRAINT err
25380 6f 72 2e 20 20 5e 42 75 74 20 74 68 65 20 46 41  or.  ^But the FA
25390 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20 64 6f  IL resolution do
253a0 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f 75 74 20  es not.back out 
253b0 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 6f 66  prior changes of
253c0 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
253d0 6e 74 20 74 68 61 74 20 66 61 69 6c 65 64 20 6e  nt that failed n
253e0 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e 64 20 74  or does.it end t
253f0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  he transaction..
25400 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66  ^For example, if
25410 20 61 6e 20 55 50 44 41 54 45 0a 73 74 61 74 65   an UPDATE.state
25420 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 65 64  ment encountered
25430 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
25440 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68 65 20 31  olation on the 1
25450 30 30 74 68 20 72 6f 77 20 74 68 61 74 0a 69 74  00th row that.it
25460 20 61 74 74 65 6d 70 74 73 20 74 6f 20 75 70 64   attempts to upd
25470 61 74 65 2c 20 74 68 65 6e 20 74 68 65 20 66 69  ate, then the fi
25480 72 73 74 20 39 39 20 72 6f 77 20 63 68 61 6e 67  rst 99 row chang
25490 65 73 20 61 72 65 20 70 72 65 73 65 72 76 65 64  es are preserved
254a0 0a 62 75 74 20 63 68 61 6e 67 65 73 20 74 6f 20  .but changes to 
254b0 72 6f 77 73 20 31 30 30 20 61 6e 64 20 62 65 79  rows 100 and bey
254c0 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63 75 72 2e  ond never occur.
254d0 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
254e0 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c 2f 64 74  b>IGNORE</b></dt
254f0 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e 20  >.<dd><p> ^When 
25500 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63 6f  an applicable co
25510 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
25520 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74 68 65 20  on occurs, .the 
25530 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75 74 69 6f  IGNORE resolutio
25540 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73 6b 69 70  n algorithm skip
25550 73 20 74 68 65 20 6f 6e 65 20 72 6f 77 20 74 68  s the one row th
25560 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74 68 65 20  at contains.the 
25570 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
25580 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 69 6e 75  tion and continu
25590 65 73 20 70 72 6f 63 65 73 73 69 6e 67 20 73 75  es processing su
255a0 62 73 65 71 75 65 6e 74 20 72 6f 77 73 0a 6f 66  bsequent rows.of
255b0 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
255c0 6e 74 20 61 73 20 69 66 20 6e 6f 74 68 69 6e 67  nt as if nothing
255d0 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a 4f 74 68   went wrong..Oth
255e0 65 72 20 72 6f 77 73 20 62 65 66 6f 72 65 20 61  er rows before a
255f0 6e 64 20 61 66 74 65 72 20 74 68 65 20 72 6f 77  nd after the row
25600 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 65 64 20   that.contained 
25610 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  the constraint v
25620 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 69 6e 73  iolation are ins
25630 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
25640 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e 6f 20 65  .normally. ^No e
25650 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64  rror is returned
25660 20 77 68 65 6e 20 74 68 65 20 49 47 4e 4f 52 45   when the IGNORE
25670 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
25680 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68 6d 20 69  tion.algorithm i
25690 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f 64 64 3e  s used.</p></dd>
256a0 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c 41 43 45  ..<dt><b>REPLACE
256b0 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </b></dt>.<dd><p
256c0 3e 20 5e 57 68 65 6e 20 61 20 5b 55 4e 49 51 55  > ^When a [UNIQU
256d0 45 5d 20 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b  E] or [PRIMARY K
256e0 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  EY] constraint v
256f0 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c  iolation occurs,
25700 20 0a 74 68 65 20 52 45 50 4c 41 43 45 20 61 6c   .the REPLACE al
25710 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74 65 73 20  gorithm.deletes 
25720 70 72 65 2d 65 78 69 73 74 69 6e 67 20 72 6f 77  pre-existing row
25730 73 20 74 68 61 74 20 61 72 65 20 63 61 75 73 69  s that are causi
25740 6e 67 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ng the constrain
25750 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70 72 69 6f  t violation.prio
25760 72 20 74 6f 20 69 6e 73 65 72 74 69 6e 67 20 6f  r to inserting o
25770 72 20 75 70 64 61 74 69 6e 67 20 74 68 65 20 63  r updating the c
25780 75 72 72 65 6e 74 20 72 6f 77 20 61 6e 64 20 74  urrent row and t
25790 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 74 69  he command conti
257a0 6e 75 65 73 20 0a 65 78 65 63 75 74 69 6e 67 20  nues .executing 
257b0 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66 20 61 20  normally..^If a 
257c0 5b 4e 4f 54 20 4e 55 4c 4c 5d 20 63 6f 6e 73 74  [NOT NULL] const
257d0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
257e0 6f 63 63 75 72 73 2c 20 74 68 65 20 52 45 50 4c  occurs, the REPL
257f0 41 43 45 20 63 6f 6e 66 6c 69 63 74 0a 72 65 73  ACE conflict.res
25800 6f 6c 75 74 69 6f 6e 20 72 65 70 6c 61 63 65 73  olution replaces
25810 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20   the NULL value 
25820 77 69 74 68 0a 74 68 65 20 64 65 66 61 75 6c 74  with.the default
25830 20 76 61 6c 75 65 20 66 6f 72 20 74 68 61 74 20   value for that 
25840 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66 20 74 68  column, or if th
25850 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20 6e 6f 20  e column has no 
25860 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 2c 20 74  default.value, t
25870 68 65 6e 20 74 68 65 20 41 42 4f 52 54 20 61 6c  hen the ABORT al
25880 67 6f 72 69 74 68 6d 20 69 73 20 75 73 65 64 2e  gorithm is used.
25890 0a 5e 49 66 20 61 20 5b 43 48 45 43 4b 5d 20 63  .^If a [CHECK] c
258a0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
258b0 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
258c0 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74  REPLACE conflict
258d0 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f   resolution.algo
258e0 72 69 74 68 6d 20 61 6c 77 61 79 73 20 77 6f 72  rithm always wor
258f0 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54 2e 3c 2f  ks like ABORT.</
25900 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  p>..<p>^When the
25910 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63   REPLACE conflic
25920 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72  t resolution str
25930 61 74 65 67 79 20 64 65 6c 65 74 65 73 20 72 6f  ategy deletes ro
25940 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 73  ws in order to.s
25950 61 74 69 73 66 79 20 61 20 63 6f 6e 73 74 72 61  atisfy a constra
25960 69 6e 74 2c 20 5b 43 52 45 41 54 45 20 54 52 49  int, [CREATE TRI
25970 47 47 45 52 20 7c 20 64 65 6c 65 74 65 20 74 72  GGER | delete tr
25980 69 67 67 65 72 73 5d 20 66 69 72 65 20 69 66 20  iggers] fire if 
25990 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b 72 65 63  and only if.[rec
259a0 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 20  ursive_triggers 
259b0 70 72 61 67 6d 61 20 7c 20 72 65 63 75 72 73 69  pragma | recursi
259c0 76 65 20 74 72 69 67 67 65 72 73 5d 20 61 72 65  ve triggers] are
259d0 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e 0a 0a 3c   enabled.</p>..<
259e0 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f  p>^The [sqlite3_
259f0 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c 20 75 70  update_hook | up
25a00 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73 20 6e 6f  date hook] is no
25a10 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72 20 72 6f  t invoked for ro
25a20 77 73 20 74 68 61 74 0a 61 72 65 20 64 65 6c 65  ws that.are dele
25a30 74 65 64 20 62 79 20 74 68 65 20 52 45 50 4c 41  ted by the REPLA
25a40 43 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  CE conflict reso
25a50 6c 75 74 69 6f 6e 20 73 74 72 61 74 65 67 79 2e  lution strategy.
25a60 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52 45 50 4c    ^Nor does.REPL
25a70 41 43 45 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  ACE increment th
25a80 65 20 5b 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  e [sqlite3_chang
25a90 65 73 20 7c 20 63 68 61 6e 67 65 20 63 6f 75 6e  es | change coun
25aa0 74 65 72 5d 2e 0a 54 68 65 20 65 78 63 65 70 74  ter]..The except
25ab0 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f 72 73 20  ional behaviors 
25ac0 64 65 66 69 6e 65 64 20 69 6e 20 74 68 69 73 20  defined in this 
25ad0 70 61 72 61 67 72 61 70 68 20 6d 69 67 68 74 20  paragraph might 
25ae0 63 68 61 6e 67 65 20 0a 69 6e 20 61 20 66 75 74  change .in a fut
25af0 75 72 65 20 72 65 6c 65 61 73 65 2e 3c 2f 70 3e  ure release.</p>
25b00 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20  .</dl>..<p>^The 
25b10 61 6c 67 6f 72 69 74 68 6d 20 73 70 65 63 69 66  algorithm specif
25b20 69 65 64 20 69 6e 20 74 68 65 20 4f 52 20 63 6c  ied in the OR cl
25b30 61 75 73 65 20 6f 66 20 61 6e 20 49 4e 53 45 52  ause of an INSER
25b40 54 20 6f 72 20 55 50 44 41 54 45 0a 6f 76 65 72  T or UPDATE.over
25b50 72 69 64 65 73 20 61 6e 79 20 61 6c 67 6f 72 69  rides any algori
25b60 74 68 6d 20 73 70 65 63 69 66 69 65 64 20 69 6e  thm specified in
25b70 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 2e   a CREATE TABLE.
25b80 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72 69 74 68  .^If no algorith
25b90 6d 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61  m is specified a
25ba0 6e 79 77 68 65 72 65 2c 20 74 68 65 20 41 42 4f  nywhere, the ABO
25bb0 52 54 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  RT algorithm is 
25bc0 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  used.</p>..<tcl>
25bd0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
25be0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
25c20 53 65 63 74 69 6f 6e 20 52 45 49 4e 44 45 58 20  Section REINDEX 
25c30 72 65 69 6e 64 65 78 20 52 45 49 4e 44 45 58 0a  reindex REINDEX.
25c40 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c 65  .RecursiveBubble
25c50 44 69 61 67 72 61 6d 20 72 65 69 6e 64 65 78 2d  Diagram reindex-
25c60 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
25c70 5e 54 68 65 20 52 45 49 4e 44 45 58 20 63 6f 6d  ^The REINDEX com
25c80 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20  mand is used to 
25c90 64 65 6c 65 74 65 20 61 6e 64 20 72 65 63 72 65  delete and recre
25ca0 61 74 65 20 69 6e 64 69 63 65 73 20 66 72 6f 6d  ate indices from
25cb0 20 73 63 72 61 74 63 68 2e 0a 54 68 69 73 20 69   scratch..This i
25cc0 73 20 75 73 65 66 75 6c 20 77 68 65 6e 20 74 68  s useful when th
25cd0 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
25ce0 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  a collation sequ
25cf0 65 6e 63 65 20 68 61 73 20 63 68 61 6e 67 65 64  ence has changed
25d00 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74  ..</p>..<p>^If t
25d10 68 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f  he REINDEX keywo
25d20 72 64 20 69 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77  rd is not follow
25d30 65 64 20 62 79 20 61 20 63 6f 6c 6c 61 74 69 6f  ed by a collatio
25d40 6e 2d 73 65 71 75 65 6e 63 65 20 6f 72 20 64 61  n-sequence or da
25d50 74 61 62 61 73 65 20 0a 6f 62 6a 65 63 74 20 69  tabase .object i
25d60 64 65 6e 74 69 66 69 65 72 2c 20 74 68 65 6e 20  dentifier, then 
25d70 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61  all indices in a
25d80 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
25d90 62 61 73 65 73 20 61 72 65 20 72 65 62 75 69 6c  bases are rebuil
25da0 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 52  t...<p>^If the R
25db0 45 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 20 69  EINDEX keyword i
25dc0 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
25dd0 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71 75 65 6e  collation-sequen
25de0 63 65 20 6e 61 6d 65 2c 20 74 68 65 6e 0a 61 6c  ce name, then.al
25df0 6c 20 69 6e 64 69 63 65 73 20 69 6e 20 61 6c 6c  l indices in all
25e00 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
25e10 73 65 73 20 74 68 61 74 20 75 73 65 20 74 68 65  ses that use the
25e20 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74 69 6f 6e   named collation
25e30 20 73 65 71 75 65 6e 63 65 73 0a 61 72 65 20 72   sequences.are r
25e40 65 63 72 65 61 74 65 64 2e 20 0a 0a 3c 70 3e 5e  ecreated. ..<p>^
25e50 4f 72 2c 20 69 66 20 74 68 65 20 61 72 67 75 6d  Or, if the argum
25e60 65 6e 74 20 61 74 74 61 63 68 65 64 20 74 6f 20  ent attached to 
25e70 74 68 65 20 52 45 49 4e 44 45 58 20 69 64 65 6e  the REINDEX iden
25e80 74 69 66 69 65 73 20 61 20 73 70 65 63 69 66 69  tifies a specifi
25e90 63 20 0a 64 61 74 61 62 61 73 65 20 74 61 62 6c  c .database tabl
25ea0 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 69  e, then all indi
25eb0 63 65 73 20 61 74 74 61 63 68 65 64 20 74 6f 20  ces attached to 
25ec0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
25ed0 6c 65 20 61 72 65 20 72 65 62 75 69 6c 74 2e 20  le are rebuilt. 
25ee0 0a 5e 49 66 20 69 74 20 69 64 65 6e 74 69 66 69  .^If it identifi
25ef0 65 73 20 61 20 73 70 65 63 69 66 69 63 20 64 61  es a specific da
25f00 74 61 62 61 73 65 20 69 6e 64 65 78 2c 20 74 68  tabase index, th
25f10 65 6e 20 6a 75 73 74 20 74 68 61 74 20 69 6e 64  en just that ind
25f20 65 78 20 69 73 20 72 65 63 72 65 61 74 65 64 2e  ex is recreated.
25f30 0a 0a 3c 70 3e 5e 46 6f 72 20 61 20 63 6f 6d 6d  ..<p>^For a comm
25f40 61 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  and of the form 
25f50 22 52 45 49 4e 44 45 58 20 3c 69 3e 6e 61 6d 65  "REINDEX <i>name
25f60 3c 2f 69 3e 22 2c 20 61 20 6d 61 74 63 68 0a 61  </i>", a match.a
25f70 67 61 69 6e 73 74 20 3c 79 79 74 65 72 6d 3e 63  gainst <yyterm>c
25f80 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 3c 2f 79  ollation-name</y
25f90 79 74 65 72 6d 3e 20 74 61 6b 65 73 20 70 72 65  yterm> takes pre
25fa0 63 65 64 65 6e 63 65 20 6f 76 65 72 20 61 20 6d  cedence over a m
25fb0 61 74 63 68 0a 61 67 61 69 6e 73 74 20 3c 79 79  atch.against <yy
25fc0 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c  term>index-name<
25fd0 2f 79 79 74 65 72 6d 3e 20 6f 72 20 3c 79 79 74  /yyterm> or <yyt
25fe0 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d 65 3c 2f  erm>table-name</
25ff0 79 79 74 65 72 6d 3e 2e 0a 54 68 69 73 20 61 6d  yyterm>..This am
26000 62 69 67 75 69 74 79 20 69 6e 20 74 68 65 20 73  biguity in the s
26010 79 6e 74 61 78 20 6d 61 79 20 62 65 20 61 76 6f  yntax may be avo
26020 69 64 65 64 20 62 79 20 61 6c 77 61 79 73 20 73  ided by always s
26030 70 65 63 69 66 79 69 6e 67 20 61 0a 3c 79 79 74  pecifying a.<yyt
26040 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c  erm>schema-name<
26050 2f 79 79 74 65 72 6d 3e 20 77 68 65 6e 20 72 65  /yyterm> when re
26060 69 6e 64 65 78 69 6e 67 20 61 20 73 70 65 63 69  indexing a speci
26070 66 69 63 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  fic table or ind
26080 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23  ex...<tcl>.#####
26090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
260a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
260b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
260c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
260d0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
260e0 6f 6e 20 52 45 50 4c 41 43 45 20 72 65 70 6c 61  on REPLACE repla
260f0 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c 2f 74 63  ce REPLACE..</tc
26100 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52 45 50 4c  l>..<p>^The REPL
26110 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61  ACE command is a
26120 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
26130 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7c 20  "[ON CONFLICT | 
26140 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43  INSERT OR REPLAC
26150 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f 66 20 74  E]".variant of t
26160 68 65 20 5b 49 4e 53 45 52 54 5d 20 63 6f 6d 6d  he [INSERT] comm
26170 61 6e 64 2e 20 20 0a 54 68 69 73 20 61 6c 69 61  and.  .This alia
26180 73 20 69 73 20 70 72 6f 76 69 64 65 64 20 66 6f  s is provided fo
26190 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  r compatibility 
261a0 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
261b0 73 65 20 65 6e 67 69 6e 65 73 2e 20 20 53 65 65  se engines.  See
261c0 20 74 68 65 20 0a 5b 49 4e 53 45 52 54 5d 20 63   the .[INSERT] c
261d0 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65 6e 74 61  ommand documenta
261e0 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
261f0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
26200 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e 0a 23 23  </p>  ..<tcl>.##
26210 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26220 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26250 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
26260 63 74 69 6f 6e 20 7b 57 49 54 48 20 63 6c 61 75  ction {WITH clau
26270 73 65 7d 20 77 69 74 68 20 7b 7b 63 6f 6d 6d 6f  se} with {{commo
26280 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
26290 6f 6e 73 7d 20 57 49 54 48 7d 0a 0a 52 65 63 75  ons} WITH}..Recu
262a0 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
262b0 61 6d 20 77 69 74 68 2d 63 6c 61 75 73 65 0a 3c  am with-clause.<
262c0 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d 6d 6f 6e  /tcl>..<p>Common
262d0 20 54 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f   Table Expressio
262e0 6e 73 20 6f 72 20 43 54 45 73 20 61 63 74 20 6c  ns or CTEs act l
262f0 69 6b 65 20 74 65 6d 70 6f 72 61 72 79 20 5b 76  ike temporary [v
26300 69 65 77 73 5d 20 74 68 61 74 20 65 78 69 73 74  iews] that exist
26310 0a 6f 6e 6c 79 20 66 6f 72 20 74 68 65 20 64 75  .only for the du
26320 72 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67  ration of a sing
26330 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
26340 2e 20 20 54 68 65 72 65 20 61 72 65 20 74 77 6f  .  There are two
26350 20 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d 6d 6f 6e   kinds of.common
26360 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
26370 6e 73 3a 20 22 6f 72 64 69 6e 61 72 79 22 20 61  ns: "ordinary" a
26380 6e 64 20 22 72 65 63 75 72 73 69 76 65 22 2e 20  nd "recursive". 
26390 4f 72 64 69 6e 61 72 79 20 0a 63 6f 6d 6d 6f 6e  Ordinary .common
263a0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
263b0 6e 73 20 61 72 65 20 68 65 6c 70 66 75 6c 20 66  ns are helpful f
263c0 6f 72 20 6d 61 6b 69 6e 67 0a 71 75 65 72 69 65  or making.querie
263d0 73 20 65 61 73 69 65 72 20 74 6f 20 75 6e 64 65  s easier to unde
263e0 72 73 74 61 6e 64 20 62 79 20 66 61 63 74 6f 72  rstand by factor
263f0 69 6e 67 0a 73 75 62 71 75 65 72 69 65 73 20 6f  ing.subqueries o
26400 75 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 53  ut of the main S
26410 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 0a 52 65  QL statement..Re
26420 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74  cursive common t
26430 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
26440 0a 70 72 6f 76 69 64 65 20 74 68 65 20 61 62 69  .provide the abi
26450 6c 69 74 79 20 74 6f 20 64 6f 20 68 69 65 72 61  lity to do hiera
26460 72 63 68 69 63 61 6c 20 6f 72 0a 72 65 63 75 72  rchical or.recur
26470 73 69 76 65 20 71 75 65 72 69 65 73 20 6f 66 20  sive queries of 
26480 74 72 65 65 73 20 61 6e 64 20 67 72 61 70 68 73  trees and graphs
26490 2c 20 61 20 63 61 70 61 62 69 6c 69 74 79 0a 74  , a capability.t
264a0 68 61 74 20 69 73 20 6e 6f 74 20 6f 74 68 65 72  hat is not other
264b0 77 69 73 65 20 61 76 61 69 6c 61 62 6c 65 20 69  wise available i
264c0 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61  n the SQL langua
264d0 67 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63 6f 6d 6d  ge...<p>All comm
264e0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
264f0 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72 79 20 61  ions (ordinary a
26500 6e 64 20 72 65 63 75 72 73 69 76 65 29 20 61 72  nd recursive) ar
26510 65 20 0a 63 72 65 61 74 65 64 20 62 79 20 70 72  e .created by pr
26520 65 70 65 6e 64 69 6e 67 20 61 20 57 49 54 48 20  epending a WITH 
26530 63 6c 61 75 73 65 20 69 6e 20 66 72 6f 6e 74 20  clause in front 
26540 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d 2c 20 5b  of a [SELECT], [
26550 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c 45 54 45  INSERT], [DELETE
26560 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45 5d 20 73  ],.or [UPDATE] s
26570 74 61 74 65 6d 65 6e 74 2e 20 20 41 20 73 69 6e  tatement.  A sin
26580 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  gle WITH clause 
26590 63 61 6e 20 73 70 65 63 69 66 79 20 6f 6e 65 20  can specify one 
265a0 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f 6e 20 74  or more.common t
265b0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
265c0 2c 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 20  , some of which 
265d0 61 72 65 20 6f 72 64 69 6e 61 72 79 20 61 6e 64  are ordinary and
265e0 20 73 6f 6d 65 20 6f 66 20 77 68 69 63 68 0a 61   some of which.a
265f0 72 65 20 72 65 63 75 72 73 69 76 65 2e 0a 0a 3c  re recursive...<
26600 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
26610 6f 72 64 69 6e 61 72 79 63 74 65 20 7b 6f 72 64  ordinarycte {ord
26620 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62  inary common tab
26630 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 7d 3c  le expressions}<
26640 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64 69 6e 61  /tcl>.<h3>Ordina
26650 72 79 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c 65 20  ry Common Table 
26660 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68 33 3e  Expressions</h3>
26670 0a 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e 61 72 79  ..<p>An ordinary
26680 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
26690 70 72 65 73 73 69 6f 6e 20 77 6f 72 6b 73 20 61  pression works a
266a0 73 20 69 66 20 69 74 20 77 65 72 65 20 61 20 5b  s if it were a [
266b0 76 69 65 77 5d 20 74 68 61 74 0a 65 78 69 73 74  view] that.exist
266c0 73 20 66 6f 72 20 74 68 65 20 64 75 72 61 74 69  s for the durati
266d0 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 73  on of a single s
266e0 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72 64 69 6e  tatement.  Ordin
266f0 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
26700 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65  .expressions are
26710 20 75 73 65 66 75 6c 20 66 6f 72 20 66 61 63 74   useful for fact
26720 6f 72 69 6e 67 20 6f 75 74 20 73 75 62 71 75 65  oring out subque
26730 72 69 65 73 20 61 6e 64 20 6d 61 6b 69 6e 67 20  ries and making 
26740 74 68 65 20 6f 76 65 72 61 6c 6c 0a 53 51 4c 20  the overall.SQL 
26750 73 74 61 74 65 6d 65 6e 74 20 65 61 73 69 65 72  statement easier
26760 20 74 6f 20 72 65 61 64 20 61 6e 64 20 75 6e 64   to read and und
26770 65 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e 41 20 57  erstand...<p>A W
26780 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e 20 63  ITH clause can c
26790 6f 6e 74 61 69 6e 20 6f 72 64 69 6e 61 72 79 20  ontain ordinary 
267a0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
267b0 72 65 73 73 69 6f 6e 73 20 65 76 65 6e 20 69 66  ressions even if
267c0 0a 69 74 20 69 6e 63 6c 75 64 65 73 20 74 68 65  .it includes the
267d0 20 52 45 43 55 52 53 49 56 45 20 6b 65 79 77 6f   RECURSIVE keywo
267e0 72 64 2e 20 20 54 68 65 20 75 73 65 20 6f 66 20  rd.  The use of 
267f0 52 45 43 55 52 53 49 56 45 20 64 6f 65 73 20 6e  RECURSIVE does n
26800 6f 74 20 66 6f 72 63 65 0a 63 6f 6d 6d 6f 6e 20  ot force.common 
26810 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
26820 73 20 74 6f 20 62 65 20 72 65 63 75 72 73 69 76  s to be recursiv
26830 65 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f 66 72 61  e...<tcl>.hd_fra
26840 67 6d 65 6e 74 20 72 65 63 75 72 73 69 76 65 63  gment recursivec
26850 74 65 20 7b 72 65 63 75 72 73 69 76 65 20 63 6f  te {recursive co
26860 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
26870 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65 63 75 72  ssions} \.{recur
26880 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  sive common tabl
26890 65 20 65 78 70 72 65 73 73 69 6f 6e 7d 20 7b 72  e expression} {r
268a0 65 63 75 72 73 69 76 65 20 71 75 65 72 79 7d 0a  ecursive query}.
268b0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 65 63 75 72  </tcl>.<h3>Recur
268c0 73 69 76 65 20 43 6f 6d 6d 6f 6e 20 54 61 62 6c  sive Common Tabl
268d0 65 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f 68  e Expressions</h
268e0 33 3e 0a 0a 3c 70 3e 41 20 72 65 63 75 72 73 69  3>..<p>A recursi
268f0 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ve common table 
26900 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62  expression can b
26910 65 20 75 73 65 64 20 74 6f 20 77 72 69 74 65 20  e used to write 
26920 61 20 71 75 65 72 79 20 74 68 61 74 0a 77 61 6c  a query that.wal
26930 6b 73 20 61 20 74 72 65 65 20 6f 72 20 67 72 61  ks a tree or gra
26940 70 68 2e 20 20 41 20 72 65 63 75 72 73 69 76 65  ph.  A recursive
26950 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
26960 70 72 65 73 73 69 6f 6e 20 68 61 73 20 74 68 65  pression has the
26970 20 73 61 6d 65 0a 62 61 73 69 63 20 73 79 6e 74   same.basic synt
26980 61 78 20 61 73 20 61 6e 20 6f 72 64 69 6e 61 72  ax as an ordinar
26990 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  y common table e
269a0 78 70 72 65 73 73 69 6f 6e 2c 20 62 75 74 20 77  xpression, but w
269b0 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ith the followin
269c0 67 0a 61 64 64 69 74 69 6f 6e 61 6c 20 66 65 61  g.additional fea
269d0 74 75 72 65 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  tures:..<ol>.<li
269e0 3e 20 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73  > The "[select-s
269f0 74 6d 74 5d 22 0a 20 20 20 20 20 6d 75 73 74 20  tmt]".     must 
26a00 62 65 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 73  be a [compound s
26a10 65 6c 65 63 74 5d 20 77 68 65 72 65 20 74 68 65  elect] where the
26a20 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 63 6f 6d   right-most [com
26a30 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 20  pound-operator] 
26a40 69 73 0a 20 20 20 20 20 65 69 74 68 65 72 20 55  is.     either U
26a50 4e 49 4f 4e 20 6f 72 20 55 4e 49 4f 4e 20 41 4c  NION or UNION AL
26a60 4c 2e 0a 3c 6c 69 3e 20 54 68 65 20 74 61 62 6c  L..<li> The tabl
26a70 65 20 6e 61 6d 65 64 20 6f 6e 20 74 68 65 20 6c  e named on the l
26a80 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
26a90 20 74 68 65 20 41 53 20 6b 65 79 77 6f 72 64 20   the AS keyword 
26aa0 6d 75 73 74 20 61 70 70 65 61 72 0a 20 20 20 20  must appear.    
26ab0 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20 69 6e   exactly once in
26ac0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
26ad0 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f   of the right-mo
26ae0 73 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  st SELECT statem
26af0 65 6e 74 0a 20 20 20 20 20 6f 66 20 74 68 65 20  ent.     of the 
26b00 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 2c  compound select,
26b10 20 61 6e 64 20 6e 6f 77 68 65 72 65 20 65 6c 73   and nowhere els
26b20 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 6f 20  e..</ol>..<p>To 
26b30 70 75 74 20 69 74 20 61 6e 6f 74 68 65 72 20 77  put it another w
26b40 61 79 2c 20 61 20 72 65 63 75 72 73 69 76 65 20  ay, a recursive 
26b50 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
26b60 72 65 73 73 69 6f 6e 20 6d 75 73 74 0a 6c 6f 6f  ression must.loo
26b70 6b 20 6c 69 6b 65 20 74 68 65 20 66 6f 6c 6c 6f  k like the follo
26b80 77 69 6e 67 3a 0a 0a 3c 74 63 6c 3e 52 65 63 75  wing:..<tcl>Recu
26b90 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
26ba0 61 6d 20 72 65 63 75 72 73 69 76 65 2d 63 74 65  am recursive-cte
26bb0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61 6c 6c 20  </tcl>..<p>Call 
26bc0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
26bd0 62 79 20 74 68 65 20 5b 63 74 65 2d 74 61 62 6c  by the [cte-tabl
26be0 65 2d 6e 61 6d 65 5d 20 69 6e 20 61 20 72 65 63  e-name] in a rec
26bf0 75 72 73 69 76 65 0a 63 6f 6d 6d 6f 6e 20 74 61  ursive.common ta
26c00 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  ble expression t
26c10 68 65 20 22 72 65 63 75 72 73 69 76 65 20 74 61  he "recursive ta
26c20 62 6c 65 22 2e 0a 49 6e 20 74 68 65 20 5b 72 65  ble"..In the [re
26c30 63 75 72 73 69 76 65 2d 63 74 65 5d 20 62 75 62  cursive-cte] bub
26c40 62 6c 65 20 64 69 61 67 72 61 6d 20 61 62 6f 76  ble diagram abov
26c50 65 2c 20 74 68 65 20 72 65 63 75 72 73 69 76 65  e, the recursive
26c60 0a 74 61 62 6c 65 20 6d 75 73 74 20 61 70 70 65  .table must appe
26c70 61 72 20 65 78 61 63 74 6c 79 20 6f 6e 63 65 20  ar exactly once 
26c80 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
26c90 73 65 20 6f 66 20 74 68 65 20 0a 3c 79 79 74 65  se of the .<yyte
26ca0 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c  rm>recursive-sel
26cb0 65 63 74 3c 2f 79 79 74 65 72 6d 3e 0a 61 6e 64  ect</yyterm>.and
26cc0 20 6d 75 73 74 20 6e 6f 74 20 61 70 70 65 61 72   must not appear
26cd0 20 61 6e 79 77 68 65 72 65 20 65 6c 73 65 20 69   anywhere else i
26ce0 6e 20 65 69 74 68 65 72 20 74 68 65 0a 3c 79 79  n either the.<yy
26cf0 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c  term>initial-sel
26d00 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 6f 72 20  ect</yyterm> or 
26d10 74 68 65 0a 3c 79 79 74 65 72 6d 3e 72 65 63 75  the.<yyterm>recu
26d20 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79  rsive-select</yy
26d30 74 65 72 6d 3e 2c 20 69 6e 63 6c 75 64 69 6e 67  term>, including
26d40 20 73 75 62 71 75 65 72 69 65 73 2e 0a 54 68 65   subqueries..The
26d50 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c   <yyterm>initial
26d60 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e  -select</yyterm>
26d70 20 6d 61 79 20 62 65 0a 61 20 5b 63 6f 6d 70 6f   may be.a [compo
26d80 75 6e 64 20 73 65 6c 65 63 74 5d 2c 20 62 75 74  und select], but
26d90 20 69 74 20 6d 61 79 20 6e 6f 74 20 69 6e 63 6c   it may not incl
26da0 75 64 65 20 61 6e 20 4f 52 44 45 52 20 42 59 2c  ude an ORDER BY,
26db0 20 4c 49 4d 49 54 2c 20 6f 72 20 4f 46 46 53 45   LIMIT, or OFFSE
26dc0 54 2e 0a 54 68 65 20 72 65 63 75 72 73 69 76 65  T..The recursive
26dd0 2d 73 65 6c 65 63 74 20 6d 75 73 74 20 62 65 20  -select must be 
26de0 61 20 73 69 6d 70 6c 65 20 73 65 6c 65 63 74 2c  a simple select,
26df0 20 6e 6f 74 20 61 20 63 6f 6d 70 6f 75 6e 64 2e   not a compound.
26e00 20 20 54 68 65 0a 72 65 63 75 72 73 69 76 65 2d    The.recursive-
26e10 73 65 6c 65 63 74 20 69 73 20 61 6c 6c 6f 77 65  select is allowe
26e20 64 20 74 6f 20 69 6e 63 6c 75 64 65 20 61 6e 20  d to include an 
26e30 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d 49 54 2c  ORDER BY, LIMIT,
26e40 20 61 6e 64 2f 6f 72 20 4f 46 46 53 45 54 2e 0a   and/or OFFSET..
26e50 0a 3c 70 3e 54 68 65 20 62 61 73 69 63 20 61 6c  .<p>The basic al
26e60 67 6f 72 69 74 68 6d 20 66 6f 72 20 63 6f 6d 70  gorithm for comp
26e70 75 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  uting the conten
26e80 74 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69  t of the recursi
26e90 76 65 20 74 61 62 6c 65 0a 69 73 20 61 73 20 66  ve table.is as f
26ea0 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c  ollows:..<ol>.<l
26eb0 69 3e 20 52 75 6e 20 74 68 65 20 3c 79 79 74 65  i> Run the <yyte
26ec0 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63  rm>initial-selec
26ed0 74 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20 61  t</yyterm> and a
26ee0 64 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 74  dd the results t
26ef0 6f 20 61 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20  o a queue..<li> 
26f00 57 68 69 6c 65 20 74 68 65 20 71 75 65 75 65 20  While the queue 
26f10 69 73 20 6e 6f 74 20 65 6d 70 74 79 3a 0a 3c 6f  is not empty:.<o
26f20 6c 20 74 79 70 65 3d 22 61 22 3e 0a 3c 6c 69 3e  l type="a">.<li>
26f30 20 45 78 74 72 61 63 74 20 61 20 73 69 6e 67 6c   Extract a singl
26f40 65 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 71  e row from the q
26f50 75 65 75 65 2e 0a 3c 6c 69 3e 20 49 6e 73 65 72  ueue..<li> Inser
26f60 74 20 74 68 61 74 20 73 69 6e 67 6c 65 20 72 6f  t that single ro
26f70 77 20 69 6e 74 6f 20 74 68 65 20 72 65 63 75 72  w into the recur
26f80 73 69 76 65 20 74 61 62 6c 65 0a 3c 6c 69 3e 20  sive table.<li> 
26f90 50 72 65 74 65 6e 64 20 74 68 61 74 20 74 68 65  Pretend that the
26fa0 20 73 69 6e 67 6c 65 20 72 6f 77 20 6a 75 73 74   single row just
26fb0 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68   extracted is th
26fc0 65 20 6f 6e 6c 79 0a 20 20 20 20 20 72 6f 77 20  e only.     row 
26fd0 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  in the recursive
26fe0 20 74 61 62 6c 65 20 61 6e 64 20 72 75 6e 20 74   table and run t
26ff0 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
27000 65 63 74 2c 0a 20 20 20 20 20 61 64 64 69 6e 67  ect,.     adding
27010 20 61 6c 6c 20 72 65 73 75 6c 74 73 20 74 6f 20   all results to 
27020 74 68 65 20 71 75 65 75 65 2e 0a 3c 2f 6f 6c 3e  the queue..</ol>
27030 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 62  .</ol>..<p>The b
27040 61 73 69 63 20 70 72 6f 63 65 64 75 72 65 20 61  asic procedure a
27050 62 6f 76 65 20 6d 61 79 20 6d 6f 64 69 66 69 65  bove may modifie
27060 64 20 62 79 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d by the followi
27070 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 72 75  ng additional ru
27080 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c  les:..<ul>.<li><
27090 70 3e 0a 20 20 49 66 20 61 20 55 4e 49 4f 4e 20  p>.  If a UNION 
270a0 6f 70 65 72 61 74 6f 72 20 63 6f 6e 6e 65 63 74  operator connect
270b0 73 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e  s the <yyterm>in
270c0 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79  itial-select</yy
270d0 74 65 72 6d 3e 20 77 69 74 68 20 74 68 65 0a 20  term> with the. 
270e0 20 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69   <yyterm>recursi
270f0 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72  ve-select</yyter
27100 6d 3e 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 64  m>, then only ad
27110 64 20 72 6f 77 73 20 74 6f 20 74 68 65 20 71 75  d rows to the qu
27120 65 75 65 20 69 66 20 0a 20 20 6e 6f 20 69 64 65  eue if .  no ide
27130 6e 74 69 63 61 6c 20 72 6f 77 20 68 61 73 0a 20  ntical row has. 
27140 20 62 65 65 6e 20 70 72 65 76 69 6f 75 73 6c 79   been previously
27150 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75   added to the qu
27160 65 75 65 2e 20 20 52 65 70 65 61 74 65 64 20 72  eue.  Repeated r
27170 6f 77 73 20 61 72 65 20 64 69 73 63 61 72 64 65  ows are discarde
27180 64 20 62 65 66 6f 72 65 20 62 65 69 6e 67 0a 20  d before being. 
27190 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75   added to the qu
271a0 65 75 65 20 65 76 65 6e 20 69 66 20 74 68 65 20  eue even if the 
271b0 72 65 70 65 61 74 65 64 20 72 6f 77 73 20 68 61  repeated rows ha
271c0 76 65 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  ve already been 
271d0 65 78 74 72 61 63 74 65 64 0a 20 20 66 72 6f 6d  extracted.  from
271e0 20 74 68 65 20 71 75 65 75 65 20 62 79 20 74 68   the queue by th
271f0 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 65 70  e recursion step
27200 2e 20 20 49 66 20 74 68 65 20 6f 70 65 72 61 74  .  If the operat
27210 6f 72 20 69 73 20 55 4e 49 4f 4e 20 41 4c 4c 2c  or is UNION ALL,
27220 0a 20 20 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73  .  then all rows
27230 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 62 6f   generated by bo
27240 74 68 20 74 68 65 20 3c 79 79 74 65 72 6d 3e 69  th the <yyterm>i
27250 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79  nitial-select</y
27260 79 74 65 72 6d 3e 20 61 6e 64 20 74 68 65 0a 20  yterm> and the. 
27270 20 3c 79 79 74 65 72 6d 3e 72 65 63 75 72 73 69   <yyterm>recursi
27280 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65 72  ve-select</yyter
27290 6d 3e 20 61 72 65 20 61 6c 77 61 79 73 20 61 64  m> are always ad
272a0 64 65 64 20 74 6f 20 74 68 65 20 71 75 65 75 65  ded to the queue
272b0 20 65 76 65 6e 20 69 66 0a 20 20 74 68 65 79 20   even if.  they 
272c0 61 72 65 20 72 65 70 65 61 74 73 2e 0a 20 20 57  are repeats..  W
272d0 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20  hen determining 
272e0 69 66 20 61 20 72 6f 77 20 69 73 20 72 65 70 65  if a row is repe
272f0 61 74 65 64 2c 20 4e 55 4c 4c 20 76 61 6c 75 65  ated, NULL value
27300 73 20 63 6f 6d 70 61 72 65 0a 20 20 65 71 75 61  s compare.  equa
27310 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72  l to one another
27320 20 61 6e 64 20 6e 6f 74 20 65 71 75 61 6c 20 74   and not equal t
27330 6f 20 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75  o any other valu
27340 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 54 68 65  e..<li><p>.  The
27350 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 69   LIMIT clause, i
27360 66 20 70 72 65 73 65 6e 74 2c 20 64 65 74 65 72  f present, deter
27370 6d 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d 75  mines the maximu
27380 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  m number of rows
27390 20 74 68 61 74 0a 20 20 77 69 6c 6c 20 65 76 65   that.  will eve
273a0 72 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68  r be added to th
273b0 65 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  e recursive tabl
273c0 65 20 69 6e 20 73 74 65 70 20 32 62 2e 0a 20 20  e in step 2b..  
273d0 4f 6e 63 65 20 74 68 65 20 6c 69 6d 69 74 20 69  Once the limit i
273e0 73 20 72 65 61 63 68 65 64 2c 20 74 68 65 20 72  s reached, the r
273f0 65 63 75 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a  ecursion stops..
27400 20 20 41 20 6c 69 6d 69 74 20 6f 66 20 7a 65 72    A limit of zer
27410 6f 20 6d 65 61 6e 73 20 74 68 61 74 20 6e 6f 20  o means that no 
27420 72 6f 77 73 20 61 72 65 20 65 76 65 72 20 61 64  rows are ever ad
27430 64 65 64 20 74 6f 20 74 68 65 0a 20 20 72 65 63  ded to the.  rec
27440 75 72 73 69 76 65 20 74 61 62 6c 65 2c 20 61 6e  ursive table, an
27450 64 20 61 20 6e 65 67 61 74 69 76 65 20 6c 69 6d  d a negative lim
27460 69 74 20 6d 65 61 6e 73 20 61 6e 20 75 6e 6c 69  it means an unli
27470 6d 69 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20  mited number of 
27480 72 6f 77 73 0a 20 20 6d 61 79 20 62 65 20 61 64  rows.  may be ad
27490 64 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72  ded to the recur
274a0 73 69 76 65 20 74 61 62 6c 65 2e 0a 3c 6c 69 3e  sive table..<li>
274b0 3c 70 3e 0a 20 20 54 68 65 20 4f 46 46 53 45 54  <p>.  The OFFSET
274c0 20 63 6c 61 75 73 65 2c 20 69 66 20 69 74 20 69   clause, if it i
274d0 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 68 61  s present and ha
274e0 73 20 61 20 70 6f 73 69 74 69 76 65 20 76 61 6c  s a positive val
274f0 75 65 20 4e 2c 20 70 72 65 76 65 6e 74 73 20 74  ue N, prevents t
27500 68 65 0a 20 20 66 69 72 73 74 20 4e 20 72 6f 77  he.  first N row
27510 73 20 66 72 6f 6d 20 62 65 69 6e 67 20 61 64 64  s from being add
27520 65 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73  ed to the recurs
27530 69 76 65 20 74 61 62 6c 65 2e 0a 20 20 54 68 65  ive table..  The
27540 20 66 69 72 73 74 20 4e 20 72 6f 77 73 20 61 72   first N rows ar
27550 65 20 73 74 69 6c 6c 20 70 72 6f 63 65 73 73 65  e still processe
27560 64 0a 20 20 62 79 20 74 68 65 20 3c 79 79 74 65  d.  by the <yyte
27570 72 6d 3e 72 65 63 75 72 73 69 76 65 2d 73 65 6c  rm>recursive-sel
27580 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 26 6d 64  ect</yyterm> &md
27590 61 73 68 3b 20 74 68 65 79 0a 20 20 6a 75 73 74  ash; they.  just
275a0 20 61 72 65 20 6e 6f 74 20 61 64 64 65 64 20 74   are not added t
275b0 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
275c0 74 61 62 6c 65 2e 20 20 52 6f 77 73 20 61 72 65  table.  Rows are
275d0 20 6e 6f 74 20 63 6f 75 6e 74 65 64 20 74 6f 77   not counted tow
275e0 61 72 64 0a 20 20 66 75 6c 66 69 6c 6c 69 6e 67  ard.  fulfilling
275f0 20 74 68 65 20 4c 49 4d 49 54 20 75 6e 74 69 6c   the LIMIT until
27600 20 61 6c 6c 20 4f 46 46 53 45 54 20 72 6f 77 73   all OFFSET rows
27610 20 68 61 76 65 20 62 65 65 6e 20 73 6b 69 70 70   have been skipp
27620 65 64 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20 49 66  ed..<li><p>.  If
27630 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61   an ORDER BY cla
27640 75 73 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20  use is present, 
27650 69 74 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  it determines th
27660 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
27670 20 72 6f 77 73 0a 20 20 61 72 65 20 65 78 74 72   rows.  are extr
27680 61 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 71  acted from the q
27690 75 65 75 65 20 69 6e 20 73 74 65 70 20 32 61 2e  ueue in step 2a.
276a0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
276b0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
276c0 2c 0a 20 20 74 68 65 6e 20 74 68 65 20 6f 72 64  ,.  then the ord
276d0 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73  er in which rows
276e0 20 61 72 65 20 65 78 74 72 61 63 74 65 64 20 69   are extracted i
276f0 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 28 49  s undefined.  (I
27700 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20  n the current.  
27710 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20  implementation, 
27720 74 68 65 20 71 75 65 75 65 20 62 65 63 6f 6d 65  the queue become
27730 73 20 61 20 46 49 46 4f 20 69 66 20 74 68 65 20  s a FIFO if the 
27740 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
27750 69 73 20 6f 6d 69 74 74 65 64 2c 0a 20 20 62 75  is omitted,.  bu
27760 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 73  t applications s
27770 68 6f 75 6c 64 20 6e 6f 74 20 64 65 70 65 6e 64  hould not depend
27780 20 6f 6e 20 74 68 61 74 20 66 61 63 74 20 73 69   on that fact si
27790 6e 63 65 20 69 74 20 6d 69 67 68 74 20 63 68 61  nce it might cha
277a0 6e 67 65 2e 29 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63  nge.).</ul>..<tc
277b0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63  l>hd_fragment rc
277c0 65 78 31 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 52 65  ex1</tcl>.<h4>Re
277d0 63 75 72 73 69 76 65 20 51 75 65 72 79 20 45 78  cursive Query Ex
277e0 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e  amples</h4>..<p>
277f0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75  The following qu
27800 65 72 79 20 72 65 74 75 72 6e 73 20 61 6c 6c 20  ery returns all 
27810 69 6e 74 65 67 65 72 73 20 62 65 74 77 65 65 6e  integers between
27820 20 31 20 61 6e 64 20 31 30 30 30 30 30 30 3a 0a   1 and 1000000:.
27830 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
27840 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56  e>.WITH RECURSIV
27850 45 0a 20 20 63 6e 74 28 78 29 20 41 53 20 28 56  E.  cnt(x) AS (V
27860 41 4c 55 45 53 28 31 29 20 55 4e 49 4f 4e 20 41  ALUES(1) UNION A
27870 4c 4c 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52  LL SELECT x+1 FR
27880 4f 4d 20 63 6e 74 20 57 48 45 52 45 20 78 3c 31  OM cnt WHERE x<1
27890 30 30 30 30 30 30 29 0a 53 45 4c 45 43 54 20 78  000000).SELECT x
278a0 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65   FROM cnt;.</pre
278b0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
278c0 3c 70 3e 43 6f 6e 73 69 64 65 72 20 68 6f 77 20  <p>Consider how 
278d0 74 68 69 73 20 71 75 65 72 79 20 77 6f 72 6b 73  this query works
278e0 2e 20 20 54 68 65 20 69 6e 69 74 69 61 6c 2d 73  .  The initial-s
278f0 65 6c 65 63 74 0a 72 75 6e 73 20 66 69 72 73 74  elect.runs first
27900 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 73   and returns a s
27910 69 6e 67 6c 65 20 72 6f 77 0a 77 69 74 68 20 61  ingle row.with a
27920 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 20 22   single column "
27930 31 22 2e 20 20 54 68 69 73 20 6f 6e 65 20 72 6f  1".  This one ro
27940 77 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68  w is added to th
27950 65 20 71 75 65 75 65 2e 20 20 49 6e 0a 73 74 65  e queue.  In.ste
27960 70 20 32 61 2c 20 74 68 61 74 20 6f 6e 65 20 72  p 2a, that one r
27970 6f 77 20 69 73 20 65 78 74 72 61 63 74 65 64 20  ow is extracted 
27980 66 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20 61  from the queue a
27990 6e 64 20 61 64 64 65 64 20 74 6f 20 22 63 6e 74  nd added to "cnt
279a0 22 2e 0a 54 68 65 6e 20 74 68 65 20 72 65 63 75  "..Then the recu
279b0 72 73 69 76 65 2d 73 65 6c 65 63 74 20 69 73 20  rsive-select is 
279c0 72 75 6e 20 69 6e 20 61 63 63 6f 72 64 61 6e 63  run in accordanc
279d0 65 20 77 69 74 68 20 73 74 65 70 20 32 63 20 67  e with step 2c g
279e0 65 6e 65 72 61 74 69 6e 67 0a 61 20 73 69 6e 67  enerating.a sing
279f0 6c 65 20 6e 65 77 20 72 6f 77 20 77 69 74 68 20  le new row with 
27a00 76 61 6c 75 65 20 22 32 22 20 74 6f 20 61 64 64  value "2" to add
27a10 20 74 6f 20 74 68 65 20 71 75 65 75 65 2e 20 20   to the queue.  
27a20 54 68 65 20 71 75 65 75 65 20 73 74 69 6c 6c 0a  The queue still.
27a30 68 61 73 20 6f 6e 65 20 72 6f 77 2c 20 73 6f 20  has one row, so 
27a40 73 74 65 70 20 32 20 72 65 70 65 61 74 73 2e 20  step 2 repeats. 
27a50 20 54 68 65 20 22 32 22 20 72 6f 77 20 69 73 20   The "2" row is 
27a60 65 78 74 72 61 63 74 65 64 20 61 6e 64 20 61 64  extracted and ad
27a70 64 65 64 20 74 6f 20 74 68 65 0a 72 65 63 75 72  ded to the.recur
27a80 73 69 76 65 20 74 61 62 6c 65 20 62 79 20 73 74  sive table by st
27a90 65 70 73 20 32 61 20 61 6e 64 20 32 62 2e 20 20  eps 2a and 2b.  
27aa0 54 68 65 6e 20 74 68 65 20 72 6f 77 20 63 6f 6e  Then the row con
27ab0 74 61 69 6e 69 6e 67 20 32 20 69 73 20 75 73 65  taining 2 is use
27ac0 64 20 0a 61 73 20 69 66 20 69 74 20 77 65 72 65  d .as if it were
27ad0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 63 6f   the complete co
27ae0 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65 63  ntent of the rec
27af0 75 72 73 69 76 65 20 74 61 62 6c 65 20 61 6e 64  ursive table and
27b00 20 74 68 65 20 0a 72 65 63 75 72 73 69 76 65 2d   the .recursive-
27b10 73 65 6c 65 63 74 20 69 73 20 72 75 6e 20 61 67  select is run ag
27b20 61 69 6e 2c 20 72 65 73 75 6c 74 69 6e 67 20 69  ain, resulting i
27b30 6e 20 61 20 72 6f 77 20 77 69 74 68 20 76 61 6c  n a row with val
27b40 75 65 20 22 33 22 20 62 65 69 6e 67 20 61 64 64  ue "3" being add
27b50 65 64 0a 74 6f 20 74 68 65 20 71 75 65 75 65 2e  ed.to the queue.
27b60 20 20 54 68 69 73 20 72 65 70 65 61 74 73 20 39    This repeats 9
27b70 39 39 39 39 39 20 74 69 6d 65 73 20 75 6e 74 69  99999 times unti
27b80 6c 20 66 69 6e 61 6c 6c 79 20 61 74 20 73 74 65  l finally at ste
27b90 70 20 32 61 20 74 68 65 0a 6f 6e 6c 79 20 76 61  p 2a the.only va
27ba0 6c 75 65 20 6f 6e 20 74 68 65 20 71 75 65 75 65  lue on the queue
27bb0 20 69 73 20 61 20 72 6f 77 20 63 6f 6e 74 61 69   is a row contai
27bc0 6e 69 6e 67 20 31 30 30 30 30 30 30 2e 20 20 54  ning 1000000.  T
27bd0 68 61 74 20 72 6f 77 20 69 73 0a 65 78 74 72 61  hat row is.extra
27be0 63 74 65 64 20 61 6e 64 20 61 64 64 65 64 20 74  cted and added t
27bf0 6f 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  o the recursive 
27c00 74 61 62 6c 65 2e 20 20 42 75 74 20 74 68 69 73  table.  But this
27c10 20 74 69 6d 65 2c 20 74 68 65 0a 57 48 45 52 45   time, the.WHERE
27c20 20 63 6c 61 75 73 65 20 63 61 75 73 65 73 20 74   clause causes t
27c30 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c  he recursive-sel
27c40 65 63 74 20 74 6f 20 72 65 74 75 72 6e 20 6e 6f  ect to return no
27c50 20 72 6f 77 73 2c 20 73 6f 20 74 68 65 0a 71 75   rows, so the.qu
27c60 65 75 65 20 72 65 6d 61 69 6e 73 20 65 6d 70 74  eue remains empt
27c70 79 20 61 6e 64 20 74 68 65 20 72 65 63 75 72 73  y and the recurs
27c80 69 6f 6e 20 73 74 6f 70 73 2e 0a 0a 3c 70 3e 3c  ion stops...<p><
27c90 62 3e 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6e  b>Optimization n
27ca0 6f 74 65 3a 3c 2f 62 3e 0a 49 6e 20 74 68 65 20  ote:</b>.In the 
27cb0 64 69 73 63 75 73 73 69 6f 6e 20 61 62 6f 76 65  discussion above
27cc0 2c 20 73 74 61 74 65 6d 65 6e 74 73 20 6c 69 6b  , statements lik
27cd0 65 20 22 69 6e 73 65 72 74 20 74 68 65 20 72 6f  e "insert the ro
27ce0 77 20 69 6e 74 6f 0a 74 68 65 20 72 65 63 75 72  w into.the recur
27cf0 73 69 76 65 20 74 61 62 6c 65 22 20 73 68 6f 75  sive table" shou
27d00 6c 64 20 62 65 20 75 6e 64 65 72 73 74 6f 6f 64  ld be understood
27d10 20 63 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 6e   conceptually, n
27d20 6f 74 20 6c 69 74 65 72 61 6c 6c 79 2e 0a 49 74  ot literally..It
27d30 20 73 6f 75 6e 64 73 20 61 73 20 69 66 20 53 51   sounds as if SQ
27d40 4c 69 74 65 20 69 73 20 61 63 63 75 6d 75 6c 61  Lite is accumula
27d50 74 69 6e 67 20 61 20 68 75 67 65 20 74 61 62 6c  ting a huge tabl
27d60 65 0a 63 6f 6e 74 61 69 6e 69 6e 67 20 6f 6e 65  e.containing one
27d70 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73 2c 20 74   million rows, t
27d80 68 65 6e 20 67 6f 69 6e 67 20 62 61 63 6b 20 61  hen going back a
27d90 6e 64 20 73 63 61 6e 6e 69 6e 67 20 74 68 61 74  nd scanning that
27da0 20 74 61 62 6c 65 0a 66 72 6f 6d 20 74 6f 70 20   table.from top 
27db0 74 6f 20 62 6f 74 74 6f 6d 20 74 6f 20 67 65 6e  to bottom to gen
27dc0 65 72 61 74 65 20 74 68 65 20 72 65 73 75 6c 74  erate the result
27dd0 2e 20 20 57 68 61 74 20 72 65 61 6c 6c 79 20 68  .  What really h
27de0 61 70 70 65 6e 73 0a 69 73 20 74 68 61 74 20 74  appens.is that t
27df0 68 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a  he query optimiz
27e00 65 72 20 73 65 65 73 20 74 68 61 74 20 76 61 6c  er sees that val
27e10 75 65 73 20 69 6e 20 74 68 65 0a 22 63 6e 74 22  ues in the."cnt"
27e20 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65   recursive table
27e30 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 6f   are only used o
27e40 6e 63 65 2e 20 20 53 6f 20 61 73 20 65 61 63 68  nce.  So as each
27e50 20 72 6f 77 20 69 73 20 61 64 64 65 64 20 74 6f   row is added to
27e60 0a 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74  .the recursive t
27e70 61 62 6c 65 2c 20 74 68 61 74 20 72 6f 77 20 69  able, that row i
27e80 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 72 65  s immediately re
27e90 74 75 72 6e 65 64 20 61 73 20 61 20 72 65 73 75  turned as a resu
27ea0 6c 74 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 53  lt of the main.S
27eb0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
27ec0 61 6e 64 20 74 68 65 6e 20 64 69 73 63 61 72 64  and then discard
27ed0 65 64 2e 20 20 53 51 4c 69 74 65 20 64 6f 65 73  ed.  SQLite does
27ee0 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61 63   <em>not</em> ac
27ef0 63 75 6d 75 6c 61 74 65 0a 61 20 74 65 6d 70 6f  cumulate.a tempo
27f00 72 61 72 79 20 74 61 62 6c 65 20 63 6f 6e 74 61  rary table conta
27f10 69 6e 69 6e 67 20 61 20 6d 69 6c 6c 69 6f 6e 20  ining a million 
27f20 72 6f 77 73 2e 20 20 56 65 72 79 20 6c 69 74 74  rows.  Very litt
27f30 6c 65 20 6d 65 6d 6f 72 79 20 69 73 0a 6e 65 65  le memory is.nee
27f40 64 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 61  ded to run the a
27f50 62 6f 76 65 20 65 78 61 6d 70 6c 65 2e 20 20 48  bove example.  H
27f60 6f 77 65 76 65 72 2c 20 69 66 20 74 68 65 20 65  owever, if the e
27f70 78 61 6d 70 6c 65 20 68 61 64 20 75 73 65 64 0a  xample had used.
27f80 55 4e 49 4f 4e 20 69 6e 73 74 65 61 64 20 6f 66  UNION instead of
27f90 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 74 68 65 6e   UNION ALL, then
27fa0 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 68 61   SQLite would ha
27fb0 76 65 20 68 61 64 20 74 6f 20 6b 65 65 70 20 61  ve had to keep a
27fc0 72 6f 75 6e 64 0a 61 6c 6c 20 70 72 65 76 69 6f  round.all previo
27fd0 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 63  usly generated c
27fe0 6f 6e 74 65 6e 74 20 69 6e 20 6f 72 64 65 72 20  ontent in order 
27ff0 74 6f 20 63 68 65 63 6b 20 66 6f 72 20 64 75 70  to check for dup
28000 6c 69 63 61 74 65 73 2e 0a 46 6f 72 20 74 68 69  licates..For thi
28010 73 20 72 65 61 73 6f 6e 2c 20 70 72 6f 67 72 61  s reason, progra
28020 6d 6d 65 72 73 20 73 68 6f 75 6c 64 20 73 74 72  mmers should str
28030 69 76 65 20 74 6f 20 75 73 65 20 55 4e 49 4f 4e  ive to use UNION
28040 20 41 4c 4c 20 69 6e 73 74 65 61 64 0a 6f 66 20   ALL instead.of 
28050 55 4e 49 4f 4e 20 77 68 65 6e 20 66 65 61 73 69  UNION when feasi
28060 62 6c 65 2e 0a 0a 3c 70 3e 48 65 72 65 20 69 73  ble...<p>Here is
28070 20 61 20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20   a variation on 
28080 74 68 65 20 70 72 65 76 69 6f 75 73 20 65 78 61  the previous exa
28090 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  mple:..<blockquo
280a0 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45  te><pre>.WITH RE
280b0 43 55 52 53 49 56 45 0a 20 20 63 6e 74 28 78 29  CURSIVE.  cnt(x)
280c0 20 41 53 20 28 0a 20 20 20 20 20 53 45 4c 45 43   AS (.     SELEC
280d0 54 20 31 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41  T 1.     UNION A
280e0 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43 54 20 78  LL.     SELECT x
280f0 2b 31 20 46 52 4f 4d 20 63 6e 74 0a 20 20 20 20  +1 FROM cnt.    
28100 20 20 4c 49 4d 49 54 20 31 30 30 30 30 30 30 0a    LIMIT 1000000.
28110 20 20 29 0a 53 45 4c 45 43 54 20 78 20 46 52 4f    ).SELECT x FRO
28120 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  M cnt;.</pre></b
28130 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
28140 68 65 72 65 20 61 72 65 20 74 77 6f 20 64 69 66  here are two dif
28150 66 65 72 65 6e 63 65 73 20 69 6e 20 74 68 69 73  ferences in this
28160 20 76 61 72 69 61 74 69 6f 6e 2e 20 20 54 68 65   variation.  The
28170 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 20   initial-select 
28180 69 73 0a 22 53 45 4c 45 43 54 20 31 22 20 69 6e  is."SELECT 1" in
28190 73 74 65 61 64 20 6f 66 20 22 56 41 4c 55 45 53  stead of "VALUES
281a0 28 31 29 22 2e 20 20 42 75 74 20 74 68 6f 73 65  (1)".  But those
281b0 20 61 72 65 20 6a 75 73 74 20 64 69 66 66 65 72   are just differ
281c0 65 6e 74 0a 73 79 6e 74 61 78 65 73 20 66 6f 72  ent.syntaxes for
281d0 20 73 61 79 69 6e 67 20 65 78 61 63 74 6c 79 20   saying exactly 
281e0 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 2e 20  the same thing. 
281f0 20 54 68 65 20 6f 74 68 65 72 20 63 68 61 6e 67   The other chang
28200 65 20 69 73 20 74 68 61 74 20 74 68 65 0a 72 65  e is that the.re
28210 63 75 72 73 69 6f 6e 20 69 73 20 73 74 6f 70 70  cursion is stopp
28220 65 64 20 62 79 20 61 20 4c 49 4d 49 54 20 72 61  ed by a LIMIT ra
28230 74 68 65 72 20 74 68 61 6e 20 61 20 57 48 45 52  ther than a WHER
28240 45 20 63 6c 61 75 73 65 2e 20 20 54 68 65 20 75  E clause.  The u
28250 73 65 20 6f 66 0a 4c 49 4d 49 54 20 6d 65 61 6e  se of.LIMIT mean
28260 73 20 74 68 61 74 20 77 68 65 6e 20 74 68 65 20  s that when the 
28270 6f 6e 65 2d 6d 69 6c 6c 69 6f 6e 74 68 20 72 6f  one-millionth ro
28280 77 20 69 73 20 61 64 64 65 64 20 74 6f 20 74 68  w is added to th
28290 65 20 22 63 6e 74 22 20 74 61 62 6c 65 0a 28 61  e "cnt" table.(a
282a0 6e 64 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  nd returned by t
282b0 68 65 20 6d 61 69 6e 20 53 45 4c 45 43 54 2c 20  he main SELECT, 
282c0 74 68 61 6e 6b 73 20 74 6f 20 74 68 65 20 71 75  thanks to the qu
282d0 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 29 0a 74  ery optimizer).t
282e0 68 65 6e 20 74 68 65 20 72 65 63 75 72 73 69 6f  hen the recursio
282f0 6e 20 73 74 6f 70 73 20 69 6d 6d 65 64 69 61 74  n stops immediat
28300 65 6c 79 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ely regardless o
28310 66 20 68 6f 77 20 6d 61 6e 79 20 72 6f 77 73 20  f how many rows 
28320 6d 69 67 68 74 20 62 65 0a 6c 65 66 74 20 69 6e  might be.left in
28330 20 74 68 65 20 71 75 65 75 65 2e 20 20 4f 6e 20   the queue.  On 
28340 6d 6f 72 65 20 63 6f 6d 70 6c 65 78 20 71 75 65  more complex que
28350 72 69 65 73 2c 20 69 74 20 63 61 6e 20 73 6f 6d  ries, it can som
28360 65 74 69 6d 65 73 20 62 65 0a 64 69 66 66 69 63  etimes be.diffic
28370 75 6c 74 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ult to ensure th
28380 61 74 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  at the WHERE cla
28390 75 73 65 20 77 69 6c 6c 20 65 76 65 6e 74 75 61  use will eventua
283a0 6c 6c 79 20 63 61 75 73 65 20 74 68 65 0a 71 75  lly cause the.qu
283b0 65 75 65 20 74 6f 20 64 72 61 69 6e 20 61 6e 64  eue to drain and
283c0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 74   the recursion t
283d0 6f 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75  o terminate.  Bu
283e0 74 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  t the LIMIT clau
283f0 73 65 20 77 69 6c 6c 0a 61 6c 77 61 79 73 20 73  se will.always s
28400 74 6f 70 20 74 68 65 20 72 65 63 75 72 73 69 6f  top the recursio
28410 6e 2e 20 20 53 6f 20 69 74 20 69 73 20 67 6f 6f  n.  So it is goo
28420 64 20 70 72 61 63 74 69 63 65 20 74 6f 20 61 6c  d practice to al
28430 77 61 79 73 20 69 6e 63 6c 75 64 65 20 61 0a 4c  ways include a.L
28440 49 4d 49 54 20 63 6c 61 75 73 65 20 61 73 20 61  IMIT clause as a
28450 20 73 61 66 65 74 79 20 69 66 20 61 6e 20 75 70   safety if an up
28460 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
28470 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 63   size of the rec
28480 75 72 73 69 6f 6e 20 0a 69 73 20 6b 6e 6f 77 6e  ursion .is known
28490 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
284a0 65 6e 74 20 72 63 65 78 32 3c 2f 74 63 6c 3e 0a  ent rcex2</tcl>.
284b0 3c 68 34 3e 48 69 65 72 61 72 63 68 69 63 61 6c  <h4>Hierarchical
284c0 20 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c   Query Examples<
284d0 2f 68 34 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65  /h4>..<p>Conside
284e0 72 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 64  r a table that d
284f0 65 73 63 72 69 62 65 73 20 74 68 65 20 6d 65 6d  escribes the mem
28500 62 65 72 73 20 6f 66 20 61 6e 20 6f 72 67 61 6e  bers of an organ
28510 69 7a 61 74 69 6f 6e 20 61 73 0a 77 65 6c 6c 20  ization as.well 
28520 61 73 20 74 68 65 20 63 68 61 69 6e 2d 6f 66 2d  as the chain-of-
28530 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69 6e 20 74  command within t
28540 68 61 74 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e  hat organization
28550 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
28560 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
28570 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65 20 54 45  E org(.  name TE
28580 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  XT PRIMARY KEY,.
28590 20 20 62 6f 73 73 20 54 45 58 54 20 52 45 46 45    boss TEXT REFE
285a0 52 45 4e 43 45 53 20 6f 72 67 2c 0a 20 20 68 65  RENCES org,.  he
285b0 69 67 68 74 20 49 4e 54 2c 0a 20 20 2d 2d 20 6f  ight INT,.  -- o
285c0 74 68 65 72 20 63 6f 6e 74 65 6e 74 20 6f 6d 69  ther content omi
285d0 74 74 65 64 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  tted.);.</pre></
285e0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
285f0 45 76 65 72 79 20 6d 65 6d 62 65 72 20 69 6e 20  Every member in 
28600 74 68 65 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e  the organization
28610 20 68 61 73 20 61 20 6e 61 6d 65 2c 20 61 6e 64   has a name, and
28620 20 6d 6f 73 74 20 6d 65 6d 62 65 72 73 20 68 61   most members ha
28630 76 65 0a 61 20 73 69 6e 67 6c 65 20 62 6f 73 73  ve.a single boss
28640 2e 20 20 28 54 68 65 20 68 65 61 64 20 6f 66 20  .  (The head of 
28650 74 68 65 20 77 68 6f 6c 65 20 6f 72 67 61 6e 69  the whole organi
28660 7a 61 74 69 6f 6e 20 68 61 73 20 61 20 4e 55 4c  zation has a NUL
28670 4c 0a 22 62 6f 73 73 22 20 66 69 65 6c 64 2e 29  L."boss" field.)
28680 20 54 68 65 20 72 6f 77 73 20 6f 66 20 74 68 65   The rows of the
28690 20 22 6f 72 67 22 20 74 61 62 6c 65 20 66 6f 72   "org" table for
286a0 6d 20 61 20 74 72 65 65 2e 0a 0a 3c 70 3e 48 65  m a tree...<p>He
286b0 72 65 20 69 73 20 61 20 71 75 65 72 79 20 74 68  re is a query th
286c0 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  at computes the 
286d0 61 76 65 72 61 67 65 20 68 65 69 67 68 74 20 6f  average height o
286e0 76 65 72 20 65 76 65 72 79 6f 6e 65 0a 69 6e 20  ver everyone.in 
286f0 41 6c 69 63 65 27 73 20 6f 72 67 61 6e 69 7a 61  Alice's organiza
28700 74 69 6f 6e 2c 20 69 6e 63 6c 75 64 69 6e 67 20  tion, including 
28710 41 6c 69 63 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  Alice:..<blockqu
28720 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
28730 45 43 55 52 53 49 56 45 0a 20 20 77 6f 72 6b 73  ECURSIVE.  works
28740 5f 66 6f 72 5f 61 6c 69 63 65 28 6e 29 20 41 53  _for_alice(n) AS
28750 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41   (.    VALUES('A
28760 6c 69 63 65 27 29 0a 20 20 20 20 55 4e 49 4f 4e  lice').    UNION
28770 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65  .    SELECT name
28780 20 46 52 4f 4d 20 6f 72 67 2c 20 77 6f 72 6b 73   FROM org, works
28790 5f 66 6f 72 5f 61 6c 69 63 65 0a 20 20 20 20 20  _for_alice.     
287a0 57 48 45 52 45 20 6f 72 67 2e 62 6f 73 73 3d 77  WHERE org.boss=w
287b0 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 2e 6e  orks_for_alice.n
287c0 0a 20 20 29 0a 53 45 4c 45 43 54 20 61 76 67 28  .  ).SELECT avg(
287d0 68 65 69 67 68 74 29 20 46 52 4f 4d 20 6f 72 67  height) FROM org
287e0 0a 20 57 48 45 52 45 20 6f 72 67 2e 6e 61 6d 65  . WHERE org.name
287f0 20 49 4e 20 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c   IN works_for_al
28800 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  ice;.</pre></blo
28810 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
28820 20 6e 65 78 74 20 65 78 61 6d 70 6c 65 20 75 73   next example us
28830 65 73 20 74 77 6f 20 0a 63 6f 6d 6d 6f 6e 20 74  es two .common t
28840 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
28850 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 57 49 54   in a single WIT
28860 48 20 63 6c 61 75 73 65 2e 20 20 0a 54 68 65 20  H clause.  .The 
28870 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
28880 72 65 63 6f 72 64 73 20 61 20 66 61 6d 69 6c 79  records a family
28890 20 74 72 65 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75   tree:..<blockqu
288a0 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
288b0 20 54 41 42 4c 45 20 66 61 6d 69 6c 79 28 0a 20   TABLE family(. 
288c0 20 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41   name TEXT PRIMA
288d0 52 59 20 4b 45 59 2c 0a 20 20 6d 6f 6d 20 54 45  RY KEY,.  mom TE
288e0 58 54 20 52 45 46 45 52 45 4e 43 45 53 20 66 61  XT REFERENCES fa
288f0 6d 69 6c 79 2c 0a 20 20 64 61 64 20 54 45 58 54  mily,.  dad TEXT
28900 20 52 45 46 45 52 45 4e 43 45 53 20 66 61 6d 69   REFERENCES fami
28910 6c 79 2c 0a 20 20 62 6f 72 6e 20 44 41 54 45 54  ly,.  born DATET
28920 49 4d 45 2c 0a 20 20 64 69 65 64 20 44 41 54 45  IME,.  died DATE
28930 54 49 4d 45 2c 20 2d 2d 20 4e 55 4c 4c 20 69 66  TIME, -- NULL if
28940 20 73 74 69 6c 6c 20 61 6c 69 76 65 0a 20 20 2d   still alive.  -
28950 2d 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e 74 0a  - other content.
28960 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
28970 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22  quote>..<p>The "
28980 66 61 6d 69 6c 79 22 20 74 61 62 6c 65 20 69 73  family" table is
28990 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20   similar to the 
289a0 65 61 72 6c 69 65 72 20 22 6f 72 67 22 20 74 61  earlier "org" ta
289b0 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ble except that 
289c0 0a 6e 6f 77 20 74 68 65 72 65 20 61 72 65 20 74  .now there are t
289d0 77 6f 20 70 61 72 65 6e 74 73 20 74 6f 20 65 61  wo parents to ea
289e0 63 68 20 6d 65 6d 62 65 72 2e 0a 57 65 20 77 61  ch member..We wa
289f0 6e 74 20 74 6f 20 6b 6e 6f 77 20 61 6c 6c 20 6c  nt to know all l
28a00 69 76 69 6e 67 20 61 6e 63 65 73 74 6f 72 73 20  iving ancestors 
28a10 6f 66 20 41 6c 69 63 65 2c 20 66 72 6f 6d 20 6f  of Alice, from o
28a20 6c 64 65 73 74 20 74 6f 20 79 6f 75 6e 67 65 73  ldest to younges
28a30 74 2e 0a 41 6e 20 6f 72 64 69 6e 61 72 79 20 63  t..An ordinary c
28a40 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
28a50 65 73 73 69 6f 6e 2c 20 22 70 61 72 65 6e 74 5f  ession, "parent_
28a60 6f 66 22 2c 20 69 73 20 64 65 66 69 6e 65 64 20  of", is defined 
28a70 66 69 72 73 74 2e 20 20 54 68 61 74 0a 6f 72 64  first.  That.ord
28a80 69 6e 61 72 79 20 43 54 45 20 69 73 20 61 20 76  inary CTE is a v
28a90 69 65 77 20 74 68 61 74 20 63 61 6e 20 62 65 20  iew that can be 
28aa0 75 73 65 64 20 74 6f 20 66 69 6e 64 20 61 6c 6c  used to find all
28ab0 20 70 61 72 65 6e 74 73 20 6f 66 20 61 6e 79 0a   parents of any.
28ac0 69 6e 64 69 76 69 64 75 61 6c 2e 20 20 54 68 61  individual.  Tha
28ad0 74 20 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69  t ordinary CTE i
28ae0 73 20 74 68 65 6e 20 75 73 65 64 20 69 6e 20 74  s then used in t
28af0 68 65 20 22 61 6e 63 65 73 74 6f 72 5f 6f 66 5f  he "ancestor_of_
28b00 61 6c 69 63 65 22 0a 72 65 63 75 72 73 69 76 65  alice".recursive
28b10 20 43 54 45 2e 20 20 54 68 65 20 72 65 63 75 72   CTE.  The recur
28b20 73 69 76 65 20 43 54 45 20 69 73 20 74 68 65 6e  sive CTE is then
28b30 20 75 73 65 64 20 69 6e 20 74 68 65 20 66 69 6e   used in the fin
28b40 61 6c 20 71 75 65 72 79 3a 0a 0a 3c 62 6c 6f 63  al query:..<bloc
28b50 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
28b60 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 70 61  H RECURSIVE.  pa
28b70 72 65 6e 74 5f 6f 66 28 6e 61 6d 65 2c 20 70 61  rent_of(name, pa
28b80 72 65 6e 74 29 20 41 53 0a 20 20 20 20 28 53 45  rent) AS.    (SE
28b90 4c 45 43 54 20 6e 61 6d 65 2c 20 6d 6f 6d 20 46  LECT name, mom F
28ba0 52 4f 4d 20 66 61 6d 69 6c 79 20 55 4e 49 4f 4e  ROM family UNION
28bb0 20 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 64 61   SELECT name, da
28bc0 64 20 46 52 4f 4d 20 66 61 6d 69 6c 79 29 2c 0a  d FROM family),.
28bd0 20 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c    ancestor_of_al
28be0 69 63 65 28 6e 61 6d 65 29 20 41 53 0a 20 20 20  ice(name) AS.   
28bf0 20 28 53 45 4c 45 43 54 20 70 61 72 65 6e 74 20   (SELECT parent 
28c00 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f 66 20 57  FROM parent_of W
28c10 48 45 52 45 20 6e 61 6d 65 3d 27 41 6c 69 63 65  HERE name='Alice
28c20 27 0a 20 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  '.     UNION ALL
28c30 0a 20 20 20 20 20 53 45 4c 45 43 54 20 70 61 72  .     SELECT par
28c40 65 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f  ent FROM parent_
28c50 6f 66 20 4a 4f 49 4e 20 61 6e 63 65 73 74 6f 72  of JOIN ancestor
28c60 5f 6f 66 5f 61 6c 69 63 65 20 55 53 49 4e 47 28  _of_alice USING(
28c70 6e 61 6d 65 29 29 0a 53 45 4c 45 43 54 20 66 61  name)).SELECT fa
28c80 6d 69 6c 79 2e 6e 61 6d 65 20 46 52 4f 4d 20 61  mily.name FROM a
28c90 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63 65  ncestor_of_alice
28ca0 2c 20 66 61 6d 69 6c 79 0a 20 57 48 45 52 45 20  , family. WHERE 
28cb0 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c 69 63  ancestor_of_alic
28cc0 65 2e 6e 61 6d 65 3d 66 61 6d 69 6c 79 2e 6e 61  e.name=family.na
28cd0 6d 65 0a 20 20 20 41 4e 44 20 64 69 65 64 20 49  me.   AND died I
28ce0 53 20 4e 55 4c 4c 0a 20 4f 52 44 45 52 20 42 59  S NULL. ORDER BY
28cf0 20 62 6f 72 6e 3b 0a 3c 2f 70 72 65 3e 3c 2f 62   born;.</pre></b
28d00 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 74 63 6c  lockquote>..<tcl
28d10 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 63 65  >hd_fragment rce
28d20 78 33 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 51 75 65  x3</tcl>.<h4>Que
28d30 72 69 65 73 20 41 67 61 69 6e 73 74 20 41 20 47  ries Against A G
28d40 72 61 70 68 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20  raph</h4>..<p>A 
28d50 76 65 72 73 69 6f 6e 20 63 6f 6e 74 72 6f 6c 20  version control 
28d60 73 79 73 74 65 6d 20 28 56 43 53 29 20 77 69 6c  system (VCS) wil
28d70 6c 20 74 79 70 69 63 61 6c 6c 79 20 73 74 6f 72  l typically stor
28d80 65 20 74 68 65 20 65 76 6f 6c 76 69 6e 67 0a 76  e the evolving.v
28d90 65 72 73 69 6f 6e 73 20 6f 66 20 61 20 70 72 6f  ersions of a pro
28da0 6a 65 63 74 20 61 73 20 61 20 64 69 72 65 63 74  ject as a direct
28db0 65 64 20 61 63 79 63 6c 69 63 20 67 72 61 70 68  ed acyclic graph
28dc0 20 28 44 41 47 29 2e 20 20 43 61 6c 6c 20 65 61   (DAG).  Call ea
28dd0 63 68 0a 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ch.version of th
28de0 65 20 70 72 6f 6a 65 63 74 20 61 20 22 63 68 65  e project a "che
28df0 63 6b 69 6e 22 2e 20 20 41 20 73 69 6e 67 6c 65  ckin".  A single
28e00 0a 63 68 65 63 6b 69 6e 20 63 61 6e 20 68 61 76  .checkin can hav
28e10 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70  e zero or more p
28e20 61 72 65 6e 74 73 2e 20 20 4d 6f 73 74 20 63 68  arents.  Most ch
28e30 65 63 6b 69 6e 73 20 28 65 78 63 65 70 74 20 74  eckins (except t
28e40 68 65 0a 66 69 72 73 74 29 20 68 61 76 65 20 61  he.first) have a
28e50 20 73 69 6e 67 6c 65 20 70 61 72 65 6e 74 2c 20   single parent, 
28e60 62 75 74 20 69 6e 20 74 68 65 20 63 61 73 65 20  but in the case 
28e70 6f 66 20 61 20 6d 65 72 67 65 2c 20 61 20 63 68  of a merge, a ch
28e80 65 63 6b 69 6e 0a 6d 69 67 68 74 20 68 61 76 65  eckin.might have
28e90 20 74 77 6f 20 6f 72 20 74 68 72 65 65 20 6f 72   two or three or
28ea0 20 6d 6f 72 65 20 70 61 72 65 6e 74 73 2e 20 20   more parents.  
28eb0 41 20 73 63 68 65 6d 61 20 74 6f 20 6b 65 65 70  A schema to keep
28ec0 20 74 72 61 63 6b 20 6f 66 0a 63 68 65 63 6b 69   track of.checki
28ed0 6e 73 20 61 6e 64 20 74 68 65 20 6f 72 64 65 72  ns and the order
28ee0 20 69 6e 20 77 68 69 63 68 20 74 68 65 79 20 6f   in which they o
28ef0 63 63 75 72 20 6d 69 67 68 74 20 6c 6f 6f 6b 20  ccur might look 
28f00 73 6f 6d 65 74 68 69 6e 67 20 6c 69 6b 65 0a 74  something like.t
28f10 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  his:..<blockquot
28f20 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
28f30 41 42 4c 45 20 63 68 65 63 6b 69 6e 28 0a 20 20  ABLE checkin(.  
28f40 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  id INTEGER PRIMA
28f50 52 59 20 4b 45 59 2c 0a 20 20 6d 74 69 6d 65 20  RY KEY,.  mtime 
28f60 49 4e 54 45 47 45 52 20 2d 2d 20 74 69 6d 65 73  INTEGER -- times
28f70 74 61 6d 70 20 77 68 65 6e 20 74 68 69 73 20 63  tamp when this c
28f80 68 65 63 6b 69 6e 20 6f 63 63 75 72 72 65 64 0a  heckin occurred.
28f90 29 3b 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  );.CREATE TABLE 
28fa0 64 65 72 69 76 65 64 66 72 6f 6d 28 0a 20 20 78  derivedfrom(.  x
28fb0 66 72 6f 6d 20 49 4e 54 45 47 45 52 20 4e 4f 54  from INTEGER NOT
28fc0 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43 45 53   NULL REFERENCES
28fd0 20 63 68 65 63 6b 69 6e 2c 20 2d 2d 20 70 61 72   checkin, -- par
28fe0 65 6e 74 20 63 68 65 63 6b 69 6e 0a 20 20 78 74  ent checkin.  xt
28ff0 6f 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55  o INTEGER NOT NU
29000 4c 4c 20 52 45 46 45 52 45 4e 43 45 53 20 63 68  LL REFERENCES ch
29010 65 63 6b 69 6e 2c 20 20 20 2d 2d 20 64 65 72 69  eckin,   -- deri
29020 76 65 64 20 63 68 65 63 6b 69 6e 0a 20 20 50 52  ved checkin.  PR
29030 49 4d 41 52 59 20 4b 45 59 28 78 66 72 6f 6d 2c  IMARY KEY(xfrom,
29040 78 74 6f 29 0a 29 3b 0a 43 52 45 41 54 45 20 49  xto).);.CREATE I
29050 4e 44 45 58 20 64 65 72 69 76 65 64 66 72 6f 6d  NDEX derivedfrom
29060 5f 62 61 63 6b 20 4f 4e 20 64 65 72 69 76 65 64  _back ON derived
29070 66 72 6f 6d 28 78 74 6f 2c 78 66 72 6f 6d 29 3b  from(xto,xfrom);
29080 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
29090 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73 20 67 72  ote>..<p>This gr
290a0 61 70 68 20 69 73 20 61 63 79 63 6c 69 63 2e 20  aph is acyclic. 
290b0 20 41 6e 64 20 77 65 20 61 73 73 75 6d 65 20 74   And we assume t
290c0 68 61 74 20 74 68 65 20 6d 74 69 6d 65 20 6f 66  hat the mtime of
290d0 20 65 76 65 72 79 0a 63 68 69 6c 64 20 63 68 65   every.child che
290e0 63 6b 69 6e 20 69 73 20 6e 6f 20 6c 65 73 73 20  ckin is no less 
290f0 74 68 61 6e 20 74 68 65 20 6d 74 69 6d 65 20 6f  than the mtime o
29100 66 20 61 6c 6c 20 69 74 73 20 70 61 72 65 6e 74  f all its parent
29110 73 2e 20 20 42 75 74 0a 75 6e 6c 69 6b 65 20 74  s.  But.unlike t
29120 68 65 20 65 61 72 6c 69 65 72 20 65 78 61 6d 70  he earlier examp
29130 6c 65 73 2c 20 74 68 69 73 20 67 72 61 70 68 20  les, this graph 
29140 6d 69 67 68 74 20 68 61 76 65 20 6d 75 6c 74 69  might have multi
29150 70 6c 65 20 70 61 74 68 73 20 6f 66 0a 64 69 66  ple paths of.dif
29160 66 65 72 69 6e 67 20 6c 65 6e 67 74 68 73 20 62  fering lengths b
29170 65 74 77 65 65 6e 20 61 6e 79 20 74 77 6f 20 63  etween any two c
29180 68 65 63 6b 69 6e 73 2e 0a 0a 3c 70 3e 57 65 20  heckins...<p>We 
29190 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20 74 68 65  want to know the
291a0 20 74 77 65 6e 74 79 20 6d 6f 73 74 20 72 65 63   twenty most rec
291b0 65 6e 74 20 61 6e 63 65 73 74 6f 72 73 20 69 6e  ent ancestors in
291c0 20 74 69 6d 65 20 28 6f 75 74 20 6f 66 0a 74 68   time (out of.th
291d0 65 20 74 68 6f 75 73 61 6e 64 73 20 61 6e 64 20  e thousands and 
291e0 74 68 6f 75 73 61 6e 64 73 20 6f 66 20 61 6e 63  thousands of anc
291f0 65 73 74 6f 72 73 20 69 6e 20 74 68 65 20 77 68  estors in the wh
29200 6f 6c 65 20 44 41 47 29 20 66 6f 72 0a 63 68 65  ole DAG) for.che
29210 63 6b 69 6e 20 22 40 42 41 53 45 4c 49 4e 45 22  ckin "@BASELINE"
29220 2e 20 20 28 41 20 71 75 65 72 79 20 73 69 6d 69  .  (A query simi
29230 6c 61 72 20 74 6f 20 74 68 69 73 20 69 73 20 75  lar to this is u
29240 73 65 64 0a 62 79 20 74 68 65 20 3c 61 20 68 72  sed.by the <a hr
29250 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 66  ef="http://www.f
29260 6f 73 73 69 6c 2d 73 63 6d 2e 6f 72 67 2f 22 3e  ossil-scm.org/">
29270 46 6f 73 73 69 6c 3c 2f 61 3e 20 56 43 53 20 74  Fossil</a> VCS t
29280 6f 0a 73 68 6f 77 20 74 68 65 20 4e 20 6d 6f 73  o.show the N mos
29290 74 20 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f  t recent ancesto
292a0 72 73 20 6f 66 20 61 20 63 68 65 63 6b 2e 20 20  rs of a check.  
292b0 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 3c 61 20  For example:.<a 
292c0 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77 77  href="http://www
292d0 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f  .sqlite.org/src/
292e0 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e 6b  timeline?p=trunk
292f0 26 6e 3d 33 30 22 3e 68 74 74 70 3a 2f 2f 77 77  &n=30">http://ww
29300 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63  w.sqlite.org/src
29310 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72 75 6e  /timeline?p=trun
29320 6b 26 6e 3d 33 30 3c 2f 61 3e 2e 29 0a 0a 3c 62  k&n=30</a>.)..<b
29330 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
29340 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
29350 20 61 6e 63 65 73 74 6f 72 28 69 64 2c 6d 74 69   ancestor(id,mti
29360 6d 65 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c  me) AS (.    SEL
29370 45 43 54 20 69 64 2c 20 6d 74 69 6d 65 20 46 52  ECT id, mtime FR
29380 4f 4d 20 63 68 65 63 6b 69 6e 20 57 48 45 52 45  OM checkin WHERE
29390 20 69 64 3d 40 42 41 53 45 4c 49 4e 45 0a 20 20   id=@BASELINE.  
293a0 20 20 55 4e 49 4f 4e 0a 20 20 20 20 53 45 4c 45    UNION.    SELE
293b0 43 54 20 64 65 72 69 76 65 64 66 72 6f 6d 2e 78  CT derivedfrom.x
293c0 66 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 2e 6d 74  from, checkin.mt
293d0 69 6d 65 0a 20 20 20 20 20 20 46 52 4f 4d 20 61  ime.      FROM a
293e0 6e 63 65 73 74 6f 72 2c 20 64 65 72 69 76 65 64  ncestor, derived
293f0 66 72 6f 6d 2c 20 63 68 65 63 6b 69 6e 0a 20 20  from, checkin.  
29400 20 20 20 57 48 45 52 45 20 61 6e 63 65 73 74 6f     WHERE ancesto
29410 72 2e 69 64 3d 64 65 72 69 76 65 64 66 72 6f 6d  r.id=derivedfrom
29420 2e 78 74 6f 0a 20 20 20 20 20 20 20 41 4e 44 20  .xto.       AND 
29430 63 68 65 63 6b 69 6e 2e 69 64 3d 64 65 72 69 76  checkin.id=deriv
29440 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 0a 20 20 20  edfrom.xfrom.   
29450 20 20 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b    ORDER BY check
29460 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43 0a 20 20  in.mtime DESC.  
29470 20 20 20 4c 49 4d 49 54 20 32 30 0a 20 20 29 0a     LIMIT 20.  ).
29480 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63 68  SELECT * FROM ch
29490 65 63 6b 69 6e 20 4a 4f 49 4e 20 61 6e 63 65 73  eckin JOIN ances
294a0 74 6f 72 20 55 53 49 4e 47 28 69 64 29 3b 0a 3c  tor USING(id);.<
294b0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
294c0 65 3e 0a 0a 3c 70 3e 0a 54 68 65 20 22 4f 52 44  e>..<p>.The "ORD
294d0 45 52 20 42 59 20 63 68 65 63 6b 69 6e 2e 6d 74  ER BY checkin.mt
294e0 69 6d 65 20 44 45 53 43 22 20 74 65 72 6d 20 69  ime DESC" term i
294f0 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  n the recursive-
29500 73 65 6c 65 63 74 20 6d 61 6b 65 73 0a 74 68 65  select makes.the
29510 20 71 75 65 72 79 20 72 75 6e 20 6d 75 63 68 20   query run much 
29520 66 61 73 74 65 72 20 62 79 20 70 72 65 76 65 6e  faster by preven
29530 74 69 6e 67 20 69 74 20 66 72 6f 6d 20 66 6f 6c  ting it from fol
29540 6c 6f 77 69 6e 67 0a 62 72 61 6e 63 68 65 73 20  lowing.branches 
29550 74 68 61 74 20 6d 65 72 67 65 20 63 68 65 63 6b  that merge check
29560 69 6e 73 0a 66 72 6f 6d 20 6c 6f 6e 67 20 61 67  ins.from long ag
29570 6f 2e 20 20 54 68 65 20 4f 52 44 45 52 20 42 59  o.  The ORDER BY
29580 20 66 6f 72 63 65 73 20 74 68 65 20 72 65 63 75   forces the recu
29590 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74 6f 20  rsive-select to 
295a0 66 6f 63 75 73 0a 6f 6e 20 74 68 65 20 6d 6f 73  focus.on the mos
295b0 74 20 72 65 63 65 6e 74 20 63 68 65 63 6b 69 6e  t recent checkin
295c0 73 2c 20 74 68 65 20 6f 6e 65 73 20 77 65 20 77  s, the ones we w
295d0 61 6e 74 2e 20 20 57 69 74 68 6f 75 74 20 74 68  ant.  Without th
295e0 65 20 4f 52 44 45 52 20 42 59 0a 6f 6e 20 74 68  e ORDER BY.on th
295f0 65 20 72 65 63 75 72 73 69 76 65 2d 73 65 6c 65  e recursive-sele
29600 63 74 2c 20 6f 6e 65 20 77 6f 75 6c 64 20 62 65  ct, one would be
29610 20 66 6f 72 63 65 64 20 74 6f 20 63 6f 6d 70 75   forced to compu
29620 74 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  te the complete 
29630 73 65 74 20 6f 66 0a 74 68 6f 75 73 61 6e 64 73  set of.thousands
29640 20 6f 66 20 61 6e 63 65 73 74 6f 72 73 2c 20 73   of ancestors, s
29650 6f 72 74 20 74 68 65 6d 20 61 6c 6c 20 62 79 20  ort them all by 
29660 6d 74 69 6d 65 2c 20 74 68 65 6e 20 74 61 6b 65  mtime, then take
29670 20 74 68 65 20 74 6f 70 20 74 77 65 6e 74 79 2e   the top twenty.
29680 0a 54 68 65 20 4f 52 44 45 52 20 42 59 20 65 73  .The ORDER BY es
29690 73 65 6e 74 69 61 6c 6c 79 20 73 65 74 73 20 75  sentially sets u
296a0 70 20 61 20 70 72 69 6f 72 69 74 79 20 71 75 65  p a priority que
296b0 75 65 20 74 68 61 74 0a 66 6f 72 63 65 73 20 74  ue that.forces t
296c0 68 65 20 72 65 63 75 72 73 69 76 65 20 71 75 65  he recursive que
296d0 72 79 20 74 6f 20 6c 6f 6f 6b 20 61 74 20 74 68  ry to look at th
296e0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e  e most recent an
296f0 63 65 73 74 6f 72 73 20 66 69 72 73 74 2c 0a 61  cestors first,.a
29700 6c 6c 6f 77 69 6e 67 20 74 68 65 20 75 73 65 20  llowing the use 
29710 6f 66 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73  of a LIMIT claus
29720 65 20 74 6f 20 72 65 73 74 72 69 63 74 20 74 68  e to restrict th
29730 65 20 73 63 6f 70 65 20 6f 66 20 74 68 65 0a 71  e scope of the.q
29740 75 65 72 79 20 74 6f 20 6a 75 73 74 20 74 68 65  uery to just the
29750 20 63 68 65 63 6b 69 6e 73 20 6f 66 20 69 6e 74   checkins of int
29760 65 72 65 73 74 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  erest...<tcl>hd_
29770 66 72 61 67 6d 65 6e 74 20 77 69 74 68 6f 72 64  fragment withord
29780 65 72 62 79 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 43  erby</tcl>.<h4>C
29790 6f 6e 74 72 6f 6c 6c 69 6e 67 20 44 65 70 74 68  ontrolling Depth
297a0 2d 46 69 72 73 74 20 56 65 72 73 75 73 20 42 72  -First Versus Br
297b0 65 61 64 74 68 2d 46 69 72 73 74 20 53 65 61 72  eadth-First Sear
297c0 63 68 20 4f 66 20 61 20 54 72 65 65 0a 55 73 69  ch Of a Tree.Usi
297d0 6e 67 20 4f 52 44 45 52 20 42 59 3c 2f 68 34 3e  ng ORDER BY</h4>
297e0 0a 0a 3c 70 3e 41 6e 20 4f 52 44 45 52 20 42 59  ..<p>An ORDER BY
297f0 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65 20 72   clause on the r
29800 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
29810 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63  can be used to c
29820 6f 6e 74 72 6f 6c 0a 77 68 65 74 68 65 72 20 74  ontrol.whether t
29830 68 65 20 73 65 61 72 63 68 20 6f 66 20 61 20 74  he search of a t
29840 72 65 65 20 69 73 20 64 65 70 74 68 2d 66 69 72  ree is depth-fir
29850 73 74 20 6f 72 20 62 72 65 61 64 74 68 2d 66 69  st or breadth-fi
29860 72 73 74 2e 20 20 54 6f 0a 69 6c 6c 75 73 74 72  rst.  To.illustr
29870 61 74 65 2c 20 77 65 20 77 69 6c 6c 20 75 73 65  ate, we will use
29880 20 61 20 76 61 72 69 61 74 69 6f 6e 20 6f 6e 20   a variation on 
29890 74 68 65 20 22 6f 72 67 22 20 74 61 62 6c 65 20  the "org" table 
298a0 66 72 6f 6d 20 61 6e 20 65 78 61 6d 70 6c 65 0a  from an example.
298b0 61 62 6f 76 65 2c 20 77 69 74 68 6f 75 74 20 74  above, without t
298c0 68 65 20 22 68 65 69 67 68 74 22 20 63 6f 6c 75  he "height" colu
298d0 6d 6e 2c 20 61 6e 64 20 77 69 74 68 20 73 6f 6d  mn, and with som
298e0 65 20 72 65 61 6c 20 64 61 74 61 20 69 6e 73 65  e real data inse
298f0 72 74 65 64 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  rted:..<blockquo
29900 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
29910 54 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d  TABLE org(.  nam
29920 65 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b  e TEXT PRIMARY K
29930 45 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54 20  EY,.  boss TEXT 
29940 52 45 46 45 52 45 4e 43 45 53 20 6f 72 67 0a 29  REFERENCES org.)
29950 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a   WITHOUT ROWID;.
29960 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20  INSERT INTO org 
29970 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 4e  VALUES('Alice',N
29980 55 4c 4c 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  ULL);.INSERT INT
29990 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 42 6f  O org VALUES('Bo
299a0 62 27 2c 27 41 6c 69 63 65 27 29 3b 0a 49 4e 53  b','Alice');.INS
299b0 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c  ERT INTO org VAL
299c0 55 45 53 28 27 43 69 6e 64 79 27 2c 27 41 6c 69  UES('Cindy','Ali
299d0 63 65 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54  ce');.INSERT INT
299e0 4f 20 6f 72 67 20 56 41 4c 55 45 53 28 27 44 61  O org VALUES('Da
299f0 76 65 27 2c 27 42 6f 62 27 29 3b 0a 49 4e 53 45  ve','Bob');.INSE
29a00 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55  RT INTO org VALU
29a10 45 53 28 27 45 6d 6d 61 27 2c 27 42 6f 62 27 29  ES('Emma','Bob')
29a20 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72  ;.INSERT INTO or
29a30 67 20 56 41 4c 55 45 53 28 27 46 72 65 64 27 2c  g VALUES('Fred',
29a40 27 43 69 6e 64 79 27 29 3b 0a 49 4e 53 45 52 54  'Cindy');.INSERT
29a50 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53   INTO org VALUES
29a60 28 27 47 61 69 6c 27 2c 27 43 69 6e 64 79 27 29  ('Gail','Cindy')
29a70 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
29a80 75 6f 74 65 3e 0a 0a 3c 70 3e 48 65 72 65 20 69  uote>..<p>Here i
29a90 73 20 61 20 71 75 65 72 79 20 74 6f 20 73 68 6f  s a query to sho
29aa0 77 20 74 68 65 20 74 72 65 65 20 73 74 72 75 63  w the tree struc
29ab0 74 75 72 65 20 69 6e 20 61 20 62 72 65 61 64 74  ture in a breadt
29ac0 68 2d 66 69 72 73 74 20 70 61 74 74 65 72 6e 3a  h-first pattern:
29ad0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
29ae0 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
29af0 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c 69 63 65  VE.  under_alice
29b00 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20 41 53 20  (name,level) AS 
29b10 28 0a 20 20 20 20 56 41 4c 55 45 53 28 27 41 6c  (.    VALUES('Al
29b20 69 63 65 27 2c 30 29 0a 20 20 20 20 55 4e 49 4f  ice',0).    UNIO
29b30 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
29b40 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e 64 65 72   org.name, under
29b50 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 0a 20  _alice.level+1. 
29b60 20 20 20 20 20 46 52 4f 4d 20 6f 72 67 20 4a 4f       FROM org JO
29b70 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63 65 20 4f  IN under_alice O
29b80 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e 64 65 72  N org.boss=under
29b90 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20 20 20 20  _alice.name.    
29ba0 20 4f 52 44 45 52 20 42 59 20 32 0a 20 20 29 0a   ORDER BY 2.  ).
29bb0 53 45 4c 45 43 54 20 73 75 62 73 74 72 28 27 2e  SELECT substr('.
29bc0 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c 6c 65 76  .........',1,lev
29bd0 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65 20 46 52  el*3) || name FR
29be0 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63 65 3b 0a  OM under_alice;.
29bf0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
29c00 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22 4f 52 44  te>..<p>The "ORD
29c10 45 52 20 42 59 20 32 22 20 28 77 68 69 63 68 20  ER BY 2" (which 
29c20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 20 61  means the same a
29c30 73 20 22 4f 52 44 45 52 20 42 59 20 75 6e 64 65  s "ORDER BY unde
29c40 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b 31 22  r_alice.level+1"
29c50 29 0a 63 61 75 73 65 73 20 68 69 67 68 65 72 20  ).causes higher 
29c60 6c 65 76 65 6c 73 20 69 6e 20 74 68 65 20 6f 72  levels in the or
29c70 67 61 6e 69 7a 61 74 69 6f 6e 20 63 68 61 72 74  ganization chart
29c80 20 28 77 69 74 68 20 73 6d 61 6c 6c 65 72 20 22   (with smaller "
29c90 6c 65 76 65 6c 22 20 76 61 6c 75 65 73 29 0a 74  level" values).t
29ca0 6f 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 66  o be processed f
29cb0 69 72 73 74 2c 20 72 65 73 75 6c 74 69 6e 67 20  irst, resulting 
29cc0 69 6e 20 61 20 62 72 65 61 64 74 68 2d 66 69 72  in a breadth-fir
29cd0 73 74 20 73 65 61 72 63 68 2e 20 20 54 68 65 20  st search.  The 
29ce0 6f 75 74 70 75 74 20 69 73 3a 0a 0a 3c 62 6c 6f  output is:..<blo
29cf0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 41 6c  ckquote><pre>.Al
29d00 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e 2e 43 69  ice....Bob....Ci
29d10 6e 64 79 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e  ndy.......Dave..
29d20 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 2e 2e 2e  .....Emma.......
29d30 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61 69 6c 0a  Fred.......Gail.
29d40 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
29d50 74 65 3e 0a 0a 3c 70 3e 42 75 74 20 69 66 20 77  te>..<p>But if w
29d60 65 20 63 68 61 6e 67 65 20 74 68 65 20 4f 52 44  e change the ORD
29d70 45 52 20 42 59 20 63 6c 61 75 73 65 20 74 6f 20  ER BY clause to 
29d80 61 64 64 20 74 68 65 20 22 44 45 53 43 22 20 6d  add the "DESC" m
29d90 6f 64 69 66 69 65 72 2c 20 74 68 61 74 20 77 69  odifier, that wi
29da0 6c 6c 0a 63 61 75 73 65 20 6c 6f 77 65 72 20 6c  ll.cause lower l
29db0 65 76 65 6c 73 20 69 6e 20 74 68 65 20 6f 72 67  evels in the org
29dc0 61 6e 69 7a 61 74 69 6f 6e 20 28 77 69 74 68 20  anization (with 
29dd0 6c 61 72 67 65 72 20 22 6c 65 76 65 6c 22 20 76  larger "level" v
29de0 61 6c 75 65 73 29 20 74 6f 20 62 65 0a 70 72 6f  alues) to be.pro
29df0 63 65 73 73 65 64 20 66 69 72 73 74 20 62 79 20  cessed first by 
29e00 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73 65  the recursive-se
29e10 6c 65 63 74 2c 20 72 65 73 75 6c 74 69 6e 67 20  lect, resulting 
29e20 69 6e 20 61 20 64 65 70 74 68 2d 66 69 72 73 74  in a depth-first
29e30 20 73 65 61 72 63 68 3a 0a 0a 3c 62 6c 6f 63 6b   search:..<block
29e40 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
29e50 20 52 45 43 55 52 53 49 56 45 0a 20 20 75 6e 64   RECURSIVE.  und
29e60 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65 2c 6c 65  er_alice(name,le
29e70 76 65 6c 29 20 41 53 20 28 0a 20 20 20 20 56 41  vel) AS (.    VA
29e80 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 30 29 0a  LUES('Alice',0).
29e90 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20      UNION ALL.  
29ea0 20 20 53 45 4c 45 43 54 20 6f 72 67 2e 6e 61 6d    SELECT org.nam
29eb0 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6c  e, under_alice.l
29ec0 65 76 65 6c 2b 31 0a 20 20 20 20 20 20 46 52 4f  evel+1.      FRO
29ed0 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e 64 65 72  M org JOIN under
29ee0 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67 2e 62 6f  _alice ON org.bo
29ef0 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63 65 2e 6e  ss=under_alice.n
29f00 61 6d 65 0a 20 20 20 20 20 4f 52 44 45 52 20 42  ame.     ORDER B
29f10 59 20 32 20 3c 62 3e 44 45 53 43 3c 2f 62 3e 0a  Y 2 <b>DESC</b>.
29f20 20 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73 74    ).SELECT subst
29f30 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31  r('..........',1
29f40 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d  ,level*3) || nam
29f50 65 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69  e FROM under_ali
29f60 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  ce;.</pre></bloc
29f70 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
29f80 6f 75 74 70 75 74 20 6f 66 20 74 68 69 73 20 72  output of this r
29f90 65 76 69 73 65 64 20 71 75 65 72 79 20 69 73 3a  evised query is:
29fa0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
29fb0 72 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62  re>.Alice....Bob
29fc0 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e 2e 2e 2e  .......Dave.....
29fd0 2e 2e 45 6d 6d 61 0a 2e 2e 2e 43 69 6e 64 79 0a  ..Emma....Cindy.
29fe0 2e 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e  ......Fred......
29ff0 2e 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  .Gail.</pre></bl
2a000 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 57 68  ockquote>..<p>Wh
2a010 65 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  en the ORDER BY 
2a020 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74 74 65  clause is omitte
2a030 64 20 66 72 6f 6d 20 74 68 65 20 72 65 63 75 72  d from the recur
2a040 73 69 76 65 2d 73 65 6c 65 63 74 2c 20 74 68 65  sive-select, the
2a050 0a 71 75 65 75 65 20 62 65 68 61 76 65 73 20 61  .queue behaves a
2a060 73 20 61 20 46 49 46 4f 2c 20 77 68 69 63 68 20  s a FIFO, which 
2a070 72 65 73 75 6c 74 73 20 69 6e 20 61 20 62 72 65  results in a bre
2a080 61 64 74 68 2d 66 69 72 73 74 20 73 65 61 72 63  adth-first searc
2a090 68 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  h....<tcl>hd_fra
2a0a0 67 6d 65 6e 74 20 6d 61 6e 64 65 6c 62 72 6f 74  gment mandelbrot
2a0b0 20 7b 63 6f 6d 70 75 74 65 20 74 68 65 20 4d 61   {compute the Ma
2a0c0 6e 64 65 6c 62 72 6f 74 20 73 65 74 7d 3c 2f 74  ndelbrot set}</t
2a0d0 63 6c 3e 0a 3c 68 34 3e 4f 75 74 6c 61 6e 64 69  cl>.<h4>Outlandi
2a0e0 73 68 20 52 65 63 75 72 73 69 76 65 20 51 75 65  sh Recursive Que
2a0f0 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e  ry Examples</h4>
2a100 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69  ..<p>The followi
2a110 6e 67 20 71 75 65 72 79 20 63 6f 6d 70 75 74 65  ng query compute
2a120 73 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69  s an approximati
2a130 6f 6e 20 6f 66 20 74 68 65 20 4d 61 6e 64 65 6c  on of the Mandel
2a140 62 72 6f 74 20 53 65 74 0a 61 6e 64 20 6f 75 74  brot Set.and out
2a150 70 75 74 73 20 74 68 65 20 72 65 73 75 6c 74 20  puts the result 
2a160 61 73 20 41 53 43 49 49 2d 61 72 74 3a 0a 0a 3c  as ASCII-art:..<
2a170 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
2a180 0a 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a  .WITH RECURSIVE.
2a190 20 20 78 61 78 69 73 28 78 29 20 41 53 20 28 56    xaxis(x) AS (V
2a1a0 41 4c 55 45 53 28 2d 32 2e 30 29 20 55 4e 49 4f  ALUES(-2.0) UNIO
2a1b0 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b 30  N ALL SELECT x+0
2a1c0 2e 30 35 20 46 52 4f 4d 20 78 61 78 69 73 20 57  .05 FROM xaxis W
2a1d0 48 45 52 45 20 78 26 6c 74 3b 31 2e 32 29 2c 0a  HERE x&lt;1.2),.
2a1e0 20 20 79 61 78 69 73 28 79 29 20 41 53 20 28 56    yaxis(y) AS (V
2a1f0 41 4c 55 45 53 28 2d 31 2e 30 29 20 55 4e 49 4f  ALUES(-1.0) UNIO
2a200 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 79 2b 30  N ALL SELECT y+0
2a210 2e 31 20 46 52 4f 4d 20 79 61 78 69 73 20 57 48  .1 FROM yaxis WH
2a220 45 52 45 20 79 26 6c 74 3b 31 2e 30 29 2c 0a 20  ERE y&lt;1.0),. 
2a230 20 6d 28 69 74 65 72 2c 20 63 78 2c 20 63 79 2c   m(iter, cx, cy,
2a240 20 78 2c 20 79 29 20 41 53 20 28 0a 20 20 20 20   x, y) AS (.    
2a250 53 45 4c 45 43 54 20 30 2c 20 78 2c 20 79 2c 20  SELECT 0, x, y, 
2a260 30 2e 30 2c 20 30 2e 30 20 46 52 4f 4d 20 78 61  0.0, 0.0 FROM xa
2a270 78 69 73 2c 20 79 61 78 69 73 0a 20 20 20 20 55  xis, yaxis.    U
2a280 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c  NION ALL.    SEL
2a290 45 43 54 20 69 74 65 72 2b 31 2c 20 63 78 2c 20  ECT iter+1, cx, 
2a2a0 63 79 2c 20 78 2a 78 2d 79 2a 79 20 2b 20 63 78  cy, x*x-y*y + cx
2a2b0 2c 20 32 2e 30 2a 78 2a 79 20 2b 20 63 79 20 46  , 2.0*x*y + cy F
2a2c0 52 4f 4d 20 6d 20 0a 20 20 20 20 20 57 48 45 52  ROM m .     WHER
2a2d0 45 20 28 78 2a 78 20 2b 20 79 2a 79 29 20 26 6c  E (x*x + y*y) &l
2a2e0 74 3b 20 34 2e 30 20 41 4e 44 20 69 74 65 72 26  t; 4.0 AND iter&
2a2f0 6c 74 3b 32 38 0a 20 20 29 2c 0a 20 20 6d 32 28  lt;28.  ),.  m2(
2a300 69 74 65 72 2c 20 63 78 2c 20 63 79 29 20 41 53  iter, cx, cy) AS
2a310 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 61   (.    SELECT ma
2a320 78 28 69 74 65 72 29 2c 20 63 78 2c 20 63 79 20  x(iter), cx, cy 
2a330 46 52 4f 4d 20 6d 20 47 52 4f 55 50 20 42 59 20  FROM m GROUP BY 
2a340 63 78 2c 20 63 79 0a 20 20 29 2c 0a 20 20 61 28  cx, cy.  ),.  a(
2a350 74 29 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45  t) AS (.    SELE
2a360 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  CT group_concat(
2a370 20 73 75 62 73 74 72 28 27 20 2e 2b 2a 23 27 2c   substr(' .+*#',
2a380 20 31 2b 6d 69 6e 28 69 74 65 72 2f 37 2c 34 29   1+min(iter/7,4)
2a390 2c 20 31 29 2c 20 27 27 29 20 0a 20 20 20 20 46  , 1), '') .    F
2a3a0 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20 42 59 20  ROM m2 GROUP BY 
2a3b0 63 79 0a 20 20 29 0a 53 45 4c 45 43 54 20 67 72  cy.  ).SELECT gr
2a3c0 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74 72 69 6d  oup_concat(rtrim
2a3d0 28 74 29 2c 78 27 30 61 27 29 20 46 52 4f 4d 20  (t),x'0a') FROM 
2a3e0 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  a;.</pre></block
2a3f0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74 68  quote>..<p>In th
2a400 69 73 20 71 75 65 72 79 2c 20 74 68 65 20 22 78  is query, the "x
2a410 61 78 69 73 22 20 61 6e 64 20 22 79 61 78 69 73  axis" and "yaxis
2a420 22 20 43 54 45 73 20 64 65 66 69 6e 65 20 74 68  " CTEs define th
2a430 65 20 67 72 69 64 20 6f 66 20 70 6f 69 6e 74 73  e grid of points
2a440 20 66 6f 72 0a 77 68 69 63 68 20 74 68 65 20 4d   for.which the M
2a450 61 6e 64 65 6c 62 72 6f 74 20 53 65 74 20 77 69  andelbrot Set wi
2a460 6c 6c 20 62 65 20 61 70 70 72 6f 78 69 6d 61 74  ll be approximat
2a470 65 64 2e 20 20 45 61 63 68 20 72 6f 77 20 69 6e  ed.  Each row in
2a480 20 74 68 65 0a 22 6d 28 69 74 65 72 2c 63 78 2c   the."m(iter,cx,
2a490 63 79 2c 78 2c 79 29 22 20 43 54 45 20 6d 65 61  cy,x,y)" CTE mea
2a4a0 6e 73 20 74 68 61 74 20 61 66 74 65 72 20 22 69  ns that after "i
2a4b0 74 65 72 22 20 69 74 65 72 61 74 69 6f 6e 73 2c  ter" iterations,
2a4c0 20 74 68 65 20 4d 61 6e 64 65 6c 62 72 6f 74 0a   the Mandelbrot.
2a4d0 69 74 65 72 61 74 69 6f 6e 20 73 74 61 72 74 69  iteration starti
2a4e0 6e 67 20 61 74 20 63 78 2c 63 79 20 68 61 73 20  ng at cx,cy has 
2a4f0 72 65 61 63 68 65 64 20 70 6f 69 6e 74 20 78 2c  reached point x,
2a500 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  y.  The number o
2a510 66 20 69 74 65 72 61 74 69 6f 6e 73 0a 69 6e 20  f iterations.in 
2a520 74 68 69 73 20 65 78 61 6d 70 6c 65 20 69 73 20  this example is 
2a530 6c 69 6d 69 74 65 64 20 74 6f 20 32 38 20 28 77  limited to 28 (w
2a540 68 69 63 68 20 73 65 76 65 72 65 6c 79 20 6c 69  hich severely li
2a550 6d 69 74 73 20 74 68 65 20 72 65 73 6f 6c 75 74  mits the resolut
2a560 69 6f 6e 20 6f 66 0a 74 68 65 20 63 6f 6d 70 75  ion of.the compu
2a570 74 61 74 69 6f 6e 2c 20 62 75 74 20 69 73 20 73  tation, but is s
2a580 75 66 66 69 63 69 65 6e 74 20 66 6f 72 20 6c 6f  ufficient for lo
2a590 77 2d 72 65 73 6f 6c 75 74 69 6f 6e 20 41 53 43  w-resolution ASC
2a5a0 49 49 2d 61 72 74 20 6f 75 74 70 75 74 29 2e 0a  II-art output)..
2a5b0 54 68 65 20 22 6d 32 28 69 74 65 72 2c 63 78 2c  The "m2(iter,cx,
2a5c0 63 79 29 22 20 43 54 45 20 68 6f 6c 64 73 20 74  cy)" CTE holds t
2a5d0 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
2a5e0 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
2a5f0 72 65 61 63 68 65 64 20 77 68 65 6e 0a 73 74 61  reached when.sta
2a600 72 74 69 6e 67 20 61 74 20 70 6f 69 6e 74 20 63  rting at point c
2a610 78 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79 2c 20 65  x,cy..Finally, e
2a620 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 22  ach row in the "
2a630 61 28 74 29 22 20 43 54 45 20 68 6f 6c 64 73 20  a(t)" CTE holds 
2a640 61 20 73 74 72 69 6e 67 20 0a 77 68 69 63 68 20  a string .which 
2a650 69 73 20 61 20 73 69 6e 67 6c 65 20 6c 69 6e 65  is a single line
2a660 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 41   of the output A
2a670 53 43 49 49 2d 61 72 74 2e 0a 54 68 65 20 53 45  SCII-art..The SE
2a680 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61  LECT statement a
2a690 74 20 74 68 65 20 65 6e 64 20 6a 75 73 74 20 71  t the end just q
2a6a0 75 65 72 69 65 73 20 74 68 65 20 22 61 22 20 43  ueries the "a" C
2a6b0 54 45 20 74 6f 0a 72 65 74 72 69 65 76 65 20 61  TE to.retrieve a
2a6c0 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 41 53 43 49  ll lines of ASCI
2a6d0 49 2d 61 72 74 2c 20 6f 6e 65 20 62 79 20 6f 6e  I-art, one by on
2a6e0 65 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e 67 20 74  e...<p>Running t
2a6f0 68 65 20 71 75 65 72 79 20 61 62 6f 76 65 20 69  he query above i
2a700 6e 20 61 6e 20 53 51 4c 69 74 65 20 5b 63 6f 6d  n an SQLite [com
2a710 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 5d  mand-line shell]
2a720 20 72 65 73 75 6c 74 73 0a 69 6e 20 74 68 65 20   results.in the 
2a730 66 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74 70 75 74  following output
2a740 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
2a750 70 72 65 3e 0a 20 20 20 20 20 20 20 20 20 20 20  pre>.           
2a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a770 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 23 0a 20           ....#. 
2a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7a0 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20 20 20    ..#*...       
2a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7c0 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23            ..+###
2a7d0 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
2a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7f0 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e 2e  .......+####....
2a800 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20     +.           
2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a820 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23  ..##+*##########
2a830 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20  +.++++.         
2a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a850 20 2e 2b 2e 23 23 23 23 23 23 23 23 23 23 23 23   .+.############
2a860 23 23 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20  ######+..       
2a870 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2e 2e         .........
2a880 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23 23 23 23  ....+###########
2a890 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20 20 20 20  ########+.+.    
2a8a0 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e            ..++..
2a8b0 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23  #.....*#########
2a8c0 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20  ############+.. 
2a8d0 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2b              ...+
2a8e0 23 23 23 23 23 23 23 2b 2b 23 23 23 23 23 23 23  #######++#######
2a8f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a900 2e 0a 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e  ..          ....
2a910 2b 2a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  +*##############
2a920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a930 23 23 2e 0a 20 23 23 23 23 23 23 23 23 23 23 23  ##.. ###########
2a940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a960 23 23 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20 20  ##....          
2a970 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23  ....+*##########
2a980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a990 23 23 23 23 23 23 2e 0a 20 20 20 20 20 20 20 20  ######..        
2a9a0 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23 23 23 23       ...+#######
2a9b0 2b 2b 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ++##############
2a9c0 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20  #########..     
2a9d0 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b 2e 2e 23           ..++..#
2a9e0 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23 23 23 23  .....*##########
2a9f0 23 23 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20  ###########+..  
2aa00 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
2aa10 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23  .........+######
2aa20 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b  #############+.+
2aa30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aa40 20 20 20 20 20 20 20 20 20 20 20 2e 2b 2e 23 23             .+.##
2aa50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2aa60 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e                ..
2aa80 23 23 2b 2a 23 23 23 23 23 23 23 23 23 23 2b 2e  ##+*##########+.
2aa90 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20 20 20 20  ++++.           
2aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aab0 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e 2e 2e   .......+####...
2aac0 2e 20 20 20 2b 0a 20 20 20 20 20 20 20 20 20 20  .   +.          
2aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aae0 20 20 20 20 20 20 20 2e 2e 2b 23 23 23 23 2b 2e         ..+####+.
2aaf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab10 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20 20      ..#*...     
2ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
2ab40 2e 2e 2e 23 0a 20 20 20 20 20 20 20 20 20 20 20  ...#.           
2ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab60 20 20 20 20 20 20 20 20 20 2b 2e 0a 3c 2f 70 72           +..</pr
2ab70 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
2ab80 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2ab90 74 20 73 75 64 6f 6b 75 20 7b 73 6f 6c 76 65 20  t sudoku {solve 
2aba0 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 73 7d 20  Sudoku puzzles} 
2abb0 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69 73 20 6e  </tcl>.<p>This n
2abc0 65 78 74 20 71 75 65 72 79 20 73 6f 6c 76 65 73  ext query solves
2abd0 20 61 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65   a Sudoku puzzle
2abe0 2e 20 20 54 68 65 20 73 74 61 74 65 20 6f 66 20  .  The state of 
2abf0 74 68 65 20 70 75 7a 7a 6c 65 20 69 73 0a 64 65  the puzzle is.de
2ac00 66 69 6e 65 64 20 62 79 20 61 6e 20 38 31 2d 63  fined by an 81-c
2ac10 68 61 72 61 63 74 65 72 20 73 74 72 69 6e 67 20  haracter string 
2ac20 66 6f 72 6d 65 64 20 62 79 20 72 65 61 64 69 6e  formed by readin
2ac30 67 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  g entries from t
2ac40 68 65 0a 70 75 7a 7a 6c 65 20 62 6f 78 20 72 6f  he.puzzle box ro
2ac50 77 20 62 79 20 72 6f 77 20 66 72 6f 6d 20 6c 65  w by row from le
2ac60 66 74 20 74 6f 20 72 69 67 68 74 20 61 6e 64 20  ft to right and 
2ac70 74 68 65 6e 20 66 72 6f 6d 20 74 6f 70 20 74 6f  then from top to
2ac80 20 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e 6b 20 73   bottom..Blank s
2ac90 71 75 61 72 65 73 20 69 6e 20 74 68 65 20 70 75  quares in the pu
2aca0 7a 7a 6c 65 20 61 72 65 20 64 65 6e 6f 74 65 64  zzle are denoted
2acb0 20 62 79 20 61 20 22 2e 22 20 63 68 61 72 61 63   by a "." charac
2acc0 74 65 72 2e 20 20 0a 54 68 75 73 20 74 68 65 20  ter.  .Thus the 
2acd0 69 6e 70 75 74 20 73 74 72 69 6e 67 3a 0a 0a 3c  input string:..<
2ace0 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 2e 2e  blockquote>.53..
2acf0 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39  7....6..195....9
2ad00 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33  8....6.8...6...3
2ad10 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e  4..8.3..17...2..
2ad20 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31  .6.6....28....41
2ad30 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 0a 3c 2f  9..5....8..79.</
2ad40 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
2ad50 43 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61  Corresponds to a
2ad60 20 70 75 7a 7a 6c 65 20 6c 69 6b 65 20 74 68 69   puzzle like thi
2ad70 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
2ad80 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
2ad90 31 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22  1" cellpadding="
2ada0 35 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35 3c 74 64  5">.<tr><td>5<td
2adb0 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >3<td> <td> <td>
2adc0 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20  7<td> <td> <td> 
2add0 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 36 3c 74  <td>.<tr><td>6<t
2ade0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 3c 74 64  d> <td> <td>1<td
2adf0 3e 39 3c 74 64 3e 35 3c 74 64 3e 20 3c 74 64 3e  >9<td>5<td> <td>
2ae00 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 20 3c   <td>.<tr><td> <
2ae10 74 64 3e 39 3c 74 64 3e 38 3c 74 64 3e 20 3c 74  td>9<td>8<td> <t
2ae20 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
2ae30 3e 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e 38  >6<td>.<tr><td>8
2ae40 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
2ae50 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>6<td> <td> <t
2ae60 64 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e 3c 74 64  d> <td>3.<tr><td
2ae70 3e 34 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  >4<td> <td> <td>
2ae80 38 3c 74 64 3e 20 3c 74 64 3e 33 3c 74 64 3e 20  8<td> <td>3<td> 
2ae90 3c 74 64 3e 20 3c 74 64 3e 31 0a 3c 74 72 3e 3c  <td> <td>1.<tr><
2aea0 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>7<td> <td> <t
2aeb0 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 20 3c 74 64  d> <td>2<td> <td
2aec0 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 0a 3c 74 72  > <td> <td>6.<tr
2aed0 3e 3c 74 64 3e 20 3c 74 64 3e 36 3c 74 64 3e 20  ><td> <td>6<td> 
2aee0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td> <td> <td> <
2aef0 74 64 3e 32 3c 74 64 3e 38 3c 74 64 3e 0a 3c 74  td>2<td>8<td>.<t
2af00 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e  r><td> <td> <td>
2af10 20 3c 74 64 3e 34 3c 74 64 3e 31 3c 74 64 3e 39   <td>4<td>1<td>9
2af20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 35 0a  <td> <td> <td>5.
2af30 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  <tr><td> <td> <t
2af40 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38 3c 74 64  d> <td> <td>8<td
2af50 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c 74 64 3e  > <td> <td>7<td>
2af60 39 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6c 6f  9.</table>.</blo
2af70 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69  ckquote>..<p>Thi
2af80 73 20 69 73 20 74 68 65 20 71 75 65 72 79 20 74  s is the query t
2af90 68 61 74 20 73 6f 6c 76 65 73 20 74 68 65 20 70  hat solves the p
2afa0 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  uzzle:..<blockqu
2afb0 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52  ote><pre>.WITH R
2afc0 45 43 55 52 53 49 56 45 0a 20 20 69 6e 70 75 74  ECURSIVE.  input
2afd0 28 73 75 64 29 20 41 53 20 28 0a 20 20 20 20 56  (sud) AS (.    V
2afe0 41 4c 55 45 53 28 27 35 33 2e 2e 37 2e 2e 2e 2e  ALUES('53..7....
2aff0 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e 2e 2e 2e  6..195....98....
2b000 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e 2e 38 2e  6.8...6...34..8.
2b010 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36 2e 36 2e  3..17...2...6.6.
2b020 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e 2e 35 2e  ...28....419..5.
2b030 2e 2e 2e 38 2e 2e 37 39 27 29 0a 20 20 29 2c 0a  ...8..79').  ),.
2b040 20 20 64 69 67 69 74 73 28 7a 2c 20 6c 70 29 20    digits(z, lp) 
2b050 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28  AS (.    VALUES(
2b060 27 31 27 2c 20 31 29 0a 20 20 20 20 55 4e 49 4f  '1', 1).    UNIO
2b070 4e 20 41 4c 4c 20 53 45 4c 45 43 54 0a 20 20 20  N ALL SELECT.   
2b080 20 43 41 53 54 28 6c 70 2b 31 20 41 53 20 54 45   CAST(lp+1 AS TE
2b090 58 54 29 2c 20 6c 70 2b 31 20 46 52 4f 4d 20 64  XT), lp+1 FROM d
2b0a0 69 67 69 74 73 20 57 48 45 52 45 20 6c 70 26 6c  igits WHERE lp&l
2b0b0 74 3b 39 0a 20 20 29 2c 0a 20 20 78 28 73 2c 20  t;9.  ),.  x(s, 
2b0c0 69 6e 64 29 20 41 53 20 28 0a 20 20 20 20 53 45  ind) AS (.    SE
2b0d0 4c 45 43 54 20 73 75 64 2c 20 69 6e 73 74 72 28  LECT sud, instr(
2b0e0 73 75 64 2c 20 27 2e 27 29 20 46 52 4f 4d 20 69  sud, '.') FROM i
2b0f0 6e 70 75 74 0a 20 20 20 20 55 4e 49 4f 4e 20 41  nput.    UNION A
2b100 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 0a 20 20  LL.    SELECT.  
2b110 20 20 20 20 73 75 62 73 74 72 28 73 2c 20 31 2c      substr(s, 1,
2b120 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20   ind-1) || z || 
2b130 73 75 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29  substr(s, ind+1)
2b140 2c 0a 20 20 20 20 20 20 69 6e 73 74 72 28 20 73  ,.      instr( s
2b150 75 62 73 74 72 28 73 2c 20 31 2c 20 69 6e 64 2d  ubstr(s, 1, ind-
2b160 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75 62 73 74  1) || z || subst
2b170 72 28 73 2c 20 69 6e 64 2b 31 29 2c 20 27 2e 27  r(s, ind+1), '.'
2b180 20 29 0a 20 20 20 20 20 46 52 4f 4d 20 78 2c 20   ).     FROM x, 
2b190 64 69 67 69 74 73 20 41 53 20 7a 0a 20 20 20 20  digits AS z.    
2b1a0 57 48 45 52 45 20 69 6e 64 3e 30 0a 20 20 20 20  WHERE ind>0.    
2b1b0 20 20 41 4e 44 20 4e 4f 54 20 45 58 49 53 54 53    AND NOT EXISTS
2b1c0 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 53   (.            S
2b1d0 45 4c 45 43 54 20 31 0a 20 20 20 20 20 20 20 20  ELECT 1.        
2b1e0 20 20 20 20 20 20 46 52 4f 4d 20 64 69 67 69 74        FROM digit
2b1f0 73 20 41 53 20 6c 70 0a 20 20 20 20 20 20 20 20  s AS lp.        
2b200 20 20 20 20 20 57 48 45 52 45 20 7a 2e 7a 20 3d       WHERE z.z =
2b210 20 73 75 62 73 74 72 28 73 2c 20 28 28 69 6e 64   substr(s, ((ind
2b220 2d 31 29 2f 39 29 2a 39 20 2b 20 6c 70 2c 20 31  -1)/9)*9 + lp, 1
2b230 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2b240 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62 73 74    OR z.z = subst
2b250 72 28 73 2c 20 28 28 69 6e 64 2d 31 29 25 39 29  r(s, ((ind-1)%9)
2b260 20 2b 20 28 6c 70 2d 31 29 2a 39 20 2b 20 31 2c   + (lp-1)*9 + 1,
2b270 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   1).            
2b280 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75 62      OR z.z = sub
2b290 73 74 72 28 73 2c 20 28 28 28 69 6e 64 2d 31 29  str(s, (((ind-1)
2b2a0 2f 33 29 20 25 20 33 29 20 2a 20 33 0a 20 20 20  /3) % 3) * 3.   
2b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2c0 20 20 20 20 20 2b 20 28 28 69 6e 64 2d 31 29 2f       + ((ind-1)/
2b2d0 32 37 29 20 2a 20 32 37 20 2b 20 6c 70 0a 20 20  27) * 27 + lp.  
2b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2f0 20 20 20 20 20 20 2b 20 28 28 6c 70 2d 31 29 20        + ((lp-1) 
2b300 2f 20 33 29 20 2a 20 36 2c 20 31 29 0a 20 20 20  / 3) * 6, 1).   
2b310 20 20 20 20 20 20 29 0a 20 20 29 0a 53 45 4c 45        ).  ).SELE
2b320 43 54 20 73 20 46 52 4f 4d 20 78 20 57 48 45 52  CT s FROM x WHER
2b330 45 20 69 6e 64 3d 30 3b 0a 3c 2f 70 72 65 3e 3c  E ind=0;.</pre><
2b340 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
2b350 3e 54 68 65 20 22 69 6e 70 75 74 22 20 43 54 45  >The "input" CTE
2b360 20 64 65 66 69 6e 65 73 20 74 68 65 20 69 6e 70   defines the inp
2b370 75 74 20 70 75 7a 7a 6c 65 2e 0a 54 68 65 20 22  ut puzzle..The "
2b380 64 69 67 69 74 73 22 20 43 54 45 20 64 65 66 69  digits" CTE defi
2b390 6e 65 73 20 61 20 74 61 62 6c 65 20 74 68 61 74  nes a table that
2b3a0 20 68 6f 6c 64 73 20 61 6c 6c 20 64 69 67 69 74   holds all digit
2b3b0 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  s between 1 and 
2b3c0 39 2e 0a 54 68 65 20 77 6f 72 6b 20 6f 66 20 73  9..The work of s
2b3d0 6f 6c 76 69 6e 67 20 74 68 65 20 70 75 7a 7a 6c  olving the puzzl
2b3e0 65 20 69 73 20 75 6e 64 65 72 74 61 6b 65 6e 20  e is undertaken 
2b3f0 62 79 20 74 68 65 20 22 78 22 20 43 54 45 2e 0a  by the "x" CTE..
2b400 41 6e 20 65 6e 74 72 79 20 69 6e 20 78 28 73 2c  An entry in x(s,
2b410 69 6e 64 29 20 6d 65 61 6e 73 20 74 68 61 74 20  ind) means that 
2b420 74 68 65 20 38 31 2d 63 68 61 72 61 63 74 65 72  the 81-character
2b430 20 73 74 72 69 6e 67 20 22 73 22 20 69 73 20 61   string "s" is a
2b440 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75   valid.sudoku pu
2b450 7a 7a 6c 65 20 28 69 74 20 68 61 73 20 6e 6f 20  zzle (it has no 
2b460 63 6f 6e 66 6c 69 63 74 73 29 20 61 6e 64 20 74  conflicts) and t
2b470 68 61 74 20 74 68 65 20 66 69 72 73 74 20 75 6e  hat the first un
2b480 6b 6e 6f 77 6e 20 63 68 61 72 61 63 74 65 72 0a  known character.
2b490 69 73 20 61 74 20 70 6f 73 69 74 69 6f 6e 20 22  is at position "
2b4a0 69 6e 64 22 2c 20 6f 72 20 69 6e 64 3d 3d 30 20  ind", or ind==0 
2b4b0 69 66 20 61 6c 6c 20 63 68 61 72 61 63 74 65 72  if all character
2b4c0 20 70 6f 73 69 74 69 6f 6e 73 20 61 72 65 20 66   positions are f
2b4d0 69 6c 6c 65 64 20 69 6e 2e 0a 54 68 65 20 67 6f  illed in..The go
2b4e0 61 6c 2c 20 74 68 65 6e 2c 20 69 73 20 74 6f 20  al, then, is to 
2b4f0 63 6f 6d 70 75 74 65 20 65 6e 74 72 69 65 73 20  compute entries 
2b500 66 6f 72 20 22 78 22 20 77 69 74 68 20 61 6e 20  for "x" with an 
2b510 22 69 6e 64 22 20 6f 66 20 30 2e 0a 0a 3c 70 3e  "ind" of 0...<p>
2b520 54 68 65 20 73 6f 6c 76 65 72 20 77 6f 72 6b 73  The solver works
2b530 20 62 79 20 61 64 64 69 6e 67 20 6e 65 77 20 65   by adding new e
2b540 6e 74 72 69 65 73 20 74 6f 20 74 68 65 20 22 78  ntries to the "x
2b550 22 20 72 65 63 75 72 73 69 76 65 20 74 61 62 6c  " recursive tabl
2b560 65 2e 0a 47 69 76 65 6e 20 70 72 69 6f 72 20 65  e..Given prior e
2b570 6e 74 72 69 65 73 2c 20 74 68 65 20 72 65 63 75  ntries, the recu
2b580 72 73 69 76 65 2d 73 65 6c 65 63 74 20 74 72 69  rsive-select tri
2b590 65 73 20 74 6f 20 66 69 6c 6c 20 69 6e 20 61 20  es to fill in a 
2b5a0 73 69 6e 67 6c 65 20 6e 65 77 0a 70 6f 73 69 74  single new.posit
2b5b0 69 6f 6e 20 77 69 74 68 20 61 6c 6c 20 76 61 6c  ion with all val
2b5c0 75 65 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e  ues between 1 an
2b5d0 64 20 39 20 74 68 61 74 20 61 63 74 75 61 6c 6c  d 9 that actuall
2b5e0 79 20 77 6f 72 6b 20 69 6e 20 74 68 61 74 0a 70  y work in that.p
2b5f0 6f 73 69 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f  osition.  The co
2b600 6d 70 6c 69 63 61 74 65 64 20 22 4e 4f 54 20 45  mplicated "NOT E
2b610 58 49 53 54 53 22 20 73 75 62 71 75 65 72 79 20  XISTS" subquery 
2b620 69 73 20 74 68 65 20 6d 61 67 69 63 20 74 68 61  is the magic tha
2b630 74 0a 66 69 67 75 72 65 73 20 6f 75 74 20 77 68  t.figures out wh
2b640 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
2b650 68 20 63 61 6e 64 69 64 61 74 65 20 22 73 22 20  h candidate "s" 
2b660 73 74 72 69 6e 67 20 69 73 20 61 20 76 61 6c 69  string is a vali
2b670 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a 6c 65 20  d.sudoku puzzle 
2b680 6f 72 20 6e 6f 74 2e 0a 0a 3c 70 3e 54 68 65 20  or not...<p>The 
2b690 66 69 6e 61 6c 20 61 6e 73 77 65 72 20 69 73 20  final answer is 
2b6a0 66 6f 75 6e 64 20 62 79 20 6c 6f 6f 6b 69 6e 67  found by looking
2b6b0 20 66 6f 72 20 61 20 73 74 72 69 6e 67 20 77 69   for a string wi
2b6c0 74 68 20 69 6e 64 3d 3d 30 2e 0a 49 66 20 74 68  th ind==0..If th
2b6d0 65 20 6f 72 69 67 69 6e 61 6c 20 73 75 64 6f 6b  e original sudok
2b6e0 75 20 70 72 6f 62 6c 65 6d 20 64 69 64 20 6e 6f  u problem did no
2b6f0 74 20 68 61 76 65 20 61 20 75 6e 69 71 75 65 20  t have a unique 
2b700 73 6f 6c 75 74 69 6f 6e 2c 20 74 68 65 6e 0a 74  solution, then.t
2b710 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 72 65  he query will re
2b720 74 75 72 6e 20 61 6c 6c 20 70 6f 73 73 69 62 6c  turn all possibl
2b730 65 20 73 6f 6c 75 74 69 6f 6e 73 2e 20 20 49 66  e solutions.  If
2b740 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 70 72   the original pr
2b750 6f 62 6c 65 6d 0a 77 61 73 20 75 6e 73 6f 6c 76  oblem.was unsolv
2b760 61 62 6c 65 2c 20 74 68 65 6e 20 6e 6f 20 72 6f  able, then no ro
2b770 77 73 20 77 69 6c 6c 20 62 65 20 72 65 74 75 72  ws will be retur
2b780 6e 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  ned.  In this ca
2b790 73 65 2c 20 74 68 65 20 75 6e 69 71 75 65 0a 61  se, the unique.a
2b7a0 6e 73 77 65 72 20 69 73 3a 0a 0a 3c 62 6c 6f 63  nswer is:..<bloc
2b7b0 6b 71 75 6f 74 65 3e 0a 35 33 34 36 37 38 39 31  kquote>.53467891
2b7c0 32 36 37 32 31 39 35 33 34 38 31 39 38 33 34 32  2672195348198342
2b7d0 35 36 37 38 35 39 37 36 31 34 32 33 34 32 36 38  5678597614234268
2b7e0 35 33 37 39 31 37 31 33 39 32 34 38 35 36 39 36  5379171392485696
2b7f0 31 35 33 37 32 38 34 32 38 37 34 31 39 36 33 35  1537284287419635
2b800 33 34 35 32 38 36 31 37 39 0a 3c 2f 62 6c 6f 63  345286179.</bloc
2b810 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
2b820 73 6f 6c 75 74 69 6f 6e 20 77 61 73 20 63 6f 6d  solution was com
2b830 70 75 74 65 64 20 69 6e 20 6c 65 73 73 20 74 68  puted in less th
2b840 61 6e 20 33 30 30 20 6d 69 6c 6c 69 73 65 63 6f  an 300 milliseco
2b850 6e 64 73 20 6f 6e 20 61 20 6d 6f 64 65 72 6e 0a  nds on a modern.
2b860 77 6f 72 6b 73 74 61 74 69 6f 6e 2e 0a 0a 3c 68  workstation...<h
2b870 33 3e 4c 69 6d 69 74 61 74 69 6f 6e 73 20 41 6e  3>Limitations An
2b880 64 20 43 61 76 65 61 74 73 3c 2f 68 33 3e 0a 0a  d Caveats</h3>..
2b890 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 54 68 65  <ul>.<li><p>.The
2b8a0 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61 6e   WITH clause can
2b8b0 6e 6f 74 20 62 65 20 75 73 65 64 20 77 69 74 68  not be used with
2b8c0 69 6e 20 61 20 5b 43 52 45 41 54 45 20 54 52 49  in a [CREATE TRI
2b8d0 47 47 45 52 5d 2e 0a 3c 6c 69 3e 3c 70 3e 0a 54  GGER]..<li><p>.T
2b8e0 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 6d  he WITH clause m
2b8f0 75 73 74 20 61 70 70 65 61 72 20 61 74 20 74 68  ust appear at th
2b900 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 61  e beginning of a
2b910 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 53 45 4c 45   top-level [SELE
2b920 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72  CT] statement.or
2b930 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
2b940 67 20 6f 66 20 61 20 73 75 62 71 75 65 72 79 2e  g of a subquery.
2b950 20 20 54 68 65 20 57 49 54 48 20 63 6c 61 75 73    The WITH claus
2b960 65 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65 70  e cannot be prep
2b970 65 6e 64 65 64 20 74 6f 0a 74 68 65 20 73 65 63  ended to.the sec
2b980 6f 6e 64 20 6f 72 20 73 75 62 73 65 71 75 65 6e  ond or subsequen
2b990 74 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  t SELECT stateme
2b9a0 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70 6f 75 6e  nt of a [compoun
2b9b0 64 20 73 65 6c 65 63 74 5d 2e 0a 3c 6c 69 3e 3c  d select]..<li><
2b9c0 70 3e 0a 54 68 65 20 53 51 4c 3a 31 39 39 39 20  p>.The SQL:1999 
2b9d0 73 70 65 63 20 72 65 71 75 69 72 65 73 20 74 68  spec requires th
2b9e0 61 74 20 74 68 65 20 52 45 43 55 52 53 49 56 45  at the RECURSIVE
2b9f0 20 6b 65 79 77 6f 72 64 20 66 6f 6c 6c 6f 77 20   keyword follow 
2ba00 57 49 54 48 20 69 6e 20 61 6e 79 0a 57 49 54 48  WITH in any.WITH
2ba10 20 63 6c 61 75 73 65 20 74 68 61 74 20 69 6e 63   clause that inc
2ba20 6c 75 64 65 73 20 61 20 72 65 63 75 72 73 69 76  ludes a recursiv
2ba30 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  e common table e
2ba40 78 70 72 65 73 73 69 6f 6e 2e 20 20 48 6f 77 65  xpression.  Howe
2ba50 76 65 72 2c 20 66 6f 72 0a 63 6f 6d 70 61 74 69  ver, for.compati
2ba60 62 69 6c 69 74 79 20 77 69 74 68 20 53 71 6c 53  bility with SqlS
2ba70 65 72 76 65 72 20 61 6e 64 20 4f 72 61 63 6c 65  erver and Oracle
2ba80 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
2ba90 74 20 65 6e 66 6f 72 63 65 20 74 68 69 73 20 72  t enforce this r
2baa0 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c  ule..</ul>..<tcl
2bab0 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
2bac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2baf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bb00 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c 45 43 54  #.Section SELECT
2bb10 20 73 65 6c 65 63 74 20 7b 53 45 4c 45 43 54 20   select {SELECT 
2bb20 71 75 65 72 79 7d 0a 0a 52 65 63 75 72 73 69 76  query}..Recursiv
2bb30 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 73  eBubbleDiagram s
2bb40 65 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c  elect-stmt.</tcl
2bb50 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45 4c 45 43  >...<p>The SELEC
2bb60 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  T statement is u
2bb70 73 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  sed to query the
2bb80 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 0a   database.  The.
2bb90 72 65 73 75 6c 74 20 6f 66 20 61 20 53 45 4c 45  result of a SELE
2bba0 43 54 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f  CT is zero or mo
2bbb0 72 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61 20  re rows of data 
2bbc0 77 68 65 72 65 20 65 61 63 68 20 72 6f 77 0a 68  where each row.h
2bbd0 61 73 20 61 20 66 69 78 65 64 20 6e 75 6d 62 65  as a fixed numbe
2bbe0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e 20 20 41  r of columns.  A
2bbf0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2bc00 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 0a  t does not make.
2bc10 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f 20 74  any changes to t
2bc20 68 65 20 64 61 74 61 62 61 73 65 2e 0a 0a 3c 70  he database...<p
2bc30 3e 54 68 65 20 22 5b 73 65 6c 65 63 74 2d 73 74  >The "[select-st
2bc40 6d 74 5d 22 20 73 79 6e 74 61 78 20 64 69 61 67  mt]" syntax diag
2bc50 72 61 6d 20 61 62 6f 76 65 20 61 74 74 65 6d 70  ram above attemp
2bc60 74 73 20 74 6f 20 73 68 6f 77 20 61 73 20 6d 75  ts to show as mu
2bc70 63 68 20 6f 66 20 74 68 65 0a 53 45 4c 45 43 54  ch of the.SELECT
2bc80 20 73 74 61 74 65 6d 65 6e 74 20 73 79 6e 74 61   statement synta
2bc90 78 20 61 73 20 70 6f 73 73 69 62 6c 65 20 69 6e  x as possible in
2bca0 20 61 20 73 69 6e 67 6c 65 20 64 69 61 67 72 61   a single diagra
2bcb0 6d 2c 20 62 65 63 61 75 73 65 20 73 6f 6d 65 20  m, because some 
2bcc0 72 65 61 64 65 72 73 0a 66 69 6e 64 20 74 68 61  readers.find tha
2bcd0 74 20 68 65 6c 70 66 75 6c 2e 20 20 54 68 65 20  t helpful.  The 
2bce0 66 6f 6c 6c 6f 77 69 6e 67 20 22 5b 66 61 63 74  following "[fact
2bcf0 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74  ored-select-stmt
2bd00 5d 22 20 69 73 20 61 6e 20 61 6c 74 65 72 6e 61  ]" is an alterna
2bd10 74 69 76 65 0a 73 79 6e 74 61 78 20 64 69 61 67  tive.syntax diag
2bd20 72 61 6d 73 20 74 68 61 74 20 65 78 70 72 65 73  rams that expres
2bd30 73 65 73 20 74 68 65 20 73 61 6d 65 20 73 79 6e  ses the same syn
2bd40 74 61 78 20 62 75 74 20 74 72 69 65 73 20 74 6f  tax but tries to
2bd50 20 62 72 65 61 6b 20 74 68 65 20 73 79 6e 74 61   break the synta
2bd60 78 20 0a 64 6f 77 6e 20 69 6e 74 6f 20 73 6d 61  x .down into sma
2bd70 6c 6c 65 72 20 63 68 75 6e 6b 73 2e 0a 0a 3c 74  ller chunks...<t
2bd80 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62  cl>.RecursiveBub
2bd90 62 6c 65 44 69 61 67 72 61 6d 20 2d 2d 69 6e 69  bleDiagram --ini
2bda0 74 69 61 6c 6c 79 2d 68 69 64 64 65 6e 20 66 61  tially-hidden fa
2bdb0 63 74 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73 74  ctored-select-st
2bdc0 6d 74 20 73 65 6c 65 63 74 2d 63 6f 72 65 0a 3c  mt select-core.<
2bdd0 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74  /tcl>..<p>Note t
2bde0 68 61 74 20 74 68 65 72 65 20 61 72 65 20 70 61  hat there are pa
2bdf0 74 68 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  ths through the 
2be00 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
2be10 74 68 61 74 0a 61 72 65 20 6e 6f 74 20 61 6c 6c  that.are not all
2be20 6f 77 65 64 20 69 6e 20 70 72 61 63 74 69 63 65  owed in practice
2be30 2e 20 20 53 6f 6d 65 20 65 78 61 6d 70 6c 65 73  .  Some examples
2be40 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 5b 56 41  :.<ul>.<li>A [VA
2be50 4c 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61 6e  LUES] clause can
2be60 20 62 65 20 74 68 65 20 66 69 72 73 74 20 65 6c   be the first el
2be70 65 6d 65 6e 74 20 69 6e 20 61 20 5b 63 6f 6d 70  ement in a [comp
2be80 6f 75 6e 64 20 53 45 4c 45 43 54 5d 0a 20 20 20  ound SELECT].   
2be90 20 74 68 61 74 20 75 73 65 73 20 61 20 5b 57 49   that uses a [WI
2bea0 54 48 5d 20 63 6c 61 75 73 65 2c 20 62 75 74 20  TH] clause, but 
2beb0 61 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  a [simple SELECT
2bec0 5d 20 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20  ] that consists 
2bed0 6f 66 0a 20 20 20 20 6a 75 73 74 20 61 20 5b 56  of.    just a [V
2bee0 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 20 63 61  ALUES] clause ca
2bef0 6e 6e 6f 74 20 62 65 20 70 72 65 63 65 64 65 64  nnot be preceded
2bf00 20 62 79 20 61 20 5b 57 49 54 48 5d 20 63 6c 61   by a [WITH] cla
2bf10 75 73 65 2e 0a 3c 6c 69 3e 54 68 65 20 5b 57 49  use..<li>The [WI
2bf20 54 48 5d 20 63 6c 61 75 73 65 20 6d 75 73 74 20  TH] clause must 
2bf30 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 66 69 72  occur on the fir
2bf40 73 74 20 53 45 4c 45 43 54 20 6f 66 20 61 20 5b  st SELECT of a [
2bf50 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d  compound SELECT]
2bf60 2e 0a 20 20 20 20 49 74 20 63 61 6e 6e 6f 74 20  ..    It cannot 
2bf70 66 6f 6c 6c 6f 77 20 61 20 5b 63 6f 6d 70 6f 75  follow a [compou
2bf80 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 2e 0a 3c 2f  nd-operator]..</
2bf90 75 6c 3e 0a 54 68 65 73 65 20 61 6e 64 20 6f 74  ul>.These and ot
2bfa0 68 65 72 20 73 69 6d 69 6c 61 72 20 73 79 6e 74  her similar synt
2bfb0 61 78 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20  ax restrictions 
2bfc0 61 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e  are described in
2bfd0 20 74 68 65 20 74 65 78 74 2e 0a 0a 3c 70 3e 54   the text...<p>T
2bfe0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2bff0 65 6e 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ent is the most 
2c000 63 6f 6d 70 6c 69 63 61 74 65 64 20 63 6f 6d 6d  complicated comm
2c010 61 6e 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c  and in the SQL l
2c020 61 6e 67 75 61 67 65 2e 0a 54 6f 20 6d 61 6b 65  anguage..To make
2c030 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e   the description
2c040 20 65 61 73 69 65 72 20 74 6f 20 66 6f 6c 6c 6f   easier to follo
2c050 77 2c 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 70  w, some of the p
2c060 61 73 73 61 67 65 73 20 62 65 6c 6f 77 20 64 65  assages below de
2c070 73 63 72 69 62 65 0a 74 68 65 20 77 61 79 20 74  scribe.the way t
2c080 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  he data returned
2c090 20 62 79 20 61 20 53 45 4c 45 43 54 20 73 74 61   by a SELECT sta
2c0a0 74 65 6d 65 6e 74 20 69 73 20 64 65 74 65 72 6d  tement is determ
2c0b0 69 6e 65 64 20 61 73 20 61 20 73 65 72 69 65 73  ined as a series
2c0c0 20 6f 66 0a 73 74 65 70 73 2e 20 49 74 20 69 73   of.steps. It is
2c0d0 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 6b 65   important to ke
2c0e0 65 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20  ep in mind that 
2c0f0 74 68 69 73 20 69 73 20 70 75 72 65 6c 79 20 69  this is purely i
2c100 6c 6c 75 73 74 72 61 74 69 76 65 20 2d 0a 69 6e  llustrative -.in
2c110 20 70 72 61 63 74 69 63 65 20 6e 65 69 74 68 65   practice neithe
2c120 72 20 53 51 4c 69 74 65 20 6e 6f 72 20 61 6e 79  r SQLite nor any
2c130 20 6f 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e   other SQL engin
2c140 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  e is required to
2c150 20 66 6f 6c 6c 6f 77 20 0a 74 68 69 73 20 6f 72   follow .this or
2c160 20 61 6e 79 20 6f 74 68 65 72 20 73 70 65 63 69   any other speci
2c170 66 69 63 20 70 72 6f 63 65 73 73 2e 0a 0a 3c 74  fic process...<t
2c180 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
2c190 69 6d 70 6c 65 73 65 6c 65 63 74 20 7b 73 69 6d  impleselect {sim
2c1a0 70 6c 65 20 53 45 4c 45 43 54 7d 3c 2f 74 63 6c  ple SELECT}</tcl
2c1b0 3e 0a 3c 68 33 3e 53 69 6d 70 6c 65 20 53 65 6c  >.<h3>Simple Sel
2c1c0 65 63 74 20 50 72 6f 63 65 73 73 69 6e 67 3c 2f  ect Processing</
2c1d0 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 72 65  h3>..<p>The core
2c1e0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74 61   of a SELECT sta
2c1f0 74 65 6d 65 6e 74 20 69 73 20 61 20 22 73 69 6d  tement is a "sim
2c200 70 6c 65 20 53 45 4c 45 43 54 22 20 73 68 6f 77  ple SELECT" show
2c210 6e 20 62 79 20 74 68 65 0a 5b 73 65 6c 65 63 74  n by the.[select
2c220 2d 63 6f 72 65 5d 20 61 6e 64 20 5b 73 69 6d 70  -core] and [simp
2c230 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74 5d 20  le-select-stmt] 
2c240 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 73 20  syntax diagrams 
2c250 62 65 6c 6f 77 2e 20 20 0a 49 6e 20 70 72 61 63  below.  .In prac
2c260 74 69 63 65 2c 20 6d 6f 73 74 20 53 45 4c 45 43  tice, most SELEC
2c270 54 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65  T statements are
2c280 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
2c290 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c 74 63 6c  tatements...<tcl
2c2a0 3e 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  >.RecursiveBubbl
2c2b0 65 44 69 61 67 72 61 6d 20 73 69 6d 70 6c 65 2d  eDiagram simple-
2c2c0 73 65 6c 65 63 74 2d 73 74 6d 74 20 73 65 6c 65  select-stmt sele
2c2d0 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c 3e 0a 0a  ct-core.</tcl>..
2c2e0 3c 70 3e 47 65 6e 65 72 61 74 69 6e 67 20 74 68  <p>Generating th
2c2f0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73  e results of a s
2c300 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 73 74 61  imple SELECT.sta
2c310 74 65 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e  tement is presen
2c320 74 65 64 20 61 73 20 61 20 66 6f 75 72 20 73 74  ted as a four st
2c330 65 70 20 70 72 6f 63 65 73 73 20 69 6e 20 74 68  ep process in th
2c340 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 62 65  e description be
2c350 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20 3c 6c 69  low:..<ol>.  <li
2c360 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c 61 75 73  > <p>[FROM claus
2c370 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54  e] processing: T
2c380 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 66 6f  he input data fo
2c390 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  r the simple SEL
2c3a0 45 43 54 20 69 73 0a 20 20 20 20 20 20 20 64 65  ECT is.       de
2c3b0 74 65 72 6d 69 6e 65 64 2e 20 54 68 65 20 69 6e  termined. The in
2c3c0 70 75 74 20 64 61 74 61 20 69 73 20 65 69 74 68  put data is eith
2c3d0 65 72 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20  er implicitly a 
2c3e0 73 69 6e 67 6c 65 20 72 6f 77 20 77 69 74 68 20  single row with 
2c3f0 30 0a 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73  0.       columns
2c400 20 28 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f   (if there is no
2c410 20 46 52 4f 4d 20 63 6c 61 75 73 65 29 20 6f 72   FROM clause) or
2c420 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
2c430 79 20 74 68 65 20 46 52 4f 4d 0a 20 20 20 20 20  y the FROM.     
2c440 20 20 63 6c 61 75 73 65 2e 0a 20 20 3c 6c 69 3e    clause..  <li>
2c450 20 3c 70 3e 5b 57 48 45 52 45 20 63 6c 61 75 73   <p>[WHERE claus
2c460 65 5d 20 70 72 6f 63 65 73 73 69 6e 67 3a 20 54  e] processing: T
2c470 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 69 73  he input data is
2c480 20 66 69 6c 74 65 72 65 64 20 75 73 69 6e 67 20   filtered using 
2c490 74 68 65 20 57 48 45 52 45 0a 20 20 20 20 20 20  the WHERE.      
2c4a0 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73 69   clause expressi
2c4b0 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e  on.  .  <li> <p>
2c4c0 5b 47 52 4f 55 50 20 42 59 7c 47 52 4f 55 50 20  [GROUP BY|GROUP 
2c4d0 42 59 2c 20 48 41 56 49 4e 47 20 61 6e 64 20 72  BY, HAVING and r
2c4e0 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20 65 78 70  esult-column exp
2c4f0 72 65 73 73 69 6f 6e 5d 20 70 72 6f 63 65 73 73  ression] process
2c500 69 6e 67 3a 20 0a 20 20 20 20 20 20 20 54 68 65  ing: .       The
2c510 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72   set of result r
2c520 6f 77 73 20 69 73 20 63 6f 6d 70 75 74 65 64 20  ows is computed 
2c530 62 79 20 61 67 67 72 65 67 61 74 69 6e 67 20 74  by aggregating t
2c540 68 65 20 64 61 74 61 20 61 63 63 6f 72 64 69 6e  he data accordin
2c550 67 20 74 6f 0a 20 20 20 20 20 20 20 61 6e 79 20  g to.       any 
2c560 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
2c570 61 6e 64 20 63 61 6c 63 75 6c 61 74 69 6e 67 20  and calculating 
2c580 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 65  the result-set e
2c590 78 70 72 65 73 73 69 6f 6e 73 20 66 6f 72 20 74  xpressions for t
2c5a0 68 65 0a 20 20 20 20 20 20 20 72 6f 77 73 20 6f  he.       rows o
2c5b0 66 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 69  f the filtered i
2c5c0 6e 70 75 74 20 64 61 74 61 73 65 74 2e 20 20 0a  nput dataset.  .
2c5d0 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49 53 54 49    <li> <p>[DISTI
2c5e0 4e 43 54 7c 44 49 53 54 49 4e 43 54 2f 41 4c 4c  NCT|DISTINCT/ALL
2c5f0 20 6b 65 79 77 6f 72 64 5d 20 70 72 6f 63 65 73   keyword] proces
2c600 73 69 6e 67 3a 20 49 66 20 74 68 65 20 71 75 65  sing: If the que
2c610 72 79 20 69 73 20 61 20 22 53 45 4c 45 43 54 0a  ry is a "SELECT.
2c620 20 20 20 20 20 20 20 44 49 53 54 49 4e 43 54 22         DISTINCT"
2c630 20 71 75 65 72 79 2c 20 64 75 70 6c 69 63 61 74   query, duplicat
2c640 65 20 72 6f 77 73 20 61 72 65 20 72 65 6d 6f 76  e rows are remov
2c650 65 64 20 66 72 6f 6d 20 74 68 65 20 73 65 74 20  ed from the set 
2c660 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 0a  of result rows..
2c670 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 72 65 20  </ol>..<p>There 
2c680 61 72 65 20 74 77 6f 20 74 79 70 65 73 20 6f 66  are two types of
2c690 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
2c6a0 74 61 74 65 6d 65 6e 74 20 2d 20 61 67 67 72 65  tatement - aggre
2c6b0 67 61 74 65 20 61 6e 64 20 0a 6e 6f 6e 2d 61 67  gate and .non-ag
2c6c0 67 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2e  gregate queries.
2c6d0 20 5e 41 20 73 69 6d 70 6c 65 20 53 45 4c 45 43   ^A simple SELEC
2c6e0 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61  T statement is a
2c6f0 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n aggregate quer
2c700 79 20 69 66 0a 69 74 20 63 6f 6e 74 61 69 6e 73  y if.it contains
2c710 20 65 69 74 68 65 72 20 61 20 47 52 4f 55 50 20   either a GROUP 
2c720 42 59 20 63 6c 61 75 73 65 20 6f 72 20 6f 6e 65  BY clause or one
2c730 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
2c740 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a 69 6e 20  te functions.in 
2c750 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2e 20  the result-set. 
2c760 5e 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 61  ^Otherwise, if a
2c770 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 63   simple SELECT c
2c780 6f 6e 74 61 69 6e 73 20 6e 6f 20 61 67 67 72 65  ontains no aggre
2c790 67 61 74 65 0a 66 75 6e 63 74 69 6f 6e 73 20 6f  gate.functions o
2c7a0 72 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61  r a GROUP BY cla
2c7b0 75 73 65 2c 20 69 74 20 69 73 20 61 20 6e 6f 6e  use, it is a non
2c7c0 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79  -aggregate query
2c7d0 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44 65 74 65  ...<p><b>1. Dete
2c7e0 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20 69 6e 70  rmination of inp
2c7f0 75 74 20 64 61 74 61 20 28 46 52 4f 4d 20 63 6c  ut data (FROM cl
2c800 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 29  ause processing)
2c810 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72  .</b>.<tcl>hd_fr
2c820 61 67 6d 65 6e 74 20 66 72 6f 6d 63 6c 61 75 73  agment fromclaus
2c830 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f  e</tcl>.<tcl>hd_
2c840 6b 65 79 77 6f 72 64 73 20 7b 46 52 4f 4d 20 63  keywords {FROM c
2c850 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  lause}</tcl>..<p
2c860 3e 54 68 65 20 69 6e 70 75 74 20 64 61 74 61 20  >The input data 
2c870 75 73 65 64 20 62 79 20 61 20 73 69 6d 70 6c 65  used by a simple
2c880 20 53 45 4c 45 43 54 20 71 75 65 72 79 20 69 73   SELECT query is
2c890 20 61 20 73 65 74 20 6f 66 20 3c 69 3e 4e 3c 2f   a set of <i>N</
2c8a0 69 3e 20 72 6f 77 73 20 0a 65 61 63 68 20 3c 69  i> rows .each <i
2c8b0 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e 73 20 77  >M</i> columns w
2c8c0 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68  ide...<p>^(If th
2c8d0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73  e FROM clause is
2c8e0 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 61 20   omitted from a 
2c8f0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74  simple SELECT st
2c900 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
2c910 65 20 0a 69 6e 70 75 74 20 64 61 74 61 20 69 73  e .input data is
2c920 20 69 6d 70 6c 69 63 69 74 6c 79 20 61 20 73 69   implicitly a si
2c930 6e 67 6c 65 20 72 6f 77 20 7a 65 72 6f 20 63 6f  ngle row zero co
2c940 6c 75 6d 6e 73 20 77 69 64 65 29 5e 20 28 69 2e  lumns wide)^ (i.
2c950 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31 20 61 6e  e. <i>N</i>=1 an
2c960 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29 2e 0a 0a  d.<i>M</i>=0)...
2c970 3c 70 3e 49 66 20 61 20 46 52 4f 4d 20 63 6c 61  <p>If a FROM cla
2c980 75 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64  use is specified
2c990 2c 20 74 68 65 20 64 61 74 61 20 6f 6e 20 77 68  , the data on wh
2c9a0 69 63 68 20 61 20 73 69 6d 70 6c 65 20 53 45 4c  ich a simple SEL
2c9b0 45 43 54 20 71 75 65 72 79 0a 6f 70 65 72 61 74  ECT query.operat
2c9c0 65 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68  es comes from th
2c9d0 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61  e one or more ta
2c9e0 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
2c9f0 65 73 20 28 53 45 4c 45 43 54 20 73 74 61 74 65  es (SELECT state
2ca00 6d 65 6e 74 73 0a 69 6e 20 70 61 72 65 6e 74 68  ments.in parenth
2ca10 65 73 69 73 29 20 73 70 65 63 69 66 69 65 64 20  esis) specified 
2ca20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52  following the FR
2ca30 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 5e 41 20 73  OM keyword. ^A s
2ca40 75 62 71 75 65 72 79 20 73 70 65 63 69 66 69 65  ubquery specifie
2ca50 64 0a 69 6e 20 74 68 65 20 3c 79 79 74 65 72 6d  d.in the <yyterm
2ca60 3e 74 61 62 6c 65 2d 6f 72 2d 73 75 62 71 75 65  >table-or-subque
2ca70 72 79 3c 2f 79 79 74 65 72 6d 3e 20 66 6f 6c 6c  ry</yyterm> foll
2ca80 6f 77 69 6e 67 20 74 68 65 20 46 52 4f 4d 20 63  owing the FROM c
2ca90 6c 61 75 73 65 20 69 6e 20 61 20 0a 73 69 6d 70  lause in a .simp
2caa0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
2cab0 65 6e 74 20 69 73 0a 68 61 6e 64 6c 65 64 20 61  ent is.handled a
2cac0 73 20 69 66 20 69 74 20 77 61 73 20 61 20 74 61  s if it was a ta
2cad0 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
2cae0 68 65 20 64 61 74 61 20 72 65 74 75 72 6e 65 64  he data returned
2caf0 20 62 79 20 65 78 65 63 75 74 69 6e 67 20 74 68   by executing th
2cb00 65 0a 73 75 62 71 75 65 72 79 20 73 74 61 74 65  e.subquery state
2cb10 6d 65 6e 74 2e 20 5e 45 61 63 68 20 63 6f 6c 75  ment. ^Each colu
2cb20 6d 6e 20 6f 66 20 74 68 65 20 73 75 62 71 75 65  mn of the subque
2cb30 72 79 20 68 61 73 20 74 68 65 0a 5b 63 6f 6c 6c  ry has the.[coll
2cb40 61 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69 6f 6e 20  ation|collation 
2cb50 73 65 71 75 65 6e 63 65 5d 20 61 6e 64 20 5b 61  sequence] and [a
2cb60 66 66 69 6e 69 74 79 5d 20 6f 66 20 74 68 65 20  ffinity] of the 
2cb70 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 65 78  corresponding ex
2cb80 70 72 65 73 73 69 6f 6e 0a 69 6e 20 74 68 65 20  pression.in the 
2cb90 73 75 62 71 75 65 72 79 20 73 74 61 74 65 6d 65  subquery stateme
2cba0 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 72  nt...<p>^If ther
2cbb0 65 20 69 73 20 6f 6e 6c 79 20 61 20 73 69 6e 67  e is only a sing
2cbc0 6c 65 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  le table or subq
2cbd0 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
2cbe0 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68  .clause, then th
2cbf0 65 20 69 6e 70 75 74 20 64 61 74 61 20 75 73 65  e input data use
2cc00 64 20 62 79 20 74 68 65 20 53 45 4c 45 43 54 20  d by the SELECT 
2cc10 73 74 61 74 65 6d 65 6e 74 20 69 73 20 74 68 65  statement is the
2cc20 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
2cc30 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 5e 49  .named table. ^I
2cc40 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
2cc50 74 68 61 6e 20 6f 6e 65 20 74 61 62 6c 65 20 6f  than one table o
2cc60 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 46 52  r subquery in FR
2cc70 4f 4d 20 63 6c 61 75 73 65 0a 74 68 65 6e 20 74  OM clause.then t
2cc80 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 61  he contents of a
2cc90 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 2f 6f 72  ll tables and/or
2cca0 20 73 75 62 71 75 65 72 69 65 73 0a 61 72 65 20   subqueries.are 
2ccb0 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 69  joined into a si
2ccc0 6e 67 6c 65 20 64 61 74 61 73 65 74 20 66 6f 72  ngle dataset for
2ccd0 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45   the simple SELE
2cce0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  CT statement to 
2ccf0 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45 78 61 63  operate on..Exac
2cd00 74 6c 79 20 68 6f 77 20 74 68 65 20 64 61 74 61  tly how the data
2cd10 20 69 73 20 63 6f 6d 62 69 6e 65 64 20 64 65 70   is combined dep
2cd20 65 6e 64 73 20 6f 6e 20 74 68 65 20 73 70 65 63  ends on the spec
2cd30 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70 65 72 61  ific [join-opera
2cd40 74 6f 72 5d 20 61 6e 64 0a 5b 6a 6f 69 6e 2d 63  tor] and.[join-c
2cd50 6f 6e 73 74 72 61 69 6e 74 5d 20 75 73 65 64 20  onstraint] used 
2cd60 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68 65 20 74  to connect the t
2cd70 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72  ables or subquer
2cd80 69 65 73 20 74 6f 67 65 74 68 65 72 2e 0a 0a 3c  ies together...<
2cd90 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69 6e 20 53  p>All joins in S
2cda0 51 4c 69 74 65 20 61 72 65 20 62 61 73 65 64 20  QLite are based 
2cdb0 6f 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e  on the cartesian
2cdc0 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20   product of the 
2cdd0 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74 2d 68  left and.right-h
2cde0 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e 54  and datasets. ^T
2cdf0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
2ce00 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64  e cartesian prod
2ce10 75 63 74 20 64 61 74 61 73 65 74 20 61 72 65 2c  uct dataset are,
2ce20 20 69 6e 20 0a 6f 72 64 65 72 2c 20 61 6c 6c 20   in .order, all 
2ce30 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  the columns of t
2ce40 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 64 61 74  he left-hand dat
2ce50 61 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79  aset followed by
2ce60 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73   all the columns
2ce70 0a 6f 66 20 74 68 65 20 72 69 67 68 74 2d 68 61  .of the right-ha
2ce80 6e 64 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65  nd dataset. ^The
2ce90 72 65 20 69 73 20 61 20 72 6f 77 20 69 6e 20 74  re is a row in t
2cea0 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
2ceb0 64 75 63 74 20 64 61 74 61 73 65 74 0a 66 6f 72  duct dataset.for
2cec0 6d 65 64 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67  med by combining
2ced0 20 65 61 63 68 20 75 6e 69 71 75 65 20 63 6f 6d   each unique com
2cee0 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61 20 72 6f  bination of a ro
2cef0 77 20 66 72 6f 6d 20 74 68 65 20 6c 65 66 74 2d  w from the left-
2cf00 68 61 6e 64 20 0a 61 6e 64 20 72 69 67 68 74 2d  hand .and right-
2cf10 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 5e  hand datasets. ^
2cf20 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  (In other words,
2cf30 20 69 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e   if the left-han
2cf40 64 20 64 61 74 61 73 65 74 20 63 6f 6e 73 69 73  d dataset consis
2cf50 74 73 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c  ts of.<i>N<sub><
2cf60 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c  small>left</smal
2cf70 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77  l></sub></i> row
2cf80 73 20 6f 66 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c  s of .<i>M<sub><
2cf90 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c  small>left</smal
2cfa0 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c  l></sub></i> col
2cfb0 75 6d 6e 73 2c 20 61 6e 64 20 74 68 65 20 72 69  umns, and the ri
2cfc0 67 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74  ght-hand dataset
2cfd0 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d   of.<i>N<sub><sm
2cfe0 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c  all>right</small
2cff0 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72 6f 77 73  ></sub></i> rows
2d000 20 6f 66 0a 3c 69 3e 4d 3c 73 75 62 3e 3c 73 6d   of.<i>M<sub><sm
2d010 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61 6c 6c  all>right</small
2d020 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f 6c 75  ></sub></i> colu
2d030 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 63 61  mns, then the ca
2d040 72 74 65 73 69 61 6e 20 70 72 6f 64 75 63 74 20  rtesian product 
2d050 69 73 20 61 0a 64 61 74 61 73 65 74 20 6f 66 20  is a.dataset of 
2d060 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d 61 6c 6c  .<i>N<sub><small
2d070 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e 3c 2f 73  >left</small></s
2d080 75 62 3e 26 74 69 6d 65 73 3b 4e 3c 73 75 62 3e  ub>&times;N<sub>
2d090 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d  <small>right</sm
2d0a0 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 0a 72  all></sub></i>.r
2d0b0 6f 77 73 2c 20 65 61 63 68 20 63 6f 6e 74 61 69  ows, each contai
2d0c0 6e 69 6e 67 20 0a 3c 69 3e 4d 3c 73 75 62 3e 3c  ning .<i>M<sub><
2d0d0 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c  small>left</smal
2d0e0 6c 3e 3c 2f 73 75 62 3e 2b 4d 3c 73 75 62 3e 3c  l></sub>+M<sub><
2d0f0 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d 61  small>right</sma
2d100 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63 6f  ll></sub></i> co
2d110 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e 5e 49 66  lumns.)^..<p>^If
2d120 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74   the join-operat
2d130 6f 72 20 69 73 20 22 43 52 4f 53 53 20 4a 4f 49  or is "CROSS JOI
2d140 4e 22 2c 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22  N", "INNER JOIN"
2d150 2c 20 22 4a 4f 49 4e 22 20 6f 72 20 61 20 63 6f  , "JOIN" or a co
2d160 6d 6d 61 0a 28 22 2c 22 29 20 61 6e 64 20 74 68  mma.(",") and th
2d170 65 72 65 20 69 73 20 6e 6f 20 4f 4e 20 6f 72 20  ere is no ON or 
2d180 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74 68  USING clause, th
2d190 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  en the result of
2d1a0 20 74 68 65 20 6a 6f 69 6e 20 69 73 0a 73 69 6d   the join is.sim
2d1b0 70 6c 79 20 74 68 65 20 63 61 72 74 65 73 69 61  ply the cartesia
2d1c0 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65  n product of the
2d1d0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 2d   left and right-
2d1e0 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e 20 0a  hand datasets. .
2d1f0 49 66 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  If join-operator
2d200 20 64 6f 65 73 20 68 61 76 65 20 4f 4e 20 6f 72   does have ON or
2d210 20 55 53 49 4e 47 20 63 6c 61 75 73 65 73 2c 20   USING clauses, 
2d220 74 68 6f 73 65 20 61 72 65 20 68 61 6e 64 6c 65  those are handle
2d230 64 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 0a 74  d according to.t
2d240 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c  he following bul
2d250 6c 65 74 20 70 6f 69 6e 74 73 3a 0a 0a 3c 75 6c  let points:..<ul
2d260 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e 28 49 66  >.  <li> <p>^(If
2d270 20 74 68 65 72 65 20 69 73 20 61 6e 20 4f 4e 20   there is an ON 
2d280 63 6c 61 75 73 65 20 74 68 65 6e 20 74 68 65 20  clause then the 
2d290 4f 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ON expression is
2d2a0 0a 20 20 20 20 20 20 20 65 76 61 6c 75 61 74 65  .       evaluate
2d2b0 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
2d2c0 66 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  f the cartesian 
2d2d0 70 72 6f 64 75 63 74 20 61 73 20 61 20 0a 20 20  product as a .  
2d2e0 20 20 20 20 20 5b 62 6f 6f 6c 65 61 6e 20 65 78       [boolean ex
2d2f0 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e 6c 79 20  pression]. Only 
2d300 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
2d310 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  he expression ev
2d320 61 6c 75 61 74 65 73 20 74 6f 20 0a 20 20 20 20  aluates to .    
2d330 20 20 20 74 72 75 65 20 61 72 65 20 69 6e 63 6c     true are incl
2d340 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  uded from the da
2d350 74 61 73 65 74 2e 29 5e 0a 0a 20 20 3c 6c 69 3e  taset.)^..  <li>
2d360 20 3c 70 3e 5e 49 66 20 74 68 65 72 65 20 69 73   <p>^If there is
2d370 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 0a   a USING clause.
2d380 20 20 20 20 20 20 20 74 68 65 6e 20 65 61 63 68         then each
2d390 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   of the column n
2d3a0 61 6d 65 73 20 73 70 65 63 69 66 69 65 64 20 6d  ames specified m
2d3b0 75 73 74 20 65 78 69 73 74 20 69 6e 20 74 68 65  ust exist in the
2d3c0 20 64 61 74 61 73 65 74 73 20 74 6f 20 0a 20 20   datasets to .  
2d3d0 20 20 20 20 20 62 6f 74 68 20 74 68 65 20 6c 65       both the le
2d3e0 66 74 20 61 6e 64 20 72 69 67 68 74 20 6f 66 20  ft and right of 
2d3f0 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f  the join-operato
2d400 72 2e 20 5e 28 46 6f 72 20 65 61 63 68 20 70 61  r. ^(For each pa
2d410 69 72 20 6f 66 20 6e 61 6d 65 64 0a 20 20 20 20  ir of named.    
2d420 20 20 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20     columns, the 
2d430 65 78 70 72 65 73 73 69 6f 6e 20 22 6c 68 73 2e  expression "lhs.
2d440 58 20 3d 20 72 68 73 2e 58 22 20 69 73 20 65 76  X = rhs.X" is ev
2d450 61 6c 75 61 74 65 64 20 66 6f 72 20 65 61 63 68  aluated for each
2d460 20 72 6f 77 20 6f 66 0a 20 20 20 20 20 20 20 74   row of.       t
2d470 68 65 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f  he cartesian pro
2d480 64 75 63 74 20 61 73 20 61 20 5b 62 6f 6f 6c 65  duct as a [boole
2d490 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20  an expression]. 
2d4a0 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68  Only rows for wh
2d4b0 69 63 68 0a 20 20 20 20 20 20 20 61 6c 6c 20 73  ich.       all s
2d4c0 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 20  uch expressions 
2d4d0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 74 72 75  evaluates to tru
2d4e0 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66  e are included f
2d4f0 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 20 72  rom the.       r
2d500 65 73 75 6c 74 20 73 65 74 2e 29 5e 20 5e 57 68  esult set.)^ ^Wh
2d510 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 76 61 6c  en comparing val
2d520 75 65 73 20 61 73 20 61 20 72 65 73 75 6c 74 20  ues as a result 
2d530 6f 66 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73  of a USING claus
2d540 65 2c 20 74 68 65 0a 20 20 20 20 20 20 20 6e 6f  e, the.       no
2d550 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f 72 20 68  rmal rules for h
2d560 61 6e 64 6c 69 6e 67 20 61 66 66 69 6e 69 74 69  andling affiniti
2d570 65 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  es, collation se
2d580 71 75 65 6e 63 65 73 20 61 6e 64 20 4e 55 4c 4c  quences and NULL
2d590 0a 20 20 20 20 20 20 20 76 61 6c 75 65 73 20 69  .       values i
2d5a0 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 61 70  n comparisons ap
2d5b0 70 6c 79 2e 20 5e 54 68 65 20 63 6f 6c 75 6d 6e  ply. ^The column
2d5c0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65   from the datase
2d5d0 74 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20  t on the.       
2d5e0 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f  left-hand side o
2d5f0 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61  f the join-opera
2d600 74 6f 72 20 69 73 20 63 6f 6e 73 69 64 65 72 65  tor is considere
2d610 64 20 74 6f 20 62 65 20 6f 6e 20 74 68 65 20 6c  d to be on the l
2d620 65 66 74 2d 68 61 6e 64 0a 20 20 20 20 20 20 20  eft-hand.       
2d630 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6d 70  side of the comp
2d640 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 20  arison operator 
2d650 28 3d 29 20 66 6f 72 20 74 68 65 20 70 75 72 70  (=) for the purp
2d660 6f 73 65 73 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  oses of collatio
2d670 6e 20 0a 20 20 20 20 20 20 20 73 65 71 75 65 6e  n .       sequen
2d680 63 65 20 61 6e 64 20 61 66 66 69 6e 69 74 79 20  ce and affinity 
2d690 70 72 65 63 65 64 65 6e 63 65 2e 0a 0a 20 20 20  precedence...   
2d6a0 20 20 20 20 3c 70 3e 5e 46 6f 72 20 65 61 63 68      <p>^For each
2d6b0 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73   pair of columns
2d6c0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
2d6d0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c 20 74   USING clause, t
2d6e0 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  he column.      
2d6f0 20 66 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d   from the right-
2d700 68 61 6e 64 20 64 61 74 61 73 65 74 20 69 73 20  hand dataset is 
2d710 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
2d720 20 6a 6f 69 6e 65 64 20 64 61 74 61 73 65 74 2e   joined dataset.
2d730 20 5e 54 68 69 73 20 0a 20 20 20 20 20 20 20 69   ^This .       i
2d740 73 20 74 68 65 20 6f 6e 6c 79 20 64 69 66 66 65  s the only diffe
2d750 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20  rence between a 
2d760 55 53 49 4e 47 20 63 6c 61 75 73 65 20 61 6e 64  USING clause and
2d770 20 69 74 73 20 65 71 75 69 76 61 6c 65 6e 74 20   its equivalent 
2d780 4f 4e 0a 20 20 20 20 20 20 20 63 6f 6e 73 74 72  ON.       constr
2d790 61 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70  aint...  <li> <p
2d7a0 3e 5e 28 49 66 20 74 68 65 20 4e 41 54 55 52 41  >^(If the NATURA
2d7b0 4c 20 6b 65 79 77 6f 72 64 20 69 73 20 69 6e 20  L keyword is in 
2d7c0 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f  the join-operato
2d7d0 72 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 20 20  r then an.      
2d7e0 20 69 6d 70 6c 69 63 69 74 20 55 53 49 4e 47 20   implicit USING 
2d7f0 63 6c 61 75 73 65 20 69 73 20 61 64 64 65 64 20  clause is added 
2d800 74 6f 20 74 68 65 20 6a 6f 69 6e 2d 63 6f 6e 73  to the join-cons
2d810 74 72 61 69 6e 74 73 2e 20 54 68 65 20 69 6d 70  traints. The imp
2d820 6c 69 63 69 74 0a 20 20 20 20 20 20 20 55 53 49  licit.       USI
2d830 4e 47 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69  NG clause contai
2d840 6e 73 20 65 61 63 68 20 6f 66 20 74 68 65 20 63  ns each of the c
2d850 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74  olumn names that
2d860 20 61 70 70 65 61 72 20 69 6e 20 62 6f 74 68 0a   appear in both.
2d870 20 20 20 20 20 20 20 74 68 65 20 6c 65 66 74 20         the left 
2d880 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 69  and right-hand i
2d890 6e 70 75 74 20 64 61 74 61 73 65 74 73 2e 29 5e  nput datasets.)^
2d8a0 20 5e 49 66 20 74 68 65 20 6c 65 66 74 20 61 6e   ^If the left an
2d8b0 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 20 20 20  d right-hand.   
2d8c0 20 20 20 20 69 6e 70 75 74 20 64 61 74 61 73 65      input datase
2d8d0 74 73 20 66 65 61 74 75 72 65 20 6e 6f 20 63 6f  ts feature no co
2d8e0 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  mmon column name
2d8f0 73 2c 20 74 68 65 6e 20 74 68 65 20 4e 41 54 55  s, then the NATU
2d900 52 41 4c 20 6b 65 79 77 6f 72 64 0a 20 20 20 20  RAL keyword.    
2d910 20 20 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74     has no effect
2d920 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20   on the results 
2d930 6f 66 20 74 68 65 20 6a 6f 69 6e 2e 20 5e 41 20  of the join. ^A 
2d940 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75  USING or ON clau
2d950 73 65 20 6d 61 79 0a 20 20 20 20 20 20 20 6e 6f  se may.       no
2d960 74 20 62 65 20 61 64 64 65 64 20 74 6f 20 61 20  t be added to a 
2d970 6a 6f 69 6e 20 74 68 61 74 20 73 70 65 63 69 66  join that specif
2d980 69 65 73 20 74 68 65 20 4e 41 54 55 52 41 4c 20  ies the NATURAL 
2d990 6b 65 79 77 6f 72 64 2e 0a 0a 20 20 3c 6c 69 3e  keyword...  <li>
2d9a0 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 6a 6f 69   <p>^(If the joi
2d9b0 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73 20 61 20  n-operator is a 
2d9c0 22 4c 45 46 54 20 4a 4f 49 4e 22 20 6f 72 20 22  "LEFT JOIN" or "
2d9d0 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 22  LEFT OUTER JOIN"
2d9e0 2c 20 74 68 65 6e 0a 20 20 20 20 20 20 20 61 66  , then.       af
2d9f0 74 65 72 0a 20 20 20 20 20 20 20 74 68 65 20 4f  ter.       the O
2da00 4e 20 6f 72 20 55 53 49 4e 47 20 66 69 6c 74 65  N or USING filte
2da10 72 69 6e 67 20 63 6c 61 75 73 65 73 20 68 61 76  ring clauses hav
2da20 65 20 62 65 65 6e 20 61 70 70 6c 69 65 64 2c 20  e been applied, 
2da30 61 6e 20 65 78 74 72 61 20 72 6f 77 20 69 73 20  an extra row is 
2da40 0a 20 20 20 20 20 20 20 61 64 64 65 64 20 74 6f  .       added to
2da50 20 74 68 65 20 6f 75 74 70 75 74 20 66 6f 72 20   the output for 
2da60 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20  each row in the 
2da70 6f 72 69 67 69 6e 61 6c 20 6c 65 66 74 2d 68 61  original left-ha
2da80 6e 64 20 69 6e 70 75 74 20 0a 20 20 20 20 20 20  nd input .      
2da90 20 64 61 74 61 73 65 74 20 74 68 61 74 20 63 6f   dataset that co
2daa0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6e 6f 20  rresponds to no 
2dab0 72 6f 77 73 20 61 74 20 61 6c 6c 20 69 6e 20 74  rows at all in t
2dac0 68 65 20 63 6f 6d 70 6f 73 69 74 65 0a 20 20 20  he composite.   
2dad0 20 20 20 20 64 61 74 61 73 65 74 20 28 69 66 20      dataset (if 
2dae0 61 6e 79 29 2e 29 5e 20 5e 54 68 65 20 61 64 64  any).)^ ^The add
2daf0 65 64 20 72 6f 77 73 20 63 6f 6e 74 61 69 6e 20  ed rows contain 
2db00 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 74  NULL values in t
2db10 68 65 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 20  he columns.     
2db20 20 20 74 68 61 74 20 77 6f 75 6c 64 20 6e 6f 72    that would nor
2db30 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 76 61  mally contain va
2db40 6c 75 65 73 20 63 6f 70 69 65 64 20 66 72 6f 6d  lues copied from
2db50 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
2db60 69 6e 70 75 74 0a 20 20 20 20 20 20 20 64 61 74  input.       dat
2db70 61 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e 0a 0a 3c  aset.  .</ul>..<
2db80 70 3e 5e 28 57 68 65 6e 20 6d 6f 72 65 20 74 68  p>^(When more th
2db90 61 6e 20 74 77 6f 20 74 61 62 6c 65 73 20 61 72  an two tables ar
2dba0 65 20 6a 6f 69 6e 65 64 20 74 6f 67 65 74 68 65  e joined togethe
2dbb0 72 20 61 73 20 70 61 72 74 20 6f 66 20 61 20 46  r as part of a F
2dbc0 52 4f 4d 20 63 6c 61 75 73 65 2c 0a 74 68 65 20  ROM clause,.the 
2dbd0 6a 6f 69 6e 20 6f 70 65 72 61 74 69 6f 6e 73 20  join operations 
2dbe0 61 72 65 20 70 72 6f 63 65 73 73 65 64 20 69 6e  are processed in
2dbf0 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74   order from left
2dc00 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20 6f 74   to right. In ot
2dc10 68 65 72 20 0a 77 6f 72 64 73 2c 20 74 68 65 20  her .words, the 
2dc20 46 52 4f 4d 20 63 6c 61 75 73 65 20 28 41 20 6a  FROM clause (A j
2dc30 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f 69 6e 2d  oin-op-1 B join-
2dc40 6f 70 2d 32 20 43 29 20 69 73 20 63 6f 6d 70 75  op-2 C) is compu
2dc50 74 65 64 20 61 73 20 0a 28 28 41 20 6a 6f 69 6e  ted as .((A join
2dc60 2d 6f 70 2d 31 20 42 29 20 6a 6f 69 6e 2d 6f 70  -op-1 B) join-op
2dc70 2d 32 20 43 29 2e 29 5e 0a 0a 3c 74 63 6c 3e 68  -2 C).)^..<tcl>h
2dc80 64 5f 66 72 61 67 6d 65 6e 74 20 63 72 6f 73 73  d_fragment cross
2dc90 6a 6f 69 6e 20 7b 74 72 65 61 74 73 20 74 68 65  join {treats the
2dca0 20 43 52 4f 53 53 20 4a 4f 49 4e 20 6f 70 65 72   CROSS JOIN oper
2dcb0 61 74 6f 72 20 73 70 65 63 69 61 6c 6c 79 7d 3c  ator specially}<
2dcc0 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53 69 64 65  /tcl>.<p><b>Side
2dcd0 20 6e 6f 74 65 3a 20 53 70 65 63 69 61 6c 20 68   note: Special h
2dce0 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53  andling of CROSS
2dcf0 20 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e 54 68 65 72   JOIN.</b>.^Ther
2dd00 65 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65 6e  e is no differen
2dd10 63 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 22  ce between the "
2dd20 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f  INNER JOIN", "JO
2dd30 49 4e 22 20 61 6e 64 20 22 2c 22 20 6a 6f 69 6e  IN" and "," join
2dd40 0a 6f 70 65 72 61 74 6f 72 73 2e 20 54 68 65 79  .operators. They
2dd50 20 61 72 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20   are completely 
2dd60 69 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65 20  interchangeable 
2dd70 69 6e 20 53 51 4c 69 74 65 2e 0a 5e 28 54 68 65  in SQLite..^(The
2dd80 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22 20 6a 6f   "CROSS JOIN" jo
2dd90 69 6e 20 6f 70 65 72 61 74 6f 72 20 70 72 6f 64  in operator prod
2dda0 75 63 65 73 20 74 68 65 20 73 61 6d 65 20 72 65  uces the same re
2ddb0 73 75 6c 74 20 61 73 20 74 68 65 20 0a 22 49 4e  sult as the ."IN
2ddc0 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a 4f 49 4e  NER JOIN", "JOIN
2ddd0 22 20 61 6e 64 20 22 2c 22 20 6f 70 65 72 61 74  " and "," operat
2dde0 6f 72 73 29 5e 2c 20 62 75 74 20 69 73 20 0a 5b  ors)^, but is .[
2ddf0 43 52 4f 53 53 20 4a 4f 49 4e 7c 68 61 6e 64 6c  CROSS JOIN|handl
2de00 65 64 20 64 69 66 66 65 72 65 6e 74 6c 79 20 62  ed differently b
2de10 79 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  y the query opti
2de20 6d 69 7a 65 72 5d 0a 69 6e 20 74 68 61 74 20 69  mizer].in that i
2de30 74 20 70 72 65 76 65 6e 74 73 20 74 68 65 20 71  t prevents the q
2de40 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 66  uery optimizer f
2de50 72 6f 6d 20 72 65 6f 72 64 65 72 69 6e 67 0a 74  rom reordering.t
2de60 68 65 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  he tables in the
2de70 20 6a 6f 69 6e 2e 20 20 41 6e 20 61 70 70 6c 69   join.  An appli
2de80 63 61 74 69 6f 6e 20 70 72 6f 67 72 61 6d 6d 65  cation programme
2de90 72 20 63 61 6e 20 75 73 65 20 74 68 65 20 43 52  r can use the CR
2dea0 4f 53 53 20 4a 4f 49 4e 20 0a 6f 70 65 72 61 74  OSS JOIN .operat
2deb0 6f 72 20 74 6f 20 64 69 72 65 63 74 6c 79 20 69  or to directly i
2dec0 6e 66 6c 75 65 6e 63 65 20 74 68 65 20 61 6c 67  nfluence the alg
2ded0 6f 72 69 74 68 6d 20 74 68 61 74 20 69 73 20 63  orithm that is c
2dee0 68 6f 73 65 6e 20 74 6f 20 69 6d 70 6c 65 6d 65  hosen to impleme
2def0 6e 74 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74  nt.the SELECT st
2df00 61 74 65 6d 65 6e 74 2e 20 20 41 76 6f 69 64 20  atement.  Avoid 
2df10 75 73 69 6e 67 20 43 52 4f 53 53 20 4a 4f 49 4e  using CROSS JOIN
2df20 20 65 78 63 65 70 74 20 69 6e 20 73 70 65 63 69   except in speci
2df30 66 69 63 20 73 69 74 75 61 74 69 6f 6e 73 20 0a  fic situations .
2df40 77 68 65 72 65 20 6d 61 6e 75 61 6c 20 63 6f 6e  where manual con
2df50 74 72 6f 6c 20 6f 66 20 74 68 65 20 71 75 65 72  trol of the quer
2df60 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20 64  y optimizer is d
2df70 65 73 69 72 65 64 2e 20 20 41 76 6f 69 64 20 75  esired.  Avoid u
2df80 73 69 6e 67 0a 43 52 4f 53 53 20 4a 4f 49 4e 20  sing.CROSS JOIN 
2df90 65 61 72 6c 79 20 69 6e 20 74 68 65 20 64 65 76  early in the dev
2dfa0 65 6c 6f 70 6d 65 6e 74 20 6f 66 20 61 6e 20 61  elopment of an a
2dfb0 70 70 6c 69 63 61 74 69 6f 6e 20 61 73 20 64 6f  pplication as do
2dfc0 69 6e 67 20 73 6f 20 69 73 0a 61 20 3c 61 20 68  ing so is.a <a h
2dfd0 72 65 66 3d 22 68 74 74 70 3a 2f 2f 63 32 2e 63  ref="http://c2.c
2dfe0 6f 6d 2f 63 67 69 2f 77 69 6b 69 3f 50 72 65 6d  om/cgi/wiki?Prem
2dff0 61 74 75 72 65 4f 70 74 69 6d 69 7a 61 74 69 6f  atureOptimizatio
2e000 6e 22 3e 70 72 65 6d 61 74 75 72 65 0a 6f 70 74  n">premature.opt
2e010 69 6d 69 7a 61 74 69 6f 6e 3c 2f 61 3e 2e 20 20  imization</a>.  
2e020 54 68 65 20 73 70 65 63 69 61 6c 20 68 61 6e 64  The special hand
2e030 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53 20 4a 4f  ling of CROSS JO
2e040 49 4e 20 69 73 20 61 6e 20 53 51 4c 69 74 65 2d  IN is an SQLite-
2e050 73 70 65 63 69 66 69 63 0a 66 65 61 74 75 72 65  specific.feature
2e060 20 61 6e 64 20 69 73 20 6e 6f 74 20 61 20 70 61   and is not a pa
2e070 72 74 20 6f 66 20 73 74 61 6e 64 61 72 64 20 53  rt of standard S
2e080 51 4c 2e 0a 20 20 20 20 20 20 20 0a 0a 3c 74 63  QL..       ..<tc
2e090 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 68  l>hd_fragment wh
2e0a0 65 72 65 63 6c 61 75 73 65 3c 2f 74 63 6c 3e 0a  ereclause</tcl>.
2e0b0 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
2e0c0 20 7b 57 48 45 52 45 20 63 6c 61 75 73 65 7d 3c   {WHERE clause}<
2e0d0 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 32 2e 20 57  /tcl>.<p><b>2. W
2e0e0 48 45 52 45 20 63 6c 61 75 73 65 20 66 69 6c 74  HERE clause filt
2e0f0 65 72 69 6e 67 2e 3c 2f 62 3e 0a 0a 3c 70 3e 5e  ering.</b>..<p>^
2e100 28 49 66 20 61 20 57 48 45 52 45 20 63 6c 61 75  (If a WHERE clau
2e110 73 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  se is specified,
2e120 20 74 68 65 20 57 48 45 52 45 20 65 78 70 72 65   the WHERE expre
2e130 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
2e140 65 64 20 66 6f 72 20 0a 65 61 63 68 20 72 6f 77  ed for .each row
2e150 20 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61   in the input da
2e160 74 61 20 61 73 20 61 20 5b 62 6f 6f 6c 65 61 6e  ta as a [boolean
2e170 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e   expression]. On
2e180 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  ly rows for whic
2e190 68 20 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75  h the.WHERE clau
2e1a0 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76  se expression ev
2e1b0 61 6c 75 61 74 65 73 20 74 6f 20 74 72 75 65 20  aluates to true 
2e1c0 61 72 65 20 69 6e 63 6c 75 64 65 64 20 66 72 6f  are included fro
2e1d0 6d 20 74 68 65 20 64 61 74 61 73 65 74 20 62 65  m the dataset be
2e1e0 66 6f 72 65 0a 63 6f 6e 74 69 6e 75 69 6e 67 2e  fore.continuing.
2e1f0 29 5e 20 20 52 6f 77 73 20 61 72 65 20 65 78 63  )^  Rows are exc
2e200 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65 20 72  luded from the r
2e210 65 73 75 6c 74 20 69 66 20 74 68 65 20 57 48 45  esult if the WHE
2e220 52 45 20 63 6c 61 75 73 65 0a 65 76 61 6c 75 61  RE clause.evalua
2e230 74 65 73 20 74 6f 20 65 69 74 68 65 72 20 66 61  tes to either fa
2e240 6c 73 65 20 6f 72 20 4e 55 4c 4c 2e 0a 0a 3c 70  lse or NULL...<p
2e250 3e 46 6f 72 20 61 20 4a 4f 49 4e 20 6f 72 20 49  >For a JOIN or I
2e260 4e 4e 45 52 20 4a 4f 49 4e 20 6f 72 20 43 52 4f  NNER JOIN or CRO
2e270 53 53 20 4a 4f 49 4e 2c 20 74 68 65 72 65 20 69  SS JOIN, there i
2e280 73 20 6e 6f 20 64 69 66 66 65 72 65 6e 63 65 20  s no difference 
2e290 62 65 74 77 65 65 6e 20 0a 61 20 63 6f 6e 73 74  between .a const
2e2a0 72 61 69 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  raint expression
2e2b0 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c   in the WHERE cl
2e2c0 61 75 73 65 20 61 6e 64 20 6f 6e 65 20 69 6e 20  ause and one in 
2e2d0 74 68 65 20 4f 4e 20 63 6c 61 75 73 65 2e 20 20  the ON clause.  
2e2e0 48 6f 77 65 76 65 72 2c 0a 66 6f 72 20 61 20 4c  However,.for a L
2e2f0 45 46 54 20 4a 4f 49 4e 20 6f 72 20 4c 45 46 54  EFT JOIN or LEFT
2e300 20 4f 55 54 45 52 20 4a 4f 49 4e 2c 20 74 68 65   OUTER JOIN, the
2e310 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 76   difference is v
2e320 65 72 79 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20  ery important.  
2e330 0a 49 6e 20 61 20 4c 45 46 54 20 4a 4f 49 4e 2c  .In a LEFT JOIN,
2e340 0a 74 68 65 20 65 78 74 72 61 20 4e 55 4c 4c 20  .the extra NULL 
2e350 72 6f 77 20 66 6f 72 20 74 68 65 20 72 69 67 68  row for the righ
2e360 74 2d 68 61 6e 64 20 74 61 62 6c 65 20 69 73 20  t-hand table is 
2e370 61 64 64 65 64 20 61 66 74 65 72 20 4f 4e 20 63  added after ON c
2e380 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67  lause processing
2e390 0a 62 75 74 20 62 65 66 6f 72 65 20 57 48 45 52  .but before WHER
2e3a0 45 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73  E clause process
2e3b0 69 6e 67 2e 20 20 41 20 63 6f 6e 73 74 72 61 69  ing.  A constrai
2e3c0 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  nt of the form "
2e3d0 6c 65 66 74 2e 78 3d 72 69 67 68 74 2e 79 22 0a  left.x=right.y".
2e3e0 69 6e 20 61 6e 20 4f 4e 20 63 6c 61 75 73 65 20  in an ON clause 
2e3f0 77 69 6c 6c 20 74 68 65 72 65 66 6f 72 65 20 61  will therefore a
2e400 6c 6c 6f 77 20 74 68 72 6f 75 67 68 20 74 68 65  llow through the
2e410 20 61 64 64 65 64 20 61 6c 6c 2d 4e 55 4c 4c 20   added all-NULL 
2e420 72 6f 77 73 20 6f 66 20 74 68 65 0a 72 69 67 68  rows of the.righ
2e430 74 20 74 61 62 6c 65 2e 20 20 42 75 74 20 69 66  t table.  But if
2e440 20 74 68 61 74 20 73 61 6d 65 20 63 6f 6e 73 74   that same const
2e450 72 61 69 6e 74 20 69 73 20 69 6e 20 74 68 65 20  raint is in the 
2e460 57 48 45 52 45 20 63 6c 61 75 73 65 20 61 20 4e  WHERE clause a N
2e470 55 4c 4c 20 69 6e 0a 22 72 69 67 68 74 2e 79 22  ULL in."right.y"
2e480 20 77 69 6c 6c 20 70 72 65 76 65 6e 74 20 74 68   will prevent th
2e490 65 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c 65  e expression "le
2e4a0 66 74 2e 78 3d 72 69 67 68 74 2e 79 22 20 66 72  ft.x=right.y" fr
2e4b0 6f 6d 20 62 65 69 6e 67 20 74 72 75 65 2c 20 61  om being true, a
2e4c0 6e 64 0a 74 68 75 73 20 65 78 63 6c 75 64 65 20  nd.thus exclude 
2e4d0 74 68 61 74 20 72 6f 77 20 66 72 6f 6d 20 74 68  that row from th
2e4e0 65 20 6f 75 74 70 75 74 2e 0a 0a 3c 70 3e 3c 62  e output...<p><b
2e4f0 3e 33 2e 20 47 65 6e 65 72 61 74 69 6f 6e 20 6f  >3. Generation o
2e500 66 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73  f the set of res
2e510 75 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e 0a 3c 74  ult rows.</b>.<t
2e520 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
2e530 65 73 75 6c 74 73 65 74 3c 2f 74 63 6c 3e 0a 3c  esultset</tcl>.<
2e540 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
2e550 7b 72 65 73 75 6c 74 2d 73 65 74 20 65 78 70 72  {result-set expr
2e560 65 73 73 69 6f 6e 73 7d 20 7b 47 52 4f 55 50 20  essions} {GROUP 
2e570 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4f 6e  BY}</tcl>..<p>On
2e580 63 65 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  ce the input dat
2e590 61 20 66 72 6f 6d 20 74 68 65 20 46 52 4f 4d 20  a from the FROM 
2e5a0 63 6c 61 75 73 65 20 68 61 73 20 62 65 65 6e 20  clause has been 
2e5b0 66 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 0a  filtered by the.
2e5c0 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78 70  WHERE clause exp
2e5d0 72 65 73 73 69 6f 6e 20 28 69 66 20 61 6e 79 29  ression (if any)
2e5e0 2c 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73  , the set of res
2e5f0 75 6c 74 20 72 6f 77 73 20 66 6f 72 20 74 68 65  ult rows for the
2e600 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20   simple .SELECT 
2e610 61 72 65 20 63 61 6c 63 75 6c 61 74 65 64 2e 20  are calculated. 
2e620 45 78 61 63 74 6c 79 20 68 6f 77 20 74 68 69 73  Exactly how this
2e630 20 69 73 20 64 6f 6e 65 20 64 65 70 65 6e 64 73   is done depends
2e640 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20   on whether the 
2e650 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43 54 20 69  simple .SELECT i
2e660 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 6f  s an aggregate o
2e670 72 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  r non-aggregate 
2e680 71 75 65 72 79 2c 20 61 6e 64 20 77 68 65 74 68  query, and wheth
2e690 65 72 20 6f 72 20 6e 6f 74 20 61 20 47 52 4f 55  er or not a GROU
2e6a0 50 0a 42 59 20 63 6c 61 75 73 65 20 77 61 73 20  P.BY clause was 
2e6b0 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c 70 3e 20  specified...<p> 
2e6c0 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72  The list of expr
2e6d0 65 73 73 69 6f 6e 73 20 62 65 74 77 65 65 6e 20  essions between 
2e6e0 74 68 65 20 53 45 4c 45 43 54 20 61 6e 64 20 46  the SELECT and F
2e6f0 52 4f 4d 20 6b 65 79 77 6f 72 64 73 20 69 73 20  ROM keywords is 
2e700 6b 6e 6f 77 6e 20 61 73 0a 74 68 65 20 72 65 73  known as.the res
2e710 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  ult expression l
2e720 69 73 74 2e 20 20 5e 49 66 20 61 20 72 65 73 75  ist.  ^If a resu
2e730 6c 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  lt expression is
2e740 20 74 68 65 20 73 70 65 63 69 61 6c 20 65 78 70   the special exp
2e750 72 65 73 73 69 6f 6e 0a 22 2a 22 20 74 68 65 6e  ression."*" then
2e760 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   all columns in 
2e770 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20 61  the input data a
2e780 72 65 20 73 75 62 73 74 69 74 75 74 65 64 20 66  re substituted f
2e790 6f 72 20 74 68 61 74 20 6f 6e 65 20 65 78 70 72  or that one expr
2e7a0 65 73 73 69 6f 6e 2e 0a 5e 28 49 66 20 74 68 65  ession..^(If the
2e7b0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
2e7c0 68 65 20 61 6c 69 61 73 20 6f 66 20 61 20 74 61  he alias of a ta
2e7d0 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
2e7e0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
2e7f0 73 65 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20 22  se.followed by "
2e800 2e 2a 22 20 74 68 65 6e 20 61 6c 6c 20 63 6f 6c  .*" then all col
2e810 75 6d 6e 73 20 66 72 6f 6d 20 74 68 65 20 6e 61  umns from the na
2e820 6d 65 64 20 74 61 62 6c 65 20 6f 72 20 73 75 62  med table or sub
2e830 71 75 65 72 79 20 61 72 65 0a 73 75 62 73 74 69  query are.substi
2e840 74 75 74 65 64 20 66 6f 72 20 74 68 65 20 73 69  tuted for the si
2e850 6e 67 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 2e  ngle expression.
2e860 29 5e 20 5e 28 49 74 20 69 73 20 61 6e 20 65 72  )^ ^(It is an er
2e870 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a 22  ror to use a "*"
2e880 20 6f 72 0a 22 61 6c 69 61 73 2e 2a 22 20 65 78   or."alias.*" ex
2e890 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 6e 79 20  pression in any 
2e8a0 63 6f 6e 74 65 78 74 20 6f 74 68 65 72 20 74 68  context other th
2e8b0 61 6e 20 61 20 72 65 73 75 6c 74 20 65 78 70 72  an a result expr
2e8c0 65 73 73 69 6f 6e 20 6c 69 73 74 2e 29 5e 0a 5e  ession list.)^.^
2e8d0 28 49 74 20 69 73 20 61 6c 73 6f 20 61 6e 20 65  (It is also an e
2e8e0 72 72 6f 72 20 74 6f 20 75 73 65 20 61 20 22 2a  rror to use a "*
2e8f0 22 20 6f 72 20 22 61 6c 69 61 73 2e 2a 22 20 65  " or "alias.*" e
2e900 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 61 20 73  xpression in a s
2e910 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a 71 75 65  imple SELECT.que
2e920 72 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  ry that does not
2e930 20 68 61 76 65 20 61 20 46 52 4f 4d 20 63 6c 61   have a FROM cla
2e940 75 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68  use.)^..<p> ^(Th
2e950 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
2e960 6d 6e 73 20 69 6e 20 74 68 65 20 72 6f 77 73 20  mns in the rows 
2e970 72 65 74 75 72 6e 65 64 20 62 79 20 61 20 73 69  returned by a si
2e980 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74  mple SELECT stat
2e990 65 6d 65 6e 74 0a 69 73 20 65 71 75 61 6c 20 74  ement.is equal t
2e9a0 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
2e9b0 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74  expressions in t
2e9c0 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73  he result expres
2e9d0 73 69 6f 6e 20 6c 69 73 74 20 61 66 74 65 72 0a  sion list after.
2e9e0 73 75 62 73 74 69 74 75 74 69 6f 6e 20 6f 66 20  substitution of 
2e9f0 2a 20 61 6e 64 20 61 6c 69 61 73 2e 2a 20 65 78  * and alias.* ex
2ea00 70 72 65 73 73 69 6f 6e 73 2e 29 5e 20 45 61 63  pressions.)^ Eac
2ea10 68 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20  h result row is 
2ea20 63 61 6c 63 75 6c 61 74 65 64 20 62 79 0a 65 76  calculated by.ev
2ea30 61 6c 75 61 74 69 6e 67 20 74 68 65 20 65 78 70  aluating the exp
2ea40 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20  ressions in the 
2ea50 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2ea60 6e 20 6c 69 73 74 20 77 69 74 68 20 72 65 73 70  n list with resp
2ea70 65 63 74 20 74 6f 20 61 0a 73 69 6e 67 6c 65 20  ect to a.single 
2ea80 72 6f 77 20 6f 66 20 69 6e 70 75 74 20 64 61 74  row of input dat
2ea90 61 20 6f 72 2c 20 66 6f 72 20 61 67 67 72 65 67  a or, for aggreg
2eaa0 61 74 65 20 71 75 65 72 69 65 73 2c 20 77 69 74  ate queries, wit
2eab0 68 20 72 65 73 70 65 63 74 20 74 6f 20 61 20 67  h respect to a g
2eac0 72 6f 75 70 0a 6f 66 20 72 6f 77 73 2e 0a 0a 3c  roup.of rows...<
2ead0 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66  ul>.  <li><p>^If
2eae0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
2eaf0 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61 20 6e 6f  ement is <b>a no
2eb00 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72  n-aggregate quer
2eb10 79 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a 20 20 20  y</b>, then .   
2eb20 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
2eb30 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65   in the result e
2eb40 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 69  xpression list i
2eb50 73 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  s evaluated for 
2eb60 65 61 63 68 20 72 6f 77 20 69 6e 0a 20 20 20 20  each row in.    
2eb70 74 68 65 20 64 61 74 61 73 65 74 20 66 69 6c 74  the dataset filt
2eb80 65 72 65 64 20 62 79 20 74 68 65 20 57 48 45 52  ered by the WHER
2eb90 45 20 63 6c 61 75 73 65 2e 0a 0a 20 20 3c 6c 69  E clause...  <li
2eba0 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53 45 4c 45  ><p>^If the SELE
2ebb0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
2ebc0 3c 62 3e 61 6e 20 61 67 67 72 65 67 61 74 65 20  <b>an aggregate 
2ebd0 71 75 65 72 79 20 77 69 74 68 6f 75 74 20 61 20  query without a 
2ebe0 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62 3e  GROUP.    BY</b>
2ebf0 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65 61   clause, then ea
2ec00 63 68 20 61 67 67 72 65 67 61 74 65 20 65 78 70  ch aggregate exp
2ec10 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 72  ression in the r
2ec20 65 73 75 6c 74 2d 73 65 74 20 69 73 20 0a 20 20  esult-set is .  
2ec30 20 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65    evaluated once
2ec40 20 61 63 72 6f 73 73 20 74 68 65 20 65 6e 74 69   across the enti
2ec50 72 65 20 64 61 74 61 73 65 74 2e 20 5e 45 61 63  re dataset. ^Eac
2ec60 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  h non-aggregate 
2ec70 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 20 20 69  expression.    i
2ec80 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
2ec90 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e   is evaluated on
2eca0 63 65 20 66 6f 72 20 61 6e 20 61 72 62 69 74 72  ce for an arbitr
2ecb0 61 72 69 6c 79 20 73 65 6c 65 63 74 65 64 20 72  arily selected r
2ecc0 6f 77 20 6f 66 0a 20 20 20 20 74 68 65 20 64 61  ow of.    the da
2ecd0 74 61 73 65 74 2e 20 5e 54 68 65 20 73 61 6d 65  taset. ^The same
2ece0 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c   arbitrarily sel
2ecf0 65 63 74 65 64 20 72 6f 77 20 69 73 20 75 73 65  ected row is use
2ed00 64 20 66 6f 72 20 65 61 63 68 0a 20 20 20 20 6e  d for each.    n
2ed10 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70  on-aggregate exp
2ed20 72 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c 20 69 66  ression. ^Or, if
2ed30 20 74 68 65 20 64 61 74 61 73 65 74 20 63 6f 6e   the dataset con
2ed40 74 61 69 6e 73 20 7a 65 72 6f 20 72 6f 77 73 2c  tains zero rows,
2ed50 20 74 68 65 6e 20 0a 20 20 20 20 65 61 63 68 20   then .    each 
2ed60 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78  non-aggregate ex
2ed70 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
2ed80 75 61 74 65 64 20 61 67 61 69 6e 73 74 20 61 20  uated against a 
2ed90 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e 67 0a 20  row consisting. 
2eda0 20 20 20 65 6e 74 69 72 65 6c 79 20 6f 66 20 4e     entirely of N
2edb0 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a 20 20 20  ULL values...   
2edc0 3c 70 3e 5e 54 68 65 20 73 69 6e 67 6c 65 20 72  <p>^The single r
2edd0 6f 77 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  ow of result-set
2ede0 20 64 61 74 61 20 63 72 65 61 74 65 64 20 62 79   data created by
2edf0 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
2ee00 61 67 67 72 65 67 61 74 65 0a 20 20 20 20 61 6e  aggregate.    an
2ee10 64 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20  d non-aggregate 
2ee20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74  expressions in t
2ee30 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 66 6f  he result-set fo
2ee40 72 6d 73 20 74 68 65 20 72 65 73 75 6c 74 20 6f  rms the result o
2ee50 66 20 61 6e 0a 20 20 20 20 61 67 67 72 65 67 61  f an.    aggrega
2ee60 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74  te query without
2ee70 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75   a GROUP BY clau
2ee80 73 65 2e 20 5e 41 6e 20 61 67 67 72 65 67 61 74  se. ^An aggregat
2ee90 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74 20  e query without 
2eea0 61 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20 63  a.    GROUP BY c
2eeb0 6c 61 75 73 65 20 61 6c 77 61 79 73 20 72 65 74  lause always ret
2eec0 75 72 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65  urns exactly one
2eed0 20 72 6f 77 20 6f 66 20 64 61 74 61 2c 20 65 76   row of data, ev
2eee0 65 6e 20 69 66 20 74 68 65 72 65 20 61 72 65 0a  en if there are.
2eef0 20 20 20 20 7a 65 72 6f 20 72 6f 77 73 20 6f 66      zero rows of
2ef00 20 69 6e 70 75 74 20 64 61 74 61 2e 0a 0a 20 20   input data...  
2ef10 3c 6c 69 3e 3c 70 3e 5e 28 49 66 20 74 68 65 20  <li><p>^(If the 
2ef20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
2ef30 20 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67   is <b>an aggreg
2ef40 61 74 65 20 71 75 65 72 79 20 77 69 74 68 20 61  ate query with a
2ef50 20 47 52 4f 55 50 0a 20 20 20 20 42 59 3c 2f 62   GROUP.    BY</b
2ef60 3e 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 65  > clause, then e
2ef70 61 63 68 20 6f 66 20 74 68 65 20 65 78 70 72 65  ach of the expre
2ef80 73 73 69 6f 6e 73 20 73 70 65 63 69 66 69 65 64  ssions specified
2ef90 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 0a   as part of the.
2efa0 20 20 20 20 47 52 4f 55 50 20 42 59 20 63 6c 61      GROUP BY cla
2efb0 75 73 65 20 69 73 20 65 76 61 6c 75 61 74 65 64  use is evaluated
2efc0 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
2efd0 20 74 68 65 20 64 61 74 61 73 65 74 2e 20 45 61   the dataset. Ea
2efe0 63 68 20 72 6f 77 0a 20 20 20 20 69 73 20 74 68  ch row.    is th
2eff0 65 6e 20 61 73 73 69 67 6e 65 64 20 74 6f 20 61  en assigned to a
2f000 20 22 67 72 6f 75 70 22 20 62 61 73 65 64 20 6f   "group" based o
2f010 6e 20 74 68 65 20 72 65 73 75 6c 74 73 3b 20 72  n the results; r
2f020 6f 77 73 20 66 6f 72 20 77 68 69 63 68 0a 20 20  ows for which.  
2f030 20 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66    the results of
2f040 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20   evaluating the 
2f050 47 52 4f 55 50 20 42 59 20 65 78 70 72 65 73 73  GROUP BY express
2f060 69 6f 6e 73 20 61 72 65 20 74 68 65 20 73 61 6d  ions are the sam
2f070 65 20 67 65 74 0a 20 20 20 20 61 73 73 69 67 6e  e get.    assign
2f080 65 64 20 74 6f 20 74 68 65 20 73 61 6d 65 20 67  ed to the same g
2f090 72 6f 75 70 2e 29 5e 20 5e 46 6f 72 20 74 68 65  roup.)^ ^For the
2f0a0 20 70 75 72 70 6f 73 65 73 20 6f 66 20 67 72 6f   purposes of gro
2f0b0 75 70 69 6e 67 20 72 6f 77 73 2c 20 4e 55 4c 4c  uping rows, NULL
2f0c0 20 0a 20 20 20 20 76 61 6c 75 65 73 20 61 72 65   .    values are
2f0d0 20 63 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61   considered equa
2f0e0 6c 2e 20 5e 54 68 65 20 75 73 75 61 6c 20 72 75  l. ^The usual ru
2f0f0 6c 65 73 20 66 6f 72 20 5b 63 6f 6c 6c 61 74 69  les for [collati
2f100 6f 6e 7c 73 65 6c 65 63 74 69 6e 67 20 61 0a 20  on|selecting a. 
2f110 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71     collation seq
2f120 75 65 6e 63 65 5d 20 77 69 74 68 20 77 68 69 63  uence] with whic
2f130 68 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  h to compare tex
2f140 74 20 76 61 6c 75 65 73 20 61 70 70 6c 79 20 77  t values apply w
2f150 68 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 0a 20  hen evaluating. 
2f160 20 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69     expressions i
2f170 6e 20 61 20 47 52 4f 55 50 20 42 59 20 63 6c 61  n a GROUP BY cla
2f180 75 73 65 2e 20 20 5e 54 68 65 20 65 78 70 72 65  use.  ^The expre
2f190 73 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 47 52  ssions in the GR
2f1a0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 0a 20 20  OUP BY clause.  
2f1b0 20 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d    do <em>not</em
2f1c0 3e 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 70  > have to be exp
2f1d0 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61 70  ressions that ap
2f1e0 70 65 61 72 20 69 6e 20 74 68 65 20 72 65 73 75  pear in the resu
2f1f0 6c 74 2e 20 5e 54 68 65 0a 20 20 20 20 65 78 70  lt. ^The.    exp
2f200 72 65 73 73 69 6f 6e 73 20 69 6e 20 61 20 47 52  ressions in a GR
2f210 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 6d 61  OUP BY clause ma
2f220 79 20 6e 6f 74 20 62 65 20 61 67 67 72 65 67 61  y not be aggrega
2f230 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a  te expressions..
2f240 0a 20 20 20 20 3c 70 3e 5e 28 49 66 20 61 20 48  .    <p>^(If a H
2f250 41 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20  AVING clause is 
2f260 73 70 65 63 69 66 69 65 64 2c 20 69 74 20 69 73  specified, it is
2f270 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63 65 20   evaluated once 
2f280 66 6f 72 20 65 61 63 68 20 67 72 6f 75 70 20 0a  for each group .
2f290 20 20 20 20 6f 66 20 72 6f 77 73 20 61 73 20 61      of rows as a
2f2a0 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73   [boolean expres
2f2b0 73 69 6f 6e 5d 2e 20 49 66 20 74 68 65 20 72 65  sion]. If the re
2f2c0 73 75 6c 74 20 6f 66 20 65 76 61 6c 75 61 74 69  sult of evaluati
2f2d0 6e 67 20 74 68 65 0a 20 20 20 20 48 41 56 49 4e  ng the.    HAVIN
2f2e0 47 20 63 6c 61 75 73 65 20 69 73 20 66 61 6c 73  G clause is fals
2f2f0 65 2c 20 74 68 65 20 67 72 6f 75 70 20 69 73 20  e, the group is 
2f300 64 69 73 63 61 72 64 65 64 2e 29 5e 20 5e 49 66  discarded.)^ ^If
2f310 20 74 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   the HAVING clau
2f320 73 65 20 69 73 0a 20 20 20 20 61 6e 20 61 67 67  se is.    an agg
2f330 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2f340 6e 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74  n, it is evaluat
2f350 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20 72 6f  ed across all ro
2f360 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  ws in the group.
2f370 20 5e 49 66 0a 20 20 20 20 61 20 48 41 56 49 4e   ^If.    a HAVIN
2f380 47 20 63 6c 61 75 73 65 20 69 73 20 61 20 6e 6f  G clause is a no
2f390 6e 2d 61 67 67 72 65 67 61 74 65 20 65 78 70 72  n-aggregate expr
2f3a0 65 73 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76  ession, it is ev
2f3b0 61 6c 75 61 74 65 64 20 77 69 74 68 20 72 65 73  aluated with res
2f3c0 70 65 63 74 0a 20 20 20 20 74 6f 20 61 6e 20 61  pect.    to an a
2f3d0 72 62 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63  rbitrarily selec
2f3e0 74 65 64 20 72 6f 77 20 66 72 6f 6d 20 74 68 65  ted row from the
2f3f0 20 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 48 41   group.  ^The HA
2f400 56 49 4e 47 20 65 78 70 72 65 73 73 69 6f 6e 20  VING expression 
2f410 6d 61 79 0a 20 20 20 20 72 65 66 65 72 20 74 6f  may.    refer to
2f420 20 76 61 6c 75 65 73 2c 20 65 76 65 6e 20 61 67   values, even ag
2f430 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
2f440 73 2c 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  s, that are not 
2f450 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 3c 2f  in the result.</
2f460 70 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45 61 63 68  p>..    <p>^Each
2f470 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
2f480 68 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73  he result-set is
2f490 20 74 68 65 6e 20 65 76 61 6c 75 61 74 65 64 20   then evaluated 
2f4a0 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 20 20  once for each.  
2f4b0 20 20 67 72 6f 75 70 20 6f 66 20 72 6f 77 73 2e    group of rows.
2f4c0 20 5e 49 66 20 74 68 65 20 65 78 70 72 65 73 73   ^If the express
2f4d0 69 6f 6e 20 69 73 20 61 6e 20 61 67 67 72 65 67  ion is an aggreg
2f4e0 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20  ate expression, 
2f4f0 69 74 20 69 73 20 0a 20 20 20 20 65 76 61 6c 75  it is .    evalu
2f500 61 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c 20  ated across all 
2f510 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f 75  rows in the grou
2f520 70 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  p. ^Otherwise, i
2f530 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 61  t is evaluated a
2f540 67 61 69 6e 73 74 0a 20 20 20 20 61 20 73 69 6e  gainst.    a sin
2f550 67 6c 65 20 61 72 62 69 74 72 61 72 69 6c 79 20  gle arbitrarily 
2f560 63 68 6f 73 65 6e 20 72 6f 77 20 66 72 6f 6d 20  chosen row from 
2f570 77 69 74 68 69 6e 20 74 68 65 20 67 72 6f 75 70  within the group
2f580 2e 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d  . ^If there is m
2f590 6f 72 65 0a 20 20 20 20 74 68 61 6e 20 6f 6e 65  ore.    than one
2f5a0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
2f5b0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
2f5c0 20 72 65 73 75 6c 74 2d 73 65 74 2c 20 74 68 65   result-set, the
2f5d0 6e 20 61 6c 6c 20 73 75 63 68 0a 20 20 20 20 65  n all such.    e
2f5e0 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 65  xpressions are e
2f5f0 76 61 6c 75 61 74 65 64 20 66 6f 72 20 74 68 65  valuated for the
2f600 20 73 61 6d 65 20 72 6f 77 2e 0a 0a 20 20 20 20   same row...    
2f610 3c 70 3e 5e 45 61 63 68 20 67 72 6f 75 70 20 6f  <p>^Each group o
2f620 66 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 20  f input dataset 
2f630 72 6f 77 73 20 63 6f 6e 74 72 69 62 75 74 65 73  rows contributes
2f640 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 74 6f   a single row to
2f650 20 74 68 65 20 0a 20 20 20 20 73 65 74 20 6f 66   the .    set of
2f660 20 72 65 73 75 6c 74 20 72 6f 77 73 2e 20 5e 53   result rows. ^S
2f670 75 62 6a 65 63 74 20 74 6f 20 66 69 6c 74 65 72  ubject to filter
2f680 69 6e 67 20 61 73 73 6f 63 69 61 74 65 64 20 77  ing associated w
2f690 69 74 68 20 74 68 65 20 44 49 53 54 49 4e 43 54  ith the DISTINCT
2f6a0 0a 20 20 20 20 6b 65 79 77 6f 72 64 2c 20 74 68  .    keyword, th
2f6b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
2f6c0 20 72 65 74 75 72 6e 65 64 20 62 79 20 61 6e 20   returned by an 
2f6d0 61 67 67 72 65 67 61 74 65 20 71 75 65 72 79 20  aggregate query 
2f6e0 77 69 74 68 20 61 20 47 52 4f 55 50 0a 20 20 20  with a GROUP.   
2f6f0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 74 68   BY clause is th
2f700 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6e 75  e same as the nu
2f710 6d 62 65 72 20 6f 66 20 67 72 6f 75 70 73 20 6f  mber of groups o
2f720 66 20 72 6f 77 73 20 70 72 6f 64 75 63 65 64 20  f rows produced 
2f730 62 79 20 61 70 70 6c 79 69 6e 67 0a 20 20 20 20  by applying.    
2f740 74 68 65 20 47 52 4f 55 50 20 42 59 20 61 6e 64  the GROUP BY and
2f750 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 73 20   HAVING clauses 
2f760 74 6f 20 74 68 65 20 66 69 6c 74 65 72 65 64 20  to the filtered 
2f770 69 6e 70 75 74 20 64 61 74 61 73 65 74 2e 0a 3c  input dataset..<
2f780 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /ul>..<tcl>hd_fr
2f790 61 67 6d 65 6e 74 20 62 61 72 65 61 67 67 20 7b  agment bareagg {
2f7a0 62 61 72 65 20 61 67 67 72 65 67 61 74 65 20 74  bare aggregate t
2f7b0 65 72 6d 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c  erms}</tcl>.<p><
2f7c0 62 3e 53 69 64 65 20 6e 6f 74 65 3a 20 42 61 72  b>Side note: Bar
2f7d0 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20  e columns in an 
2f7e0 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69 65  aggregate querie
2f7f0 73 2e 3c 2f 62 3e 0a 54 68 65 20 75 73 75 61 6c  s.</b>.The usual
2f800 20 63 61 73 65 20 69 73 20 74 68 61 74 20 61 6c   case is that al
2f810 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69  l column names i
2f820 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  n an aggregate q
2f830 75 65 72 79 20 61 72 65 20 65 69 74 68 65 72 0a  uery are either.
2f840 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 5b 61 67  arguments to [ag
2f850 67 66 75 6e 63 7c 61 67 67 72 65 67 61 74 65 20  gfunc|aggregate 
2f860 66 75 6e 63 74 69 6f 6e 73 5d 20 6f 72 20 65 6c  functions] or el
2f870 73 65 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  se appear in the
2f880 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2f890 2e 0a 41 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  ..A result colum
2f8a0 6e 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73  n which contains
2f8b0 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 74   a column name t
2f8c0 68 61 74 20 69 73 20 6e 6f 74 20 77 69 74 68 69  hat is not withi
2f8d0 6e 20 61 6e 0a 61 67 67 72 65 67 61 74 65 20 66  n an.aggregate f
2f8e0 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 61 74  unction and that
2f8f0 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72   does not appear
2f900 20 69 6e 20 74 68 65 20 47 52 4f 55 50 20 42 59   in the GROUP BY
2f910 20 63 6c 61 75 73 65 20 28 69 66 0a 6f 6e 65 20   clause (if.one 
2f920 65 78 69 73 74 73 29 20 69 73 20 63 61 6c 6c 65  exists) is calle
2f930 64 20 61 20 22 62 61 72 65 22 20 63 6f 6c 75 6d  d a "bare" colum
2f940 6e 2e 0a 45 78 61 6d 70 6c 65 3a 0a 3c 62 6c 6f  n..Example:.<blo
2f950 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 53 45  ckquote><pre>.SE
2f960 4c 45 43 54 20 61 2c 20 62 2c 20 73 75 6d 28 63  LECT a, b, sum(c
2f970 29 20 46 52 4f 4d 20 74 61 62 31 20 47 52 4f 55  ) FROM tab1 GROU
2f980 50 20 42 59 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f  P BY a;.</pre></
2f990 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 70 3e 49  blockquote>.<p>I
2f9a0 6e 20 74 68 65 20 71 75 65 72 79 20 61 62 6f 76  n the query abov
2f9b0 65 2c 20 74 68 65 20 22 61 22 20 63 6f 6c 75 6d  e, the "a" colum
2f9c0 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
2f9d0 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2f9e0 0a 61 6e 64 20 73 6f 20 65 61 63 68 20 72 6f 77  .and so each row
2f9f0 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 63   of the output c
2fa00 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 66 20 74  ontains one of t
2fa10 68 65 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75  he distinct valu
2fa20 65 73 20 66 6f 72 0a 22 61 22 2e 20 20 54 68 65  es for."a".  The
2fa30 20 22 63 22 20 63 6f 6c 75 6d 6e 20 69 73 20 63   "c" column is c
2fa40 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
2fa50 74 68 65 20 5b 73 75 6d 28 29 5d 20 61 67 67 72  the [sum()] aggr
2fa60 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 0a 61  egate function.a
2fa70 6e 64 20 73 6f 20 74 68 61 74 20 6f 75 74 70 75  nd so that outpu
2fa80 74 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  t column is the 
2fa90 73 75 6d 20 6f 66 20 61 6c 6c 20 22 63 22 20 76  sum of all "c" v
2faa0 61 6c 75 65 73 20 69 6e 20 72 6f 77 73 20 74 68  alues in rows th
2fab0 61 74 0a 68 61 76 65 20 74 68 65 20 73 61 6d 65  at.have the same
2fac0 20 76 61 6c 75 65 20 66 6f 72 20 22 61 22 2e 20   value for "a". 
2fad0 20 42 75 74 20 77 68 61 74 20 69 73 20 74 68 65   But what is the
2fae0 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 62   result of the b
2faf0 61 72 65 20 0a 63 6f 6c 75 6d 6e 20 22 62 22 3f  are .column "b"?
2fb00 20 54 68 65 20 61 6e 73 77 65 72 20 69 73 20 74   The answer is t
2fb10 68 61 74 20 74 68 65 20 22 62 22 20 72 65 73 75  hat the "b" resu
2fb20 6c 74 20 77 69 6c 6c 20 62 65 20 74 68 65 0a 76  lt will be the.v
2fb30 61 6c 75 65 20 66 6f 72 20 22 62 22 20 69 6e 20  alue for "b" in 
2fb40 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
2fb50 20 72 6f 77 73 20 74 68 61 74 20 66 6f 72 6d 20   rows that form 
2fb60 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 54  the aggregate..T
2fb70 68 65 20 70 72 6f 62 6c 65 6d 20 69 73 20 74 68  he problem is th
2fb80 61 74 20 79 6f 75 20 75 73 75 61 6c 6c 79 20 64  at you usually d
2fb90 6f 20 6e 6f 74 20 6b 6e 6f 77 20 77 68 69 63 68  o not know which
2fba0 20 69 6e 70 75 74 20 72 6f 77 20 69 73 20 75 73   input row is us
2fbb0 65 64 0a 74 6f 20 63 6f 6d 70 75 74 65 20 22 62  ed.to compute "b
2fbc0 22 2c 20 61 6e 64 20 73 6f 20 69 6e 20 6d 61 6e  ", and so in man
2fbd0 79 20 63 61 73 65 73 20 74 68 65 20 76 61 6c 75  y cases the valu
2fbe0 65 20 66 6f 72 20 22 62 22 20 69 73 20 75 6e 64  e for "b" is und
2fbf0 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a 3c 70 3e  efined..</p>.<p>
2fc00 0a 53 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73  .Special process
2fc10 69 6e 67 20 6f 63 63 75 72 73 20 6f 63 63 75 72  ing occurs occur
2fc20 73 20 77 68 65 6e 20 74 68 65 20 61 67 67 72 65  s when the aggre
2fc30 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 73  gate function is
2fc40 20 0a 65 69 74 68 65 72 20 5b 6d 61 78 41 67 67   .either [maxAgg
2fc50 46 75 6e 63 7c 6d 69 6e 28 29 5d 20 6f 72 20 5b  Func|min()] or [
2fc60 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 61 78 28 29  minAggFunc|max()
2fc70 5d 2e 20 20 45 78 61 6d 70 6c 65 3a 0a 3c 62 6c  ].  Example:.<bl
2fc80 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 53  ockquote><pre>.S
2fc90 45 4c 45 43 54 20 61 2c 20 62 2c 20 6d 61 78 28  ELECT a, b, max(
2fca0 63 29 20 46 52 4f 4d 20 74 61 62 31 20 47 52 4f  c) FROM tab1 GRO
2fcb0 55 50 20 42 59 20 61 3b 0a 3c 2f 70 72 65 3e 3c  UP BY a;.</pre><
2fcc0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 57 68 65  /blockquote>.Whe
2fcd0 6e 20 74 68 65 20 5b 6d 61 78 41 67 67 46 75 6e  n the [maxAggFun
2fce0 63 7c 6d 69 6e 28 29 5d 20 6f 72 20 5b 6d 69 6e  c|min()] or [min
2fcf0 41 67 67 46 75 6e 63 7c 6d 61 78 28 29 5d 20 61  AggFunc|max()] a
2fd00 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
2fd10 6e 73 20 0a 61 72 65 20 75 73 65 64 20 69 6e 20  ns .are used in 
2fd20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
2fd30 72 79 2c 20 61 6c 6c 20 62 61 72 65 20 63 6f 6c  ry, all bare col
2fd40 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
2fd50 6c 74 20 73 65 74 20 0a 74 61 6b 65 20 76 61 6c  lt set .take val
2fd60 75 65 73 20 66 72 6f 6d 20 74 68 65 20 69 6e 70  ues from the inp
2fd70 75 74 0a 72 6f 77 20 77 68 69 63 68 20 61 6c 73  ut.row which als
2fd80 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  o contains the m
2fd90 69 6e 69 6d 75 6d 20 6f 72 20 6d 61 78 69 6d 75  inimum or maximu
2fda0 6d 2e 20 20 53 6f 20 69 6e 20 74 68 65 20 71 75  m.  So in the qu
2fdb0 65 72 79 0a 61 62 6f 76 65 2c 20 74 68 65 20 76  ery.above, the v
2fdc0 61 6c 75 65 20 6f 66 20 74 68 65 20 22 62 22 20  alue of the "b" 
2fdd0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 6f 75  column in the ou
2fde0 74 70 75 74 20 77 69 6c 6c 20 62 65 20 74 68 65  tput will be the
2fdf0 20 76 61 6c 75 65 20 6f 66 0a 74 68 65 20 22 62   value of.the "b
2fe00 22 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  " column in the 
2fe10 69 6e 70 75 74 20 72 6f 77 20 74 68 61 74 20 68  input row that h
2fe20 61 73 20 74 68 65 20 6c 61 72 67 65 73 74 20 22  as the largest "
2fe30 63 22 20 76 61 6c 75 65 2e 0a 54 68 65 72 65 20  c" value..There 
2fe40 69 73 20 73 74 69 6c 6c 20 61 6e 20 61 6d 62 69  is still an ambi
2fe50 67 75 69 74 79 20 69 66 20 74 77 6f 20 6f 72 20  guity if two or 
2fe60 6d 6f 72 65 20 6f 66 20 74 68 65 20 69 6e 70 75  more of the inpu
2fe70 74 20 72 6f 77 73 20 68 61 76 65 20 74 68 65 0a  t rows have the.
2fe80 73 61 6d 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 20  same minimum or 
2fe90 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 6f 72  maximum value or
2fea0 20 69 66 20 74 68 65 20 71 75 65 72 79 20 63 6f   if the query co
2feb0 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e  ntains more than
2fec0 20 6f 6e 65 0a 6d 69 6e 28 29 20 61 6e 64 2f 6f   one.min() and/o
2fed0 72 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  r max() aggregat
2fee0 65 20 66 75 6e 63 74 69 6f 6e 2e 20 4f 6e 6c 79  e function. Only
2fef0 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 5b 6d   the built-in [m
2ff00 69 6e 41 67 67 46 75 6e 63 7c 6d 69 6e 28 29 5d  inAggFunc|min()]
2ff10 20 0a 61 6e 64 20 5b 6d 61 78 41 67 67 46 75 6e   .and [maxAggFun
2ff20 63 7c 6d 61 78 28 29 5d 20 66 75 6e 63 74 69 6f  c|max()] functio
2ff30 6e 73 20 77 6f 72 6b 20 74 68 69 73 20 77 61 79  ns work this way
2ff40 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 3c 62 3e 34 2e  ..</p>..<p><b>4.
2ff50 20 52 65 6d 6f 76 61 6c 20 6f 66 20 64 75 70 6c   Removal of dupl
2ff60 69 63 61 74 65 20 72 6f 77 73 20 28 44 49 53 54  icate rows (DIST
2ff70 49 4e 43 54 20 70 72 6f 63 65 73 73 69 6e 67 29  INCT processing)
2ff80 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64 5f 66 72  .</b>.<tcl>hd_fr
2ff90 61 67 6d 65 6e 74 20 64 69 73 74 69 6e 63 74 3c  agment distinct<
2ffa0 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65  /tcl>.<tcl>hd_ke
2ffb0 79 77 6f 72 64 73 20 7b 44 49 53 54 49 4e 43 54  ywords {DISTINCT
2ffc0 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 4f 6e 65  }</tcl>..<p>^One
2ffd0 20 6f 66 20 74 68 65 20 41 4c 4c 20 6f 72 20 44   of the ALL or D
2ffe0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 73  ISTINCT keywords
2fff0 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20   may follow the 
30000 53 45 4c 45 43 54 20 6b 65 79 77 6f 72 64 20 69  SELECT keyword i
30010 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53 45 4c 45  n a .simple SELE
30020 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e 49  CT statement. ^I
30030 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c  f the simple SEL
30040 45 43 54 20 69 73 20 61 20 53 45 4c 45 43 54 20  ECT is a SELECT 
30050 41 4c 4c 2c 20 74 68 65 6e 20 74 68 65 0a 65 6e  ALL, then the.en
30060 74 69 72 65 20 73 65 74 20 6f 66 20 72 65 73 75  tire set of resu
30070 6c 74 20 72 6f 77 73 20 61 72 65 20 72 65 74 75  lt rows are retu
30080 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  rned by the SELE
30090 43 54 2e 20 5e 49 66 20 6e 65 69 74 68 65 72 20  CT. ^If neither 
300a0 41 4c 4c 20 6f 72 0a 44 49 53 54 49 4e 43 54 20  ALL or.DISTINCT 
300b0 61 72 65 20 70 72 65 73 65 6e 74 2c 20 74 68 65  are present, the
300c0 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
300d0 73 20 61 73 20 69 66 20 41 4c 4c 20 77 65 72 65  s as if ALL were
300e0 20 73 70 65 63 69 66 69 65 64 2e 20 0a 5e 49 66   specified. .^If
300f0 20 74 68 65 20 73 69 6d 70 6c 65 20 53 45 4c 45   the simple SELE
30100 43 54 20 69 73 20 61 20 53 45 4c 45 43 54 20 44  CT is a SELECT D
30110 49 53 54 49 4e 43 54 2c 20 74 68 65 6e 20 64 75  ISTINCT, then du
30120 70 6c 69 63 61 74 65 20 72 6f 77 73 20 61 72 65  plicate rows are
30130 20 72 65 6d 6f 76 65 64 0a 66 72 6f 6d 20 74 68   removed.from th
30140 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c 74 20  e set of result 
30150 72 6f 77 73 20 62 65 66 6f 72 65 20 69 74 20 69  rows before it i
30160 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 46 6f 72  s returned. ^For
30170 20 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66   the purposes of
30180 0a 64 65 74 65 63 74 69 6e 67 20 64 75 70 6c 69  .detecting dupli
30190 63 61 74 65 20 72 6f 77 73 2c 20 74 77 6f 20 4e  cate rows, two N
301a0 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
301b0 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
301c0 65 71 75 61 6c 2e 20 5e 54 68 65 0a 5b 68 6f 77  equal. ^The.[how
301d0 20 63 6f 6c 6c 61 74 69 6f 6e 20 69 73 20 64 65   collation is de
301e0 74 65 72 6d 69 6e 65 64 7c 75 73 75 61 6c 20 72  termined|usual r
301f0 75 6c 65 73 5d 20 61 70 70 6c 79 20 66 6f 72 20  ules] apply for 
30200 73 65 6c 65 63 74 69 6e 67 20 61 20 63 6f 6c 6c  selecting a coll
30210 61 74 69 6f 6e 0a 73 65 71 75 65 6e 63 65 20 74  ation.sequence t
30220 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 76  o compare text v
30230 61 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e 0a 68 64  alues...<tcl>.hd
30240 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d 70 6f 75  _fragment compou
30250 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  nd {compound sel
30260 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20 71  ect} {compound q
30270 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75 6e 64 20  uery} {compound 
30280 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70 6f 75 6e  SELECT} {compoun
30290 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f 74 63 6c  d SELECTs}.</tcl
302a0 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e 64 20 53  >.<h3>Compound S
302b0 65 6c 65 63 74 20 53 74 61 74 65 6d 65 6e 74 73  elect Statements
302c0 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f 20 6f 72  </h3>..<p>Two or
302d0 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65 20 53 45   more [simple SE
302e0 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 73  LECT] statements
302f0 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65 63 74 65   may be connecte
30300 64 20 74 6f 67 65 74 68 65 72 20 74 6f 20 66 6f  d together to fo
30310 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45  rm.a compound SE
30320 4c 45 43 54 20 75 73 69 6e 67 20 74 68 65 20 55  LECT using the U
30330 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41 4c 4c 2c  NION, UNION ALL,
30340 20 49 4e 54 45 52 53 45 43 54 20 6f 72 20 45 58   INTERSECT or EX
30350 43 45 50 54 20 6f 70 65 72 61 74 6f 72 2c 0a 61  CEPT operator,.a
30360 73 20 73 68 6f 77 6e 20 62 79 20 74 68 65 20 66  s shown by the f
30370 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67 72 61 6d  ollowing diagram
30380 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69  :..<tcl>.Recursi
30390 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20  veBubbleDiagram 
303a0 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63 74 2d  compound-select-
303b0 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
303c0 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 53  ^In a compound S
303d0 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68 65 20 63  ELECT, all the c
303e0 6f 6e 73 74 69 74 75 65 6e 74 20 53 45 4c 45 43  onstituent SELEC
303f0 54 73 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74  Ts must return t
30400 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62 65 72 20  he same .number 
30410 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  of result column
30420 73 2e 20 5e 41 73 20 74 68 65 20 63 6f 6d 70 6f  s. ^As the compo
30430 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f 6d 70 6f  nents of a compo
30440 75 6e 64 20 53 45 4c 45 43 54 20 6d 75 73 74 0a  und SELECT must.
30450 62 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  be simple SELECT
30460 20 73 74 61 74 65 6d 65 6e 74 73 2c 20 74 68 65   statements, the
30470 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74 61 69  y may not contai
30480 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20 6f 72 20  n [ORDER BY] or 
30490 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73 2e  [LIMIT] clauses.
304a0 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e 64  .^[ORDER BY] and
304b0 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73 65 73   [LIMIT] clauses
304c0 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63 75 72 20   may only occur 
304d0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
304e0 65 20 65 6e 74 69 72 65 20 63 6f 6d 70 6f 75 6e  e entire compoun
304f0 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64 20 74 68  d.SELECT, and th
30500 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66  en only if the f
30510 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20 6f 66 20  inal element of 
30520 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 69 73 20  the compound is 
30530 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53 5d 20 63  not a [VALUES] c
30540 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41 20 63 6f  lause...<p>^A co
30550 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 63 72  mpound SELECT cr
30560 65 61 74 65 64 20 75 73 69 6e 67 20 55 4e 49 4f  eated using UNIO
30570 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f 72 20 72  N ALL operator r
30580 65 74 75 72 6e 73 20 61 6c 6c 20 74 68 65 20 72  eturns all the r
30590 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20 53 45 4c  ows.from the SEL
305a0 45 43 54 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ECT to the left 
305b0 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20 41 4c 4c  of the UNION ALL
305c0 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e 64 20 61   operator, and a
305d0 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66 72 6f 6d  ll the rows.from
305e0 20 74 68 65 20 53 45 4c 45 43 54 20 74 6f 20 74   the SELECT to t
305f0 68 65 20 72 69 67 68 74 20 6f 66 20 69 74 2e 20  he right of it. 
30600 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72 61  ^The UNION opera
30610 74 6f 72 20 77 6f 72 6b 73 20 74 68 65 20 73 61  tor works the sa
30620 6d 65 20 77 61 79 20 61 73 0a 55 4e 49 4f 4e 20  me way as.UNION 
30630 41 4c 4c 2c 20 65 78 63 65 70 74 20 74 68 61 74  ALL, except that
30640 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
30650 61 72 65 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d  are removed from
30660 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 75 6c   the final resul
30670 74 20 73 65 74 2e 0a 5e 54 68 65 20 49 4e 54 45  t set..^The INTE
30680 52 53 45 43 54 20 6f 70 65 72 61 74 6f 72 20 72  RSECT operator r
30690 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65 72  eturns the inter
306a0 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  section of the r
306b0 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 6c 65  esults of the le
306c0 66 74 20 61 6e 64 0a 72 69 67 68 74 20 53 45 4c  ft and.right SEL
306d0 45 43 54 73 2e 20 20 5e 54 68 65 20 45 58 43 45  ECTs.  ^The EXCE
306e0 50 54 20 6f 70 65 72 61 74 6f 72 20 72 65 74 75  PT operator retu
306f0 72 6e 73 20 74 68 65 20 73 75 62 73 65 74 20 6f  rns the subset o
30700 66 20 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20  f rows returned 
30710 62 79 20 74 68 65 0a 6c 65 66 74 20 53 45 4c 45  by the.left SELE
30720 43 54 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  CT that are not 
30730 61 6c 73 6f 20 72 65 74 75 72 6e 65 64 20 62 79  also returned by
30740 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
30750 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c 69 63 61  SELECT. ^Duplica
30760 74 65 0a 72 6f 77 73 20 61 72 65 20 72 65 6d 6f  te.rows are remo
30770 76 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 73  ved from the res
30780 75 6c 74 73 20 6f 66 20 49 4e 54 45 52 53 45 43  ults of INTERSEC
30790 54 20 61 6e 64 20 45 58 43 45 50 54 20 6f 70 65  T and EXCEPT ope
307a0 72 61 74 6f 72 73 20 62 65 66 6f 72 65 20 74 68  rators before th
307b0 65 0a 72 65 73 75 6c 74 20 73 65 74 20 69 73 20  e.result set is 
307c0 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70 3e 5e 46  returned...<p>^F
307d0 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
307e0 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 64  of determining d
307f0 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 66 6f  uplicate rows fo
30800 72 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  r the results of
30810 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c 45 43 54   compound.SELECT
30820 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e 55 4c 4c   operators, NULL
30830 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e 73   values are cons
30840 69 64 65 72 65 64 20 65 71 75 61 6c 20 74 6f 20  idered equal to 
30850 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61 6c 75 65  other NULL value
30860 73 20 61 6e 64 0a 64 69 73 74 69 6e 63 74 20 66  s and.distinct f
30870 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c  rom all non-NULL
30880 20 76 61 6c 75 65 73 2e 20 5e 54 68 65 20 63 6f   values. ^The co
30890 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
308a0 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
308b0 20 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65   .two text value
308c0 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
308d0 61 73 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  as if the column
308e0 73 20 6f 66 20 74 68 65 20 6c 65 66 74 20 61 6e  s of the left an
308f0 64 20 72 69 67 68 74 2d 68 61 6e 64 0a 53 45 4c  d right-hand.SEL
30900 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77  ECT statements w
30910 65 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  ere the left and
30920 20 72 69 67 68 74 2d 68 61 6e 64 20 6f 70 65 72   right-hand oper
30930 61 6e 64 73 20 6f 66 20 74 68 65 20 65 71 75 61  ands of the equa
30940 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74 6f 72 2c  ls (=).operator,
30950 20 65 78 63 65 70 74 20 74 68 61 74 20 67 72 65   except that gre
30960 61 74 65 72 20 70 72 65 63 65 64 65 6e 63 65 20  ater precedence 
30970 69 73 20 6e 6f 74 20 61 73 73 69 67 6e 65 64 20  is not assigned 
30980 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 0a  to a collation .
30990 73 65 71 75 65 6e 63 65 20 73 70 65 63 69 66 69  sequence specifi
309a0 65 64 20 77 69 74 68 20 74 68 65 20 70 6f 73 74  ed with the post
309b0 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f 70 65 72  fix COLLATE oper
309c0 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66 69 6e 69  ator. ^No affini
309d0 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  ty.transformatio
309e0 6e 73 20 61 72 65 20 61 70 70 6c 69 65 64 20 74  ns are applied t
309f0 6f 20 61 6e 79 20 76 61 6c 75 65 73 20 77 68 65  o any values whe
30a00 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72 6f 77 73  n comparing rows
30a10 20 61 73 20 70 61 72 74 20 6f 66 20 61 0a 63 6f   as part of a.co
30a20 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2e 20 0a  mpound SELECT. .
30a30 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68 72 65 65  .<p>^(When three
30a40 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70 6c 65 20   or more simple 
30a50 53 45 4c 45 43 54 73 20 61 72 65 20 63 6f 6e 6e  SELECTs are conn
30a60 65 63 74 65 64 20 69 6e 74 6f 20 61 20 63 6f 6d  ected into a com
30a70 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 0a 74 68  pound SELECT,.th
30a80 65 79 20 67 72 6f 75 70 20 66 72 6f 6d 20 6c 65  ey group from le
30a90 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e 20  ft to right. In 
30aa0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
30ab0 22 41 22 2c 20 22 42 22 20 61 6e 64 20 22 43 22  "A", "B" and "C"
30ac0 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70 6c 65 20   are all.simple 
30ad0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
30ae0 73 2c 20 28 41 20 6f 70 20 42 20 6f 70 20 43 29  s, (A op B op C)
30af0 20 69 73 20 70 72 6f 63 65 73 73 65 64 20 61 73   is processed as
30b00 20 28 28 41 20 6f 70 20 42 29 20 6f 70 20 43 29   ((A op B) op C)
30b10 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  .)^..</p>..<tcl>
30b20 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f 72 64 65  hd_fragment orde
30b30 72 62 79 20 7b 6f 72 64 65 72 20 62 79 7d 20 7b  rby {order by} {
30b40 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63 6c 3e 0a  ORDER BY}</tcl>.
30b50 3c 68 33 3e 54 68 65 20 4f 52 44 45 52 20 42 59  <h3>The ORDER BY
30b60 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70   clause</h3>..<p
30b70 3e 49 66 20 61 20 53 45 4c 45 43 54 20 73 74 61  >If a SELECT sta
30b80 74 65 6d 65 6e 74 20 74 68 61 74 20 72 65 74 75  tement that retu
30b90 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  rns more than on
30ba0 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68  e row does not h
30bb0 61 76 65 20 61 6e 0a 4f 52 44 45 52 20 42 59 20  ave an.ORDER BY 
30bc0 63 6c 61 75 73 65 2c 20 74 68 65 20 6f 72 64 65  clause, the orde
30bd0 72 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 72  r in which the r
30be0 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
30bf0 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 4f   is undefined..O
30c00 72 2c 20 69 66 20 61 20 53 45 4c 45 43 54 20 73  r, if a SELECT s
30c10 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20 68 61  tatement does ha
30c20 76 65 20 61 6e 20 4f 52 44 45 52 20 42 59 20 63  ve an ORDER BY c
30c30 6c 61 75 73 65 2c 20 74 68 65 6e 20 74 68 65 20  lause, then the 
30c40 6c 69 73 74 20 6f 66 0a 65 78 70 72 65 73 73 69  list of.expressi
30c50 6f 6e 73 20 61 74 74 61 63 68 65 64 20 74 6f 20  ons attached to 
30c60 74 68 65 20 4f 52 44 45 52 20 42 59 20 64 65 74  the ORDER BY det
30c70 65 72 6d 69 6e 65 20 74 68 65 20 6f 72 64 65 72  ermine the order
30c80 20 69 6e 20 77 68 69 63 68 20 72 6f 77 73 0a 61   in which rows.a
30c90 72 65 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  re returned to t
30ca0 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e 0a 5e 49  he user...<p>.^I
30cb0 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
30cc0 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
30cd0 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74 20 6f   only the last o
30ce0 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b 73 69  r right-most [si
30cf0 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a 6d 61 79  mple SELECT].may
30d00 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42   have an ORDER B
30d10 59 20 63 6c 61 75 73 65 2e 20 5e 54 68 61 74 20  Y clause. ^That 
30d20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
30d30 77 69 6c 6c 20 61 70 70 6c 79 20 61 63 72 6f 73  will apply acros
30d40 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74 73 20 6f  s all elements o
30d50 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 20  f.the compound. 
30d60 5e 49 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f  ^If the right-mo
30d70 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
30d80 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
30d90 5d 20 69 73 20 61 20 5b 56 41 4c 55 45 53 5d 20  ] is a [VALUES] 
30da0 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 6e 6f 20  clause,.then no 
30db0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
30dc0 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 74 68  is allowed on th
30dd0 61 74 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 0a  at statement....
30de0 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20 66 69 72  <p>^Rows are fir
30df0 73 74 20 73 6f 72 74 65 64 20 62 61 73 65 64 20  st sorted based 
30e00 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  on the results o
30e10 66 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  f.evaluating the
30e20 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78 70 72 65   left-most expre
30e30 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 4f 52 44  ssion in the ORD
30e40 45 52 20 42 59 20 6c 69 73 74 2c 20 74 68 65 6e  ER BY list, then
30e50 20 74 69 65 73 20 61 72 65 20 62 72 6f 6b 65 6e   ties are broken
30e60 0a 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74  .by evaluating t
30e70 68 65 20 73 65 63 6f 6e 64 20 6c 65 66 74 2d 6d  he second left-m
30e80 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20 61  ost expression a
30e90 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65 20 6f 72  nd so on. The or
30ea0 64 65 72 20 69 6e 20 77 68 69 63 68 0a 74 77 6f  der in which.two
30eb0 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20   rows for which 
30ec0 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78 70  all ORDER BY exp
30ed0 72 65 73 73 69 6f 6e 73 20 65 76 61 6c 75 61 74  ressions evaluat
30ee0 65 20 74 6f 20 65 71 75 61 6c 20 76 61 6c 75 65  e to equal value
30ef0 73 20 61 72 65 0a 72 65 74 75 72 6e 65 64 20 69  s are.returned i
30f00 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 5e 45 61  s undefined. ^Ea
30f10 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ch ORDER BY expr
30f20 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 70  ession may be op
30f30 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c 6f 77 65  tionally followe
30f40 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  d.by one of the 
30f50 6b 65 79 77 6f 72 64 73 20 41 53 43 20 28 73 6d  keywords ASC (sm
30f60 61 6c 6c 65 72 20 76 61 6c 75 65 73 20 61 72 65  aller values are
30f70 20 72 65 74 75 72 6e 65 64 20 66 69 72 73 74 29   returned first)
30f80 20 6f 72 20 44 45 53 43 20 28 6c 61 72 67 65 72   or DESC (larger
30f90 0a 76 61 6c 75 65 73 20 61 72 65 20 72 65 74 75  .values are retu
30fa0 72 6e 65 64 20 66 69 72 73 74 29 2e 20 5e 49 66  rned first). ^If
30fb0 20 6e 65 69 74 68 65 72 20 41 53 43 20 6f 72 20   neither ASC or 
30fc0 44 45 53 43 20 61 72 65 20 73 70 65 63 69 66 69  DESC are specifi
30fd0 65 64 2c 20 72 6f 77 73 0a 61 72 65 20 73 6f 72  ed, rows.are sor
30fe0 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ted in ascending
30ff0 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73   (smaller values
31000 20 66 69 72 73 74 29 20 6f 72 64 65 72 20 62 79   first) order by
31010 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70 3e 45 61   default...<p>Ea
31020 63 68 20 4f 52 44 45 52 20 42 59 20 65 78 70 72  ch ORDER BY expr
31030 65 73 73 69 6f 6e 20 69 73 20 70 72 6f 63 65 73  ession is proces
31040 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  sed as follows:<
31050 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70  /p>..<ol>.<li><p
31060 3e 5e 49 66 20 74 68 65 20 4f 52 44 45 52 20 42  >^If the ORDER B
31070 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
31080 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e 74 65 67  a constant integ
31090 65 72 20 4b 20 74 68 65 6e 20 74 68 65 0a 65 78  er K then the.ex
310a0 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73  pression is cons
310b0 69 64 65 72 65 64 20 61 6e 20 61 6c 69 61 73 20  idered an alias 
310c0 66 6f 72 20 74 68 65 20 4b 2d 74 68 20 63 6f 6c  for the K-th col
310d0 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
310e0 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e 73 20 61  t set.(columns a
310f0 72 65 20 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d  re numbered from
31100 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 73   left to right s
31110 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 29 2e  tarting with 1).
31120 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65  ..<li><p>^If the
31130 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65 73   ORDER BY expres
31140 73 69 6f 6e 20 69 73 20 61 6e 20 69 64 65 6e 74  sion is an ident
31150 69 66 69 65 72 20 74 68 61 74 20 63 6f 72 72 65  ifier that corre
31160 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65 20 61 6c  sponds to.the al
31170 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68  ias of one of th
31180 65 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73  e output columns
31190 2c 20 74 68 65 6e 20 74 68 65 20 65 78 70 72 65  , then the expre
311a0 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73 69 64 65  ssion is conside
311b0 72 65 64 0a 61 6e 20 61 6c 69 61 73 20 66 6f 72  red.an alias for
311c0 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 0a 0a 3c   that column...<
311d0 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
311e0 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
311f0 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
31200 61 6e 79 20 6f 74 68 65 72 20 65 78 70 72 65 73  any other expres
31210 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20 65 76 61  sion, it .is eva
31220 6c 75 61 74 65 64 20 61 6e 64 20 74 68 65 20 72  luated and the r
31230 65 74 75 72 6e 65 64 20 76 61 6c 75 65 20 75 73  eturned value us
31240 65 64 20 74 6f 20 6f 72 64 65 72 20 74 68 65 20  ed to order the 
31250 6f 75 74 70 75 74 20 72 6f 77 73 2e 20 5e 49 66  output rows. ^If
31260 0a 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74  .the SELECT stat
31270 65 6d 65 6e 74 20 69 73 20 61 20 73 69 6d 70 6c  ement is a simpl
31280 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 61  e SELECT, then a
31290 6e 20 4f 52 44 45 52 20 42 59 20 6d 61 79 20 63  n ORDER BY may c
312a0 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72 62 69 74  ontain any.arbit
312b0 72 61 72 79 20 65 78 70 72 65 73 73 69 6f 6e 73  rary expressions
312c0 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69 66 20 74  . ^However, if t
312d0 68 65 20 53 45 4c 45 43 54 20 69 73 20 61 20 63  he SELECT is a c
312e0 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c 20  ompound SELECT, 
312f0 74 68 65 6e 0a 4f 52 44 45 52 20 42 59 20 65 78  then.ORDER BY ex
31300 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74 20 61  pressions that a
31310 72 65 20 6e 6f 74 20 61 6c 69 61 73 65 73 20 74  re not aliases t
31320 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75 6d 6e 73  o output columns
31330 20 6d 75 73 74 20 62 65 20 65 78 61 63 74 6c 79   must be exactly
31340 0a 74 68 65 20 73 61 6d 65 20 61 73 20 61 6e 20  .the same as an 
31350 65 78 70 72 65 73 73 69 6f 6e 20 75 73 65 64 20  expression used 
31360 61 73 20 61 6e 20 6f 75 74 70 75 74 20 63 6f 6c  as an output col
31370 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e  umn..</ol>..<p>^
31380 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
31390 20 6f 66 20 73 6f 72 74 69 6e 67 20 72 6f 77 73   of sorting rows
313a0 2c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  , values are com
313b0 70 61 72 65 64 20 69 6e 20 74 68 65 20 73 61 6d  pared in the sam
313c0 65 20 77 61 79 0a 61 73 20 66 6f 72 20 5b 63 6f  e way.as for [co
313d0 6d 70 61 72 69 73 6f 6e 20 65 78 70 72 65 73 73  mparison express
313e0 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f 6c 6c 61  ions]. The colla
313f0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 75 73  tion sequence us
31400 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 0a 74 77  ed to compare.tw
31410 6f 20 74 65 78 74 20 76 61 6c 75 65 73 20 69 73  o text values is
31420 20 64 65 74 65 72 6d 69 6e 65 64 20 61 73 20 66   determined as f
31430 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e 0a 20 20  ollows:..<ol>.  
31440 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f  <li><p>^If the O
31450 52 44 45 52 20 42 59 20 65 78 70 72 65 73 73 69  RDER BY expressi
31460 6f 6e 20 69 73 20 61 73 73 69 67 6e 65 64 20 61  on is assigned a
31470 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
31480 6e 63 65 20 75 73 69 6e 67 0a 20 20 74 68 65 20  nce using.  the 
31490 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c 41 54 45  postfix [COLLATE
314a0 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74 68 65 6e   operator], then
314b0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
314c0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
314d0 65 20 69 73 0a 20 20 75 73 65 64 2e 0a 20 20 3c  e is.  used..  <
314e0 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65  li><p>^Otherwise
314f0 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20 42  , if the ORDER B
31500 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  Y expression is 
31510 61 6e 20 61 6c 69 61 73 20 74 6f 20 61 6e 20 65  an alias to an e
31520 78 70 72 65 73 73 69 6f 6e 0a 20 20 74 68 61 74  xpression.  that
31530 20 68 61 73 20 62 65 65 6e 20 61 73 73 69 67 6e   has been assign
31540 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  ed a collation s
31550 65 71 75 65 6e 63 65 20 75 73 69 6e 67 20 74 68  equence using th
31560 65 20 70 6f 73 74 66 69 78 20 0a 20 20 5b 43 4f  e postfix .  [CO
31570 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c  LLATE operator],
31580 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74   then the collat
31590 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 61 73 73  ion sequence ass
315a0 69 67 6e 65 64 20 74 6f 20 74 68 65 20 61 6c 69  igned to the ali
315b0 61 73 65 64 0a 20 20 65 78 70 72 65 73 73 69 6f  ased.  expressio
315c0 6e 20 69 73 20 75 73 65 64 2e 0a 20 20 3c 6c 69  n is used..  <li
315d0 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20  ><p>^Otherwise, 
315e0 69 66 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  if the ORDER BY 
315f0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
31600 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20 61 6c 69  column or an ali
31610 61 73 20 6f 66 0a 20 20 61 6e 20 65 78 70 72 65  as of.  an expre
31620 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 61 20  ssion that is a 
31630 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65  column, then the
31640 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
31650 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 0a  on sequence for.
31660 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20    the column is 
31670 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e 3c 70 3e  used. .  <li><p>
31680 5e 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20  ^Otherwise, the 
31690 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c 61 74 69  [BINARY] collati
316a0 6f 6e 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  on sequence is u
316b0 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49  sed..</ol>..<p>I
316c0 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  n a [compound SE
316d0 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74 2c  LECT] statement,
316e0 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20 65 78   all ORDER BY ex
316f0 70 72 65 73 73 69 6f 6e 73 20 61 72 65 20 68 61  pressions are ha
31700 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61 73 65 73  ndled.as aliases
31710 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74 68 65 20   for one of the 
31720 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f  result columns o
31730 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 0a  f the compound..
31740 5e 28 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59  ^(If an ORDER BY
31750 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 6e   expression is n
31760 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6c  ot an integer al
31770 69 61 73 2c 20 74 68 65 6e 20 53 51 4c 69 74 65  ias, then SQLite
31780 20 73 65 61 72 63 68 65 73 0a 74 68 65 20 6c 65   searches.the le
31790 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 69  ft-most SELECT i
317a0 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 66  n the compound f
317b0 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
317c0 6d 6e 20 74 68 61 74 20 6d 61 74 63 68 65 73 20  mn that matches 
317d0 65 69 74 68 65 72 0a 74 68 65 20 73 65 63 6f 6e  either.the secon
317e0 64 20 6f 72 20 74 68 69 72 64 20 72 75 6c 65 73  d or third rules
317f0 20 61 62 6f 76 65 2e 20 49 66 20 61 20 6d 61 74   above. If a mat
31800 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
31810 20 73 65 61 72 63 68 20 73 74 6f 70 73 20 61 6e   search stops an
31820 64 0a 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d.the expression
31830 20 69 73 20 68 61 6e 64 6c 65 64 20 61 73 20 61   is handled as a
31840 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
31850 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 74 68  result column th
31860 61 74 20 69 74 20 68 61 73 20 62 65 65 6e 0a 6d  at it has been.m
31870 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 2e 20  atched against. 
31880 4f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 6e  Otherwise, the n
31890 65 78 74 20 53 45 4c 45 43 54 20 74 6f 20 74 68  ext SELECT to th
318a0 65 20 72 69 67 68 74 20 69 73 20 74 72 69 65 64  e right is tried
318b0 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29 5e 0a 5e  , and so on.)^.^
318c0 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 65  If no matching e
318d0 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65  xpression can be
318e0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 72 65   found in the re
318f0 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  sult columns of 
31900 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65 6e 74 20  any.constituent 
31910 53 45 4c 45 43 54 2c 20 69 74 20 69 73 20 61 6e  SELECT, it is an
31920 20 65 72 72 6f 72 2e 20 5e 45 61 63 68 20 74 65   error. ^Each te
31930 72 6d 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20  rm of the ORDER 
31940 42 59 20 63 6c 61 75 73 65 20 69 73 0a 70 72 6f  BY clause is.pro
31950 63 65 73 73 65 64 20 73 65 70 61 72 61 74 65 6c  cessed separatel
31960 79 20 61 6e 64 20 6d 61 79 20 62 65 20 6d 61 74  y and may be mat
31970 63 68 65 64 20 61 67 61 69 6e 73 74 20 72 65 73  ched against res
31980 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d  ult columns from
31990 20 64 69 66 66 65 72 65 6e 74 0a 53 45 4c 45 43   different.SELEC
319a0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  T statements in 
319b0 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e 3c 2f 70  the compound.</p
319c0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
319d0 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73 65 74 20  ent limitoffset 
319e0 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53 45 54 7d  {LIMIT} {OFFSET}
319f0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 4c  </tcl>.<h3>The L
31a00 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f 68 33 3e  IMIT clause</h3>
31a10 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  ..<p>^The LIMIT 
31a20 63 6c 61 75 73 65 20 69 73 20 75 73 65 64 20 74  clause is used t
31a30 6f 20 70 6c 61 63 65 20 61 6e 20 75 70 70 65 72  o place an upper
31a40 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20 6e 75   bound on the nu
31a50 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a 72 65 74  mber of rows.ret
31a60 75 72 6e 65 64 20 62 79 20 74 68 65 20 65 6e 74  urned by the ent
31a70 69 72 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  ire SELECT state
31a80 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  ment...<p>^In a 
31a90 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  [compound SELECT
31aa0 5d 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c 61 73 74  ], only the.last
31ab0 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b   or right-most [
31ac0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 20 6d  simple SELECT] m
31ad0 61 79 20 63 6f 6e 74 61 69 6e 20 61 20 4c 49 4d  ay contain a LIM
31ae0 49 54 20 63 6c 61 75 73 65 2e 20 20 0a 5e 49 6e  IT clause.  .^In
31af0 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
31b00 45 43 54 5d 2c 20 0a 74 68 65 20 4c 49 4d 49 54  ECT], .the LIMIT
31b10 20 63 6c 61 75 73 65 20 61 70 70 6c 69 65 73 20   clause applies 
31b20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f  to the entire co
31b30 6d 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a 75 73 74  mpound, not just
31b40 20 74 68 65 20 66 69 6e 61 6c 20 53 45 4c 45 43   the final SELEC
31b50 54 2e 0a 5e 49 66 20 74 68 65 20 72 69 67 68 74  T..^If the right
31b60 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65 20 53 45  -most [simple SE
31b70 4c 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55  LECT] is a [VALU
31b80 45 53 20 63 6c 61 75 73 65 5d 20 74 68 65 6e 20  ES clause] then 
31b90 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 0a  no LIMIT clause.
31ba0 69 73 20 61 6c 6c 6f 77 65 64 2e 0a 0a 3c 70 3e  is allowed...<p>
31bb0 5e 41 6e 79 20 73 63 61 6c 61 72 20 65 78 70 72  ^Any scalar expr
31bc0 65 73 73 69 6f 6e 20 6d 61 79 20 62 65 20 75 73  ession may be us
31bd0 65 64 20 69 6e 20 74 68 65 20 0a 4c 49 4d 49 54  ed in the .LIMIT
31be0 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c 6f 6e 67   clause, so long
31bf0 20 61 73 20 69 74 20 65 76 61 6c 75 61 74 65 73   as it evaluates
31c00 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 6f   to an integer o
31c10 72 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 63  r a value that c
31c20 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73 73 6c 79  an be.losslessly
31c30 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
31c40 20 69 6e 74 65 67 65 72 2e 20 5e 49 66 20 74 68   integer. ^If th
31c50 65 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  e expression eva
31c60 6c 75 61 74 65 73 20 74 6f 20 61 20 4e 55 4c 4c  luates to a NULL
31c70 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e 79 20 6f   .value or any o
31c80 74 68 65 72 20 76 61 6c 75 65 20 74 68 61 74 20  ther value that 
31c90 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65  cannot be lossle
31ca0 73 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74  ssly converted t
31cb0 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 61 6e  o an integer, an
31cc0 0a 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e  .error is return
31cd0 65 64 2e 20 5e 49 66 20 74 68 65 20 4c 49 4d 49  ed. ^If the LIMI
31ce0 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65 76 61  T expression eva
31cf0 6c 75 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61  luates to a nega
31d00 74 69 76 65 20 76 61 6c 75 65 2c 0a 74 68 65 6e  tive value,.then
31d10 20 74 68 65 72 65 20 69 73 20 6e 6f 20 75 70 70   there is no upp
31d20 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65 20  er bound on the 
31d30 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 72  number of rows r
31d40 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68 65 72 77  eturned. ^Otherw
31d50 69 73 65 2c 20 74 68 65 0a 53 45 4c 45 43 54 20  ise, the.SELECT 
31d60 72 65 74 75 72 6e 73 20 74 68 65 20 66 69 72 73  returns the firs
31d70 74 20 4e 20 72 6f 77 73 20 6f 66 20 69 74 73 20  t N rows of its 
31d80 72 65 73 75 6c 74 20 73 65 74 20 6f 6e 6c 79 2c  result set only,
31d90 20 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20   where N is the 
31da0 76 61 6c 75 65 0a 74 68 61 74 20 74 68 65 20 4c  value.that the L
31db0 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20  IMIT expression 
31dc0 65 76 61 6c 75 61 74 65 73 20 74 6f 2e 20 5e 4f  evaluates to. ^O
31dd0 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43 54  r, if the SELECT
31de0 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
31df0 0a 72 65 74 75 72 6e 20 6c 65 73 73 20 74 68 61  .return less tha
31e00 6e 20 4e 20 72 6f 77 73 20 77 69 74 68 6f 75 74  n N rows without
31e10 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c   a LIMIT clause,
31e20 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65   then the entire
31e30 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 0a 72   result set is.r
31e40 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70 3e 5e 54  eturned. ..<p>^T
31e50 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 74  he expression at
31e60 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 6f 70  tached to the op
31e70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54 20 63 6c  tional OFFSET cl
31e80 61 75 73 65 20 74 68 61 74 20 6d 61 79 20 66 6f  ause that may fo
31e90 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20 63 6c 61  llow a.LIMIT cla
31ea0 75 73 65 20 6d 75 73 74 20 61 6c 73 6f 20 65 76  use must also ev
31eb0 61 6c 75 61 74 65 20 74 6f 20 61 6e 20 69 6e 74  aluate to an int
31ec0 65 67 65 72 2c 20 6f 72 20 61 20 76 61 6c 75 65  eger, or a value
31ed0 20 74 68 61 74 20 63 61 6e 20 62 65 0a 6c 6f 73   that can be.los
31ee0 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
31ef0 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2e  d to an integer.
31f00 20 5e 49 66 20 61 6e 20 65 78 70 72 65 73 73 69   ^If an expressi
31f10 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46 53 45 54  on has an OFFSET
31f20 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 74 68   clause,.then th
31f30 65 20 66 69 72 73 74 20 4d 20 72 6f 77 73 20 61  e first M rows a
31f40 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
31f50 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 72  the result set r
31f60 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
31f70 45 4c 45 43 54 0a 73 74 61 74 65 6d 65 6e 74 20  ELECT.statement 
31f80 61 6e 64 20 74 68 65 20 6e 65 78 74 20 4e 20 72  and the next N r
31f90 6f 77 73 20 61 72 65 20 72 65 74 75 72 6e 65 64  ows are returned
31fa0 2c 20 77 68 65 72 65 20 4d 20 61 6e 64 20 4e 20  , where M and N 
31fb0 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
31fc0 68 61 74 0a 74 68 65 20 4f 46 46 53 45 54 20 61  hat.the OFFSET a
31fd0 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 73  nd LIMIT clauses
31fe0 20 65 76 61 6c 75 61 74 65 20 74 6f 2c 20 72 65   evaluate to, re
31ff0 73 70 65 63 74 69 76 65 6c 79 2e 20 5e 4f 72 2c  spectively. ^Or,
32000 20 69 66 20 74 68 65 20 53 45 4c 45 43 54 0a 77   if the SELECT.w
32010 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c 65 73 73  ould return less
32020 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77 73 20 69   than M+N rows i
32030 66 20 69 74 20 64 69 64 20 6e 6f 74 20 68 61 76  f it did not hav
32040 65 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  e a LIMIT clause
32050 2c 20 74 68 65 6e 20 74 68 65 0a 66 69 72 73 74  , then the.first
32060 20 4d 20 72 6f 77 73 20 61 72 65 20 73 6b 69 70   M rows are skip
32070 70 65 64 20 61 6e 64 20 74 68 65 20 72 65 6d 61  ped and the rema
32080 69 6e 69 6e 67 20 72 6f 77 73 20 28 69 66 20 61  ining rows (if a
32090 6e 79 29 20 61 72 65 20 72 65 74 75 72 6e 65 64  ny) are returned
320a0 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46 53 45 54  . ^If the.OFFSET
320b0 20 63 6c 61 75 73 65 20 65 76 61 6c 75 61 74 65   clause evaluate
320c0 73 20 74 6f 20 61 20 6e 65 67 61 74 69 76 65 20  s to a negative 
320d0 76 61 6c 75 65 2c 20 74 68 65 20 72 65 73 75 6c  value, the resul
320e0 74 73 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  ts are the same 
320f0 61 73 20 69 66 20 69 74 0a 68 61 64 20 65 76 61  as if it.had eva
32100 6c 75 61 74 65 64 20 74 6f 20 7a 65 72 6f 2e 0a  luated to zero..
32110 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20 6f 66 20  .<p>^Instead of 
32120 61 20 73 65 70 61 72 61 74 65 20 4f 46 46 53 45  a separate OFFSE
32130 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 4c 49  T clause, the LI
32140 4d 49 54 20 63 6c 61 75 73 65 20 6d 61 79 20 73  MIT clause may s
32150 70 65 63 69 66 79 20 74 77 6f 0a 73 63 61 6c 61  pecify two.scala
32160 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 73 65  r expressions se
32170 70 61 72 61 74 65 64 20 62 79 20 61 20 63 6f 6d  parated by a com
32180 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20 63 61 73  ma. ^In this cas
32190 65 2c 20 74 68 65 20 66 69 72 73 74 20 65 78 70  e, the first exp
321a0 72 65 73 73 69 6f 6e 0a 69 73 20 75 73 65 64 20  ression.is used 
321b0 61 73 20 74 68 65 20 4f 46 46 53 45 54 20 65 78  as the OFFSET ex
321c0 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65  pression and the
321d0 20 73 65 63 6f 6e 64 20 61 73 20 74 68 65 20 4c   second as the L
321e0 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  IMIT expression.
321f0 0a 54 68 69 73 20 69 73 20 63 6f 75 6e 74 65 72  .This is counter
32200 2d 69 6e 74 75 69 74 69 76 65 2c 20 61 73 20 77  -intuitive, as w
32210 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 4f 46  hen using the OF
32220 46 53 45 54 20 63 6c 61 75 73 65 20 74 68 65 20  FSET clause the 
32230 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65 20 74 77  second of.the tw
32240 6f 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69 73  o expressions is
32250 20 74 68 65 20 4f 46 46 53 45 54 20 61 6e 64 20   the OFFSET and 
32260 74 68 65 20 66 69 72 73 74 20 74 68 65 20 4c 49  the first the LI
32270 4d 49 54 2e 20 0a 54 68 69 73 20 72 65 76 65 72  MIT. .This rever
32280 73 61 6c 20 6f 66 20 74 68 65 20 6f 66 66 73 65  sal of the offse
32290 74 20 61 6e 64 20 6c 69 6d 69 74 20 69 73 20 69  t and limit is i
322a0 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20 69 74 20  ntentional.- it 
322b0 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d 70 61 74  maximizes compat
322c0 69 62 69 6c 69 74 79 20 77 69 74 68 20 6f 74 68  ibility with oth
322d0 65 72 20 53 51 4c 20 64 61 74 61 62 61 73 65 20  er SQL database 
322e0 73 79 73 74 65 6d 73 2e 0a 48 6f 77 65 76 65 72  systems..However
322f0 2c 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  , to avoid confu
32300 73 69 6f 6e 2c 20 70 72 6f 67 72 61 6d 6d 65 72  sion, programmer
32310 73 20 61 72 65 20 73 74 72 6f 6e 67 6c 79 20 65  s are strongly e
32320 6e 63 6f 75 72 61 67 65 64 20 74 6f 20 75 73 65  ncouraged to use
32330 0a 74 68 65 20 66 6f 72 6d 20 6f 66 20 74 68 65  .the form of the
32340 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 74 68   LIMIT clause th
32350 61 74 20 75 73 65 73 20 74 68 65 20 22 4f 46 46  at uses the "OFF
32360 53 45 54 22 20 6b 65 79 77 6f 72 64 20 61 6e 64  SET" keyword and
32370 20 61 76 6f 69 64 0a 75 73 69 6e 67 20 61 20 4c   avoid.using a L
32380 49 4d 49 54 20 63 6c 61 75 73 65 20 77 69 74 68  IMIT clause with
32390 20 61 20 63 6f 6d 6d 61 2d 73 65 70 61 72 61 74   a comma-separat
323a0 65 64 20 6f 66 66 73 65 74 2e 0a 0a 3c 74 63 6c  ed offset...<tcl
323b0 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 6c  >hd_fragment val
323c0 75 65 73 20 7b 56 41 4c 55 45 53 20 63 6c 61 75  ues {VALUES clau
323d0 73 65 7d 20 56 41 4c 55 45 53 3c 2f 74 63 6c 3e  se} VALUES</tcl>
323e0 0a 3c 68 33 3e 54 68 65 20 56 41 4c 55 45 53 20  .<h3>The VALUES 
323f0 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e  clause</h3>..<p>
32400 5e 28 54 68 65 20 70 68 72 61 73 65 20 22 56 41  ^(The phrase "VA
32410 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73  LUES(<i>expr-lis
32420 74 3c 2f 69 3e 29 22 20 6d 65 61 6e 73 20 74 68  t</i>)" means th
32430 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 61 73 20  e same thing.as 
32440 22 53 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d  "SELECT <i>expr-
32450 6c 69 73 74 3c 2f 69 3e 22 2e 29 5e 20 20 5e 28  list</i>".)^  ^(
32460 54 68 65 20 70 68 72 61 73 65 0a 22 56 41 4c 55  The phrase."VALU
32470 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d  ES(<i>expr-list-
32480 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c 69 3e 65  1</i>),...,(<i>e
32490 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69 3e 29 22  xpr-list-N</i>)"
324a0 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d 65 0a   means the same.
324b0 74 68 69 6e 67 20 61 73 20 22 53 45 4c 45 43 54  thing as "SELECT
324c0 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d 31 3c   <i>expr-list-1<
324d0 2f 69 3e 20 55 4e 49 4f 4e 20 41 4c 4c 20 2e 2e  /i> UNION ALL ..
324e0 2e 20 55 4e 49 4f 4e 20 41 4c 4c 0a 53 45 4c 45  . UNION ALL.SELE
324f0 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74 2d  CT <i>expr-list-
32500 4e 3c 2f 69 3e 22 2e 29 5e 20 20 42 6f 74 68 20  N</i>".)^  Both 
32510 66 6f 72 6d 73 20 61 72 65 20 74 68 65 20 73 61  forms are the sa
32520 6d 65 2c 20 65 78 63 65 70 74 20 74 68 61 74 0a  me, except that.
32530 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 53 45  the number of SE
32540 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
32550 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 69 73  in a compound is
32560 20 6c 69 6d 69 74 65 64 20 62 79 0a 5b 53 51 4c   limited by.[SQL
32570 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55  ITE_LIMIT_COMPOU
32580 4e 44 5f 53 45 4c 45 43 54 5d 20 77 68 65 72 65  ND_SELECT] where
32590 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
325a0 20 72 6f 77 73 20 69 6e 20 61 0a 56 41 4c 55 45   rows in a.VALUE
325b0 53 20 63 6c 61 75 73 65 20 68 61 73 20 6e 6f 20  S clause has no 
325c0 61 72 62 69 74 72 61 72 79 20 6c 69 6d 69 74 2e  arbitrary limit.
325d0 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 73  ..<p>There are s
325e0 6f 6d 65 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ome restrictions
325f0 20 6f 6e 20 74 68 65 20 75 73 65 20 6f 66 20 61   on the use of a
32600 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 74   VALUES clause t
32610 68 61 74 20 61 72 65 0a 6e 6f 74 20 73 68 6f 77  hat are.not show
32620 6e 20 6f 6e 20 74 68 65 20 73 79 6e 74 61 78 20  n on the syntax 
32630 64 69 61 67 72 61 6d 73 3a 0a 0a 3c 75 6c 3e 0a  diagrams:..<ul>.
32640 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55 45  <li><p>.^A VALUE
32650 53 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20  S clause cannot 
32660 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b  be followed by [
32670 4f 52 44 45 52 20 42 59 5d 2e 0a 0a 3c 6c 69 3e  ORDER BY]...<li>
32680 3c 70 3e 0a 5e 41 20 56 41 4c 55 45 53 20 63 6c  <p>.^A VALUES cl
32690 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 66  ause cannot be f
326a0 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4c 49 4d 49  ollowed by [LIMI
326b0 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a 0a 3c 68 33 3e  T]..</ul>...<h3>
326c0 54 68 65 20 57 49 54 48 20 43 6c 61 75 73 65 3c  The WITH Clause<
326d0 2f 68 33 3e 0a 0a 3c 70 3e 5e 53 45 4c 45 43 54  /h3>..<p>^SELECT
326e0 20 73 74 61 74 65 6d 65 6e 74 73 20 6d 61 79 20   statements may 
326f0 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 70 72  be optionally pr
32700 65 63 65 64 65 64 20 62 79 20 61 20 73 69 6e 67  eceded by a sing
32710 6c 65 0a 5b 57 49 54 48 20 63 6c 61 75 73 65 5d  le.[WITH clause]
32720 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 6f 6e   that defines on
32730 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f 6d 6d 6f  e or more [commo
32740 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
32750 6f 6e 73 5d 0a 66 6f 72 20 75 73 65 20 77 69 74  ons].for use wit
32760 68 69 6e 20 74 68 65 20 53 45 4c 45 43 54 20 73  hin the SELECT s
32770 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74 63 6c 3e  tatement...<tcl>
32780 68 64 5f 66 72 61 67 6d 65 6e 74 20 74 61 62 66  hd_fragment tabf
32790 75 6e 63 31 20 7b 74 61 62 6c 65 2d 76 61 6c 75  unc1 {table-valu
327a0 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  ed functions in 
327b0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 7d  the FROM clause}
327c0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 61 62 6c 65  </tcl>.<h3>Table
327d0 2d 76 61 6c 75 65 64 20 46 75 6e 63 74 69 6f 6e  -valued Function
327e0 73 20 49 6e 20 54 68 65 20 46 52 4f 4d 20 43 6c  s In The FROM Cl
327f0 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20  ause</h3>..<p>A 
32800 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 5d 20  [virtual table] 
32810 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 5b 68  that contains [h
32820 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 5d 20 63  idden columns] c
32830 61 6e 20 62 65 20 75 73 65 64 20 6c 69 6b 65 0a  an be used like.
32840 61 20 5b 74 61 62 6c 65 2d 76 61 6c 75 65 64 20  a [table-valued 
32850 66 75 6e 63 74 69 6f 6e 5d 20 69 6e 20 74 68 65  function] in the
32860 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e 20 20 54   FROM clause.  T
32870 68 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  he arguments to 
32880 74 68 65 0a 74 61 62 6c 65 2d 76 61 6c 75 65 64  the.table-valued
32890 20 66 75 6e 63 74 69 6f 6e 20 62 65 63 6f 6d 65   function become
328a0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 20   constraints on 
328b0 74 68 65 20 48 49 44 44 45 4e 20 63 6f 6c 75 6d  the HIDDEN colum
328c0 6e 73 20 6f 66 0a 74 68 65 20 76 69 72 74 75 61  ns of.the virtua
328d0 6c 20 74 61 62 6c 65 2e 20 20 41 64 64 69 74 69  l table.  Additi
328e0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
328f0 20 63 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e   can be found in
32900 20 74 68 65 0a 5b 74 61 62 6c 65 2d 76 61 6c 75   the.[table-valu
32910 65 64 20 66 75 6e 63 74 69 6f 6e 73 7c 76 69 72  ed functions|vir
32920 74 75 61 6c 20 74 61 62 6c 65 20 64 6f 63 75 6d  tual table docum
32930 65 6e 74 61 74 69 6f 6e 5d 2e 0a 0a 3c 74 63 6c  entation]...<tcl
32940 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  >.##############
32950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32990 0a 53 65 63 74 69 6f 6e 20 55 50 44 41 54 45 20  .Section UPDATE 
329a0 75 70 64 61 74 65 20 7b 55 50 44 41 54 45 20 2a  update {UPDATE *
329b0 55 50 44 41 54 45 73 7d 0a 0a 52 65 63 75 72 73  UPDATEs}..Recurs
329c0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
329d0 20 75 70 64 61 74 65 2d 73 74 6d 74 0a 3c 2f 74   update-stmt.</t
329e0 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55 50 44 41  cl>..<p>^An UPDA
329f0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  TE statement is 
32a00 75 73 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 61  used to modify a
32a10 20 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 76   subset of the v
32a20 61 6c 75 65 73 20 73 74 6f 72 65 64 20 69 6e 20  alues stored in 
32a30 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 72 6f  .zero or more ro
32a40 77 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ws of the databa
32a50 73 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66  se table identif
32a60 69 65 64 20 62 79 20 74 68 65 20 0a 5b 71 75 61  ied by the .[qua
32a70 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
32a80 65 5d 20 73 70 65 63 69 66 69 65 64 20 61 73 20  e] specified as 
32a90 70 61 72 74 20 6f 66 20 74 68 65 20 55 50 44 41  part of the UPDA
32aa0 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  TE statement...<
32ab0 70 3e 5e 49 66 20 74 68 65 20 55 50 44 41 54 45  p>^If the UPDATE
32ac0 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73 20   statement does 
32ad0 6e 6f 74 20 68 61 76 65 20 61 20 57 48 45 52 45  not have a WHERE
32ae0 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20 72 6f 77   clause, all row
32af0 73 20 69 6e 20 74 68 65 0a 74 61 62 6c 65 20 61  s in the.table a
32b00 72 65 20 6d 6f 64 69 66 69 65 64 20 62 79 20 74  re modified by t
32b10 68 65 20 55 50 44 41 54 45 2e 20 5e 4f 74 68 65  he UPDATE. ^Othe
32b20 72 77 69 73 65 2c 20 74 68 65 20 55 50 44 41 54  rwise, the UPDAT
32b30 45 20 61 66 66 65 63 74 73 20 6f 6e 6c 79 20 74  E affects only t
32b40 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72 20 77 68  hose.rows for wh
32b50 69 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  ich the WHERE cl
32b60 61 75 73 65 0a 5b 62 6f 6f 6c 65 61 6e 20 65 78  ause.[boolean ex
32b70 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c 65 61 6e  pression|boolean
32b80 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 74   expression is t
32b90 72 75 65 5d 2e 20 5e 49 74 20 69 73 20 6e 6f 74  rue]. ^It is not
32ba0 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
32bb0 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20 64 6f  .WHERE clause do
32bc0 65 73 20 6e 6f 74 20 65 76 61 6c 75 61 74 65 20  es not evaluate 
32bd0 74 6f 20 74 72 75 65 20 66 6f 72 20 61 6e 79 20  to true for any 
32be0 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65  row in the table
32bf0 20 2d 20 74 68 69 73 20 6a 75 73 74 0a 6d 65 61   - this just.mea
32c00 6e 73 20 74 68 61 74 20 74 68 65 20 55 50 44 41  ns that the UPDA
32c10 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61 66 66  TE statement aff
32c20 65 63 74 73 20 7a 65 72 6f 20 72 6f 77 73 2e 0a  ects zero rows..
32c30 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66 69 63 61  .<p>The modifica
32c40 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f 20 65 61  tions made to ea
32c50 63 68 20 72 6f 77 20 61 66 66 65 63 74 65 64 20  ch row affected 
32c60 62 79 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  by an UPDATE sta
32c70 74 65 6d 65 6e 74 20 61 72 65 0a 64 65 74 65 72  tement are.deter
32c80 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6c 69 73  mined by the lis
32c90 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74 73  t of assignments
32ca0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 53   following the S
32cb0 45 54 20 6b 65 79 77 6f 72 64 2e 20 45 61 63 68  ET keyword. Each
32cc0 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73 70 65 63  .assignment spec
32cd0 69 66 69 65 73 20 61 20 3c 79 79 74 65 72 6d 3e  ifies a <yyterm>
32ce0 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74  column-name</yyt
32cf0 65 72 6d 3e 20 74 6f 20 74 68 65 20 6c 65 66 74  erm> to the left
32d00 20 6f 66 20 74 68 65 20 0a 65 71 75 61 6c 73 20   of the .equals 
32d10 73 69 67 6e 20 61 6e 64 20 61 20 73 63 61 6c 61  sign and a scala
32d20 72 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  r expression to 
32d30 74 68 65 20 72 69 67 68 74 2e 20 0a 5e 46 6f 72  the right. .^For
32d40 20 65 61 63 68 20 61 66 66 65 63 74 65 64 20 72   each affected r
32d50 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64 20 63 6f  ow, the named co
32d60 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74 20 74 6f  lumns.are set to
32d70 20 74 68 65 20 76 61 6c 75 65 73 20 66 6f 75 6e   the values foun
32d80 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20  d by evaluating 
32d90 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
32da0 67 20 73 63 61 6c 61 72 20 0a 65 78 70 72 65 73  g scalar .expres
32db0 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20 73 69 6e  sions. ^If a sin
32dc0 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20  gle column-name 
32dd0 61 70 70 65 61 72 73 20 6d 6f 72 65 20 74 68 61  appears more tha
32de0 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65 20 6c 69  n once in the li
32df0 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d 65 6e 74  st of.assignment
32e00 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 61 6c   expressions, al
32e10 6c 20 62 75 74 20 74 68 65 20 72 69 67 68 74 6d  l but the rightm
32e20 6f 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 69  ost occurrence i
32e30 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43 6f 6c 75  s ignored. ^Colu
32e40 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e 6f 74 20  mns.that do not 
32e50 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 6c 69  appear in the li
32e60 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65 6e 74  st of assignment
32e70 73 20 61 72 65 20 6c 65 66 74 20 75 6e 6d 6f 64  s are left unmod
32e80 69 66 69 65 64 2e 20 5e 54 68 65 20 73 63 61 6c  ified. ^The scal
32e90 61 72 0a 65 78 70 72 65 73 73 69 6f 6e 73 20 6d  ar.expressions m
32ea0 61 79 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75  ay refer to colu
32eb0 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f 77 20 62  mns of the row b
32ec0 65 69 6e 67 20 75 70 64 61 74 65 64 2e 20 5e 49  eing updated. ^I
32ed0 6e 20 74 68 69 73 20 63 61 73 65 20 61 6c 6c 0a  n this case all.
32ee0 73 63 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f  scalar expressio
32ef0 6e 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  ns are evaluated
32f00 20 62 65 66 6f 72 65 20 61 6e 79 20 61 73 73 69   before any assi
32f10 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d 61 64 65  gnments are made
32f20 2e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67 20  ...<p>Beginning 
32f30 69 6e 20 53 51 4c 69 74 65 20 5b 76 65 72 73 69  in SQLite [versi
32f40 6f 6e 20 33 2e 31 35 2e 30 5d 20 28 5b 64 61 74  on 3.15.0] ([dat
32f50 65 6f 66 3a 33 2e 31 35 2e 30 5d 29 2c 20 61 6e  eof:3.15.0]), an
32f60 20 61 73 73 69 67 6e 6d 65 6e 74 20 69 6e 0a 74   assignment in.t
32f70 68 65 20 53 45 54 20 63 6c 61 75 73 65 20 63 61  he SET clause ca
32f80 6e 20 62 65 20 61 20 0a 5b 63 6f 6c 75 6d 6e 2d  n be a .[column-
32f90 6e 61 6d 65 2d 6c 69 73 74 7c 70 61 72 65 6e 74  name-list|parent
32fa0 68 65 73 69 7a 65 64 20 6c 69 73 74 20 6f 66 20  hesized list of 
32fb0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 5d 20 6f 6e  column names] on
32fc0 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 61 0a   the left and a.
32fd0 5b 72 6f 77 20 76 61 6c 75 65 5d 20 6f 66 20 74  [row value] of t
32fe0 68 65 20 73 61 6d 65 20 73 69 7a 65 20 6f 6e 20  he same size on 
32ff0 74 68 65 20 72 69 67 68 74 2e 0a 0a 0a 3c 70 3e  the right....<p>
33000 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 22 4f  ^The optional "O
33010 52 20 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22  R <i>action</i>"
33020 20 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75 73 65   conflict clause
33030 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68   that follows th
33040 65 0a 55 50 44 41 54 45 20 6b 65 79 77 6f 72 64  e.UPDATE keyword
33050 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65 72   allows the user
33060 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20 61 20 73   to nominate a s
33070 70 65 63 69 66 69 63 0a 63 6f 6e 73 74 72 61 69  pecific.constrai
33080 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  nt conflict reso
33090 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
330a0 20 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 74   to use during t
330b0 68 69 73 20 6f 6e 65 20 55 50 44 41 54 45 20 63  his one UPDATE c
330c0 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72 20 74 6f  ommand..Refer to
330d0 20 74 68 65 20 73 65 63 74 69 6f 6e 20 65 6e 74   the section ent
330e0 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e 46 4c 49  itled [ON CONFLI
330f0 43 54 5d 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  CT] for addition
33100 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
33110 0a 3c 68 33 3e 52 65 73 74 72 69 63 74 69 6f 6e  .<h3>Restriction
33120 73 20 6f 6e 20 55 50 44 41 54 45 20 53 74 61 74  s on UPDATE Stat
33130 65 6d 65 6e 74 73 20 57 69 74 68 69 6e 20 43 52  ements Within CR
33140 45 41 54 45 20 54 52 49 47 47 45 52 3c 2f 68 33  EATE TRIGGER</h3
33150 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77  >..<p>The follow
33160 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 73  ing additional s
33170 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69 6f  yntax restrictio
33180 6e 73 20 61 70 70 6c 79 20 74 6f 20 55 50 44 41  ns apply to UPDA
33190 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  TE statements th
331a0 61 74 0a 6f 63 63 75 72 20 77 69 74 68 69 6e 20  at.occur within 
331b0 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 5b 43  the body of a [C
331c0 52 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73  REATE TRIGGER] s
331d0 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a 3c 75 6c  tatement.  ..<ul
331e0 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54 68 65 20  >.  <li><p>^The 
331f0 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61  <yyterm>table-na
33200 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 73 70 65 63  me</yyterm> spec
33210 69 66 69 65 64 20 61 73 20 70 61 72 74 20 6f 66  ified as part of
33220 20 61 6e 20 55 50 44 41 54 45 20 0a 20 20 20 20   an UPDATE .    
33230 20 20 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68    statement with
33240 69 6e 0a 20 20 20 20 20 20 61 20 74 72 69 67 67  in.      a trigg
33250 65 72 20 62 6f 64 79 20 6d 75 73 74 20 62 65 20  er body must be 
33260 75 6e 71 75 61 6c 69 66 69 65 64 2e 20 5e 28 49  unqualified. ^(I
33270 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
33280 68 65 0a 20 20 20 20 20 20 3c 69 3e 73 63 68 65  he.      <i>sche
33290 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c  ma-name</i><b>.<
332a0 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e 20 74 68  /b> prefix on th
332b0 65 20 74 61 62 6c 65 20 6e 61 6d 65 20 6f 66 20  e table name of 
332c0 74 68 65 20 55 50 44 41 54 45 20 69 73 0a 20 20  the UPDATE is.  
332d0 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20      not allowed 
332e0 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e  within triggers.
332f0 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68 65 20 74  )^ ^Unless the t
33300 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  able to which th
33310 65 20 74 72 69 67 67 65 72 0a 20 20 20 20 20 20  e trigger.      
33320 69 73 20 61 74 74 61 63 68 65 64 20 69 73 20 69  is attached is i
33330 6e 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  n the TEMP datab
33340 61 73 65 2c 20 74 68 65 20 74 61 62 6c 65 20 62  ase, the table b
33350 65 69 6e 67 20 75 70 64 61 74 65 64 20 62 79 20  eing updated by 
33360 74 68 65 0a 20 20 20 20 20 20 74 72 69 67 67 65  the.      trigge
33370 72 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 72  r program must r
33380 65 73 69 64 65 20 69 6e 20 74 68 65 20 73 61 6d  eside in the sam
33390 65 20 64 61 74 61 62 61 73 65 20 61 73 20 69 74  e database as it
333a0 2e 20 5e 49 66 20 74 68 65 20 74 61 62 6c 65 0a  . ^If the table.
333b0 20 20 20 20 20 20 74 6f 20 77 68 69 63 68 20 74        to which t
333c0 68 65 20 74 72 69 67 67 65 72 20 69 73 20 61 74  he trigger is at
333d0 74 61 63 68 65 64 20 69 73 20 69 6e 20 74 68 65  tached is in the
333e0 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 2c 20   TEMP database, 
333f0 74 68 65 6e 20 74 68 65 0a 20 20 20 20 20 20 75  then the.      u
33400 6e 71 75 61 6c 69 66 69 65 64 20 6e 61 6d 65 20  nqualified name 
33410 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
33420 6e 67 20 75 70 64 61 74 65 64 20 69 73 20 72 65  ng updated is re
33430 73 6f 6c 76 65 64 20 69 6e 20 74 68 65 20 73 61  solved in the sa
33440 6d 65 20 77 61 79 0a 20 20 20 20 20 20 61 73 20  me way.      as 
33450 69 74 20 69 73 20 66 6f 72 20 61 20 74 6f 70 2d  it is for a top-
33460 6c 65 76 65 6c 20 73 74 61 74 65 6d 65 6e 74 20  level statement 
33470 28 62 79 20 73 65 61 72 63 68 69 6e 67 20 66 69  (by searching fi
33480 72 73 74 20 74 68 65 20 54 45 4d 50 20 64 61 74  rst the TEMP dat
33490 61 62 61 73 65 2c 0a 20 20 20 20 20 20 74 68 65  abase,.      the
334a0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
334b0 61 73 65 2c 20 74 68 65 6e 20 61 6e 79 20 6f 74  ase, then any ot
334c0 68 65 72 20 64 61 74 61 62 61 73 65 73 20 69 6e  her databases in
334d0 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20   the order they 
334e0 77 65 72 65 0a 20 20 20 20 20 20 61 74 74 61 63  were.      attac
334f0 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e 3c 70 3e  hed)...  <li><p>
33500 5e 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20  ^The INDEXED BY 
33510 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  and NOT INDEXED 
33520 63 6c 61 75 73 65 73 20 61 72 65 20 6e 6f 74 20  clauses are not 
33530 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50 44 41 54  allowed on UPDAT
33540 45 0a 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e  E.      statemen
33550 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ts within trigge
33560 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c 69 3e 3c  rs.</p>..  <li><
33570 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20 61 6e 64  p>^The LIMIT and
33580 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
33590 73 20 66 6f 72 20 55 50 44 41 54 45 20 61 72 65  s for UPDATE are
335a0 20 75 6e 73 75 70 70 6f 72 74 65 64 20 77 69 74   unsupported wit
335b0 68 69 6e 0a 20 20 20 20 20 20 74 72 69 67 67 65  hin.      trigge
335c0 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
335d0 66 20 74 68 65 20 63 6f 6d 70 69 6c 61 74 69 6f  f the compilatio
335e0 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 74  n options used t
335f0 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 2e 0a  o build SQLite..
33600 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70 74 69 6f  </ul>..<h3>Optio
33610 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64 20 4f 52  nal LIMIT and OR
33620 44 45 52 20 42 59 20 43 6c 61 75 73 65 73 3c 2f  DER BY Clauses</
33630 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20 53 51 4c  h3>..<p>^(If SQL
33640 69 74 65 20 69 73 20 62 75 69 6c 74 20 77 69 74  ite is built wit
33650 68 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e  h the [SQLITE_EN
33660 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45  ABLE_UPDATE_DELE
33670 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d 70 69 6c  TE_LIMIT].compil
33680 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 74 68  e-time option th
33690 65 6e 20 74 68 65 20 73 79 6e 74 61 78 20 6f 66  en the syntax of
336a0 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
336b0 65 6d 65 6e 74 20 69 73 20 65 78 74 65 6e 64 65  ement is extende
336c0 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e 61 6c 20  d.with optional 
336d0 4f 52 44 45 52 20 42 59 20 61 6e 64 20 4c 49 4d  ORDER BY and LIM
336e0 49 54 20 63 6c 61 75 73 65 73 29 5e 20 61 73 20  IT clauses)^ as 
336f0 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74  follows:</p>..<t
33700 63 6c 3e 42 75 62 62 6c 65 44 69 61 67 72 61 6d  cl>BubbleDiagram
33710 20 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69 6d   update-stmt-lim
33720 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  ited</tcl>..<p>^
33730 49 66 20 61 6e 20 55 50 44 41 54 45 20 73 74 61  If an UPDATE sta
33740 74 65 6d 65 6e 74 20 68 61 73 20 61 20 4c 49 4d  tement has a LIM
33750 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6d  IT clause, the m
33760 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
33770 20 72 6f 77 73 20 74 68 61 74 0a 77 69 6c 6c 20   rows that.will 
33780 62 65 20 75 70 64 61 74 65 64 20 69 73 20 66 6f  be updated is fo
33790 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e  und by evaluatin
337a0 67 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 69  g the accompanyi
337b0 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  ng expression an
337c0 64 20 63 61 73 74 69 6e 67 0a 69 74 20 74 6f 20  d casting.it to 
337d0 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
337e0 2e 20 5e 41 20 6e 65 67 61 74 69 76 65 20 76 61  . ^A negative va
337f0 6c 75 65 20 69 73 20 69 6e 74 65 72 70 72 65 74  lue is interpret
33800 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d 69 74 22  ed as "no limit"
33810 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 4c 49  ...<p>^If the LI
33820 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20 65  MIT expression e
33830 76 61 6c 75 61 74 65 73 20 74 6f 20 6e 6f 6e 2d  valuates to non-
33840 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 3c  negative value <
33850 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74 68 65 0a  i>N</i> and the.
33860 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
33870 20 68 61 73 20 61 6e 20 4f 52 44 45 52 20 42 59   has an ORDER BY
33880 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 61 6c   clause, then al
33890 6c 20 72 6f 77 73 20 74 68 61 74 20 77 6f 75 6c  l rows that woul
338a0 64 20 62 65 20 75 70 64 61 74 65 64 20 69 6e 0a  d be updated in.
338b0 74 68 65 20 61 62 73 65 6e 63 65 20 6f 66 20 74  the absence of t
338c0 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20  he LIMIT clause 
338d0 61 72 65 20 73 6f 72 74 65 64 20 61 63 63 6f 72  are sorted accor
338e0 64 69 6e 67 20 74 6f 20 74 68 65 20 4f 52 44 45  ding to the ORDE
338f0 52 20 42 59 20 61 6e 64 20 74 68 65 0a 66 69 72  R BY and the.fir
33900 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75 70 64 61  st <i>N</i> upda
33910 74 65 64 2e 20 5e 28 49 66 20 74 68 65 20 55 50  ted. ^(If the UP
33920 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
33930 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46 46 53 45  lso has an OFFSE
33940 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20 69  T clause,.then i
33950 74 20 69 73 20 73 69 6d 69 6c 61 72 6c 79 20 65  t is similarly e
33960 76 61 6c 75 61 74 65 64 20 61 6e 64 20 63 61 73  valuated and cas
33970 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  t to an integer 
33980 76 61 6c 75 65 2e 20 49 66 20 74 68 65 20 4f 46  value. If the OF
33990 46 53 45 54 0a 65 78 70 72 65 73 73 69 6f 6e 20  FSET.expression 
339a0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e  evaluates to a n
339b0 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
339c0 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74 68 65 6e  e <i>M</i>, then
339d0 20 74 68 65 20 66 69 72 73 74 20 3c 69 3e 4d 3c   the first <i>M<
339e0 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20 73 6b 69  /i>.rows are ski
339f0 70 70 65 64 20 61 6e 64 20 74 68 65 20 66 6f 6c  pped and the fol
33a00 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f 69 3e 20  lowing <i>N</i> 
33a10 72 6f 77 73 20 75 70 64 61 74 65 64 20 69 6e 73  rows updated ins
33a20 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e 49 66 20  tead.)^..<p>^If 
33a30 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
33a40 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f 52 44 45  ment has no ORDE
33a50 52 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  R BY clause, the
33a60 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 0a  n all rows that.
33a70 77 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64  would be updated
33a80 20 69 6e 20 74 68 65 20 61 62 73 65 6e 63 65 20   in the absence 
33a90 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61  of the LIMIT cla
33aa0 75 73 65 20 61 72 65 20 61 73 73 65 6d 62 6c 65  use are assemble
33ab0 64 20 69 6e 20 61 6e 0a 61 72 62 69 74 72 61 72  d in an.arbitrar
33ac0 79 20 6f 72 64 65 72 20 62 65 66 6f 72 65 20 61  y order before a
33ad0 70 70 6c 79 69 6e 67 20 74 68 65 20 4c 49 4d 49  pplying the LIMI
33ae0 54 20 61 6e 64 20 4f 46 46 53 45 54 20 63 6c 61  T and OFFSET cla
33af0 75 73 65 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  uses to determin
33b00 65 20 0a 77 68 69 63 68 20 61 72 65 20 61 63 74  e .which are act
33b10 75 61 6c 6c 79 20 75 70 64 61 74 65 64 2e 0a 0a  ually updated...
33b20 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45 52 20 42  <p>^(The ORDER B
33b30 59 20 63 6c 61 75 73 65 20 6f 6e 20 61 6e 20 55  Y clause on an U
33b40 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
33b50 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20  is used only to 
33b60 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 0a  determine which.
33b70 72 6f 77 73 20 66 61 6c 6c 20 77 69 74 68 69 6e  rows fall within
33b80 20 74 68 65 20 4c 49 4d 49 54 2e 20 54 68 65 20   the LIMIT. The 
33b90 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
33ba0 6f 77 73 20 61 72 65 20 6d 6f 64 69 66 69 65 64  ows are modified
33bb0 20 69 73 20 61 72 62 69 74 72 61 72 79 0a 61 6e   is arbitrary.an
33bc0 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c 75 65 6e  d is not influen
33bd0 63 65 64 20 62 79 20 74 68 65 20 4f 52 44 45 52  ced by the ORDER
33be0 20 42 59 20 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c   BY clause.)^..<
33bf0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
33c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33c30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33c40 23 23 23 0a 53 65 63 74 69 6f 6e 20 56 41 43 55  ###.Section VACU
33c50 55 4d 20 76 61 63 75 75 6d 20 56 41 43 55 55 4d  UM vacuum VACUUM
33c60 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62 62 6c  ..RecursiveBubbl
33c70 65 44 69 61 67 72 61 6d 20 76 61 63 75 75 6d 2d  eDiagram vacuum-
33c80 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  stmt.</tcl>..<p>
33c90 0a 20 20 54 68 65 20 56 41 43 55 55 4d 20 63 6f  .  The VACUUM co
33ca0 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64 73 20 74  mmand rebuilds t
33cb0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
33cc0 2c 20 72 65 70 61 63 6b 69 6e 67 20 69 74 20 69  , repacking it i
33cd0 6e 74 6f 20 61 20 6d 69 6e 69 6d 61 6c 0a 20 20  nto a minimal.  
33ce0 61 6d 6f 75 6e 74 20 6f 66 20 64 69 73 6b 20 73  amount of disk s
33cf0 70 61 63 65 2e 20 54 68 65 72 65 20 61 72 65 20  pace. There are 
33d00 73 65 76 65 72 61 6c 20 0a 20 20 72 65 61 73 6f  several .  reaso
33d10 6e 73 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f  ns an applicatio
33d20 6e 20 6d 69 67 68 74 20 64 6f 20 74 68 69 73 3a  n might do this:
33d30 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70  ..<ul>.  <li> <p
33d40 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c 69 74 65  > ^Unless SQLite
33d50 20 69 73 20 72 75 6e 6e 69 6e 67 20 69 6e 20 22   is running in "
33d60 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46 55 4c 4c  auto_vacuum=FULL
33d70 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20 61 20 6c  " mode, when a l
33d80 61 72 67 65 0a 20 20 20 20 20 61 6d 6f 75 6e 74  arge.     amount
33d90 20 6f 66 20 64 61 74 61 20 69 73 20 64 65 6c 65   of data is dele
33da0 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ted from the dat
33db0 61 62 61 73 65 20 66 69 6c 65 20 69 74 20 6c 65  abase file it le
33dc0 61 76 65 73 20 62 65 68 69 6e 64 20 65 6d 70 74  aves behind empt
33dd0 79 0a 20 20 20 20 20 73 70 61 63 65 2c 20 6f 72  y.     space, or
33de0 20 22 66 72 65 65 22 20 64 61 74 61 62 61 73 65   "free" database
33df0 20 70 61 67 65 73 2e 20 54 68 69 73 20 6d 65 61   pages. This mea
33e00 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
33e10 66 69 6c 65 20 6d 69 67 68 74 0a 20 20 20 20 20  file might.     
33e20 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 73  be larger than s
33e30 74 72 69 63 74 6c 79 20 6e 65 63 65 73 73 61 72  trictly necessar
33e40 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  y. ^Running VACU
33e50 55 4d 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68  UM to rebuild th
33e60 65 20 0a 20 20 20 20 20 64 61 74 61 62 61 73 65  e .     database
33e70 20 72 65 63 6c 61 69 6d 73 20 74 68 69 73 20 73   reclaims this s
33e80 70 61 63 65 20 61 6e 64 20 72 65 64 75 63 65 73  pace and reduces
33e90 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
33ea0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
33eb0 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e 46 72 65  .  <li> <p> ^Fre
33ec0 71 75 65 6e 74 20 69 6e 73 65 72 74 73 2c 20 75  quent inserts, u
33ed0 70 64 61 74 65 73 2c 20 61 6e 64 20 64 65 6c 65  pdates, and dele
33ee0 74 65 73 20 63 61 6e 20 63 61 75 73 65 20 74 68  tes can cause th
33ef0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
33f00 20 20 20 20 20 74 6f 20 62 65 63 6f 6d 65 20 66       to become f
33f10 72 61 67 6d 65 6e 74 65 64 20 2d 20 77 68 65 72  ragmented - wher
33f20 65 20 64 61 74 61 20 66 6f 72 20 61 20 73 69 6e  e data for a sin
33f30 67 6c 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  gle table or ind
33f40 65 78 20 69 73 20 73 63 61 74 74 65 72 65 64 20  ex is scattered 
33f50 0a 20 20 20 20 20 61 72 6f 75 6e 64 20 74 68 65  .     around the
33f60 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
33f70 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55 55 4d 20  ^Running VACUUM 
33f80 65 6e 73 75 72 65 73 20 74 68 61 74 20 65 61 63  ensures that eac
33f90 68 20 74 61 62 6c 65 20 61 6e 64 0a 20 20 20 20  h table and.    
33fa0 20 69 6e 64 65 78 20 69 73 20 6c 61 72 67 65 6c   index is largel
33fb0 79 20 73 74 6f 72 65 64 20 63 6f 6e 74 69 67 75  y stored contigu
33fc0 6f 75 73 6c 79 20 77 69 74 68 69 6e 20 74 68 65  ously within the
33fd0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
33fe0 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20 20 63 61  ^In some.     ca
33ff0 73 65 73 2c 20 56 41 43 55 55 4d 20 6d 61 79 20  ses, VACUUM may 
34000 61 6c 73 6f 20 72 65 64 75 63 65 20 74 68 65 20  also reduce the 
34010 6e 75 6d 62 65 72 20 6f 66 20 70 61 72 74 69 61  number of partia
34020 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73  lly filled pages
34030 20 69 6e 0a 20 20 20 20 20 74 68 65 20 64 61 74   in.     the dat
34040 61 62 61 73 65 2c 20 72 65 64 75 63 69 6e 67 20  abase, reducing 
34050 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
34060 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 75  database file fu
34070 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69 3e 20 3c  rther...  <li> <
34080 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68  p> ^Normally, th
34090 65 20 64 61 74 61 62 61 73 65 20 5b 70 61 67 65  e database [page
340a0 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68 65 74 68  _size] and wheth
340b0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 64 61  er or not the da
340c0 74 61 62 61 73 65 0a 20 20 20 20 20 73 75 70 70  tabase.     supp
340d0 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61 63 75 75  orts [auto_vacuu
340e0 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f 6e 66 69  m] must be confi
340f0 67 75 72 65 64 20 62 65 66 6f 72 65 20 74 68 65  gured before the
34100 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
34110 73 0a 20 20 20 20 20 61 63 74 75 61 6c 6c 79 20  s.     actually 
34120 63 72 65 61 74 65 64 2e 20 5e 48 6f 77 65 76 65  created. ^Howeve
34130 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69 6e 20 5b  r, when not in [
34140 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d  write-ahead log]
34150 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20 20 20 20   mode, the .    
34160 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64   [page_size] and
34170 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  /or [auto_vacuum
34180 5d 20 70 72 6f 70 65 72 74 69 65 73 20 6f 66 20  ] properties of 
34190 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
341a0 62 61 73 65 20 6d 61 79 20 62 65 0a 20 20 20 20  base may be.    
341b0 20 63 68 61 6e 67 65 64 20 62 79 20 75 73 69 6e   changed by usin
341c0 67 20 74 68 65 20 5b 70 61 67 65 5f 73 69 7a 65  g the [page_size
341d0 20 70 72 61 67 6d 61 7c 70 61 67 65 5f 73 69 7a   pragma|page_siz
341e0 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20 20 20 20  e]  and/or .    
341f0 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 7c 70 72   [auto_vacuum|pr
34200 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75 75 6d  agma auto_vacuum
34210 5d 20 70 72 61 67 6d 61 73 20 61 6e 64 20 74 68  ] pragmas and th
34220 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 56  en immediately V
34230 41 43 55 55 4d 69 6e 67 0a 20 20 20 20 20 74 68  ACUUMing.     th
34240 65 20 64 61 74 61 62 61 73 65 2e 20 5e 57 68 65  e database. ^Whe
34250 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61 68 65 61  n in [write-ahea
34260 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20 6f 6e 6c  d log] mode, onl
34270 79 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75  y the [auto_vacu
34280 75 6d 5d 0a 20 20 20 20 20 73 75 70 70 6f 72 74  um].     support
34290 20 70 72 6f 70 65 72 74 79 20 63 61 6e 20 62 65   property can be
342a0 20 63 68 61 6e 67 65 64 20 75 73 69 6e 67 20 56   changed using V
342b0 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  ACUUM..</ul>..<p
342c0 3e 5e 42 79 20 64 65 66 61 75 6c 74 2c 20 56 41  >^By default, VA
342d0 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  CUUM only works 
342e0 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 6d 61 69 6e  only on the main
342f0 20 64 61 74 61 62 61 73 65 2e 0a 5e 5b 41 54 54   database..^[ATT
34300 41 43 48 7c 41 74 74 61 63 68 65 64 20 64 61 74  ACH|Attached dat
34310 61 62 61 73 65 73 5d 20 63 61 6e 20 62 65 20 76  abases] can be v
34320 61 63 75 75 6d 65 64 20 62 79 20 61 70 70 65 6e  acuumed by appen
34330 64 69 6e 67 20 74 68 65 20 61 70 70 72 6f 70 72  ding the appropr
34340 69 61 74 65 0a 3c 79 79 74 65 72 6d 3e 73 63 68  iate.<yyterm>sch
34350 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d  ema-name</yyterm
34360 3e 20 74 6f 20 74 68 65 20 56 41 43 55 55 4d 20  > to the VACUUM 
34370 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 3c  statement...<p><
34380 62 3e 43 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  b>Compatibility 
34390 57 61 72 6e 69 6e 67 3a 3c 2f 62 3e 20 54 68 65  Warning:</b> The
343a0 20 61 62 69 6c 69 74 79 20 74 6f 20 76 61 63 75   ability to vacu
343b0 75 6d 20 61 74 74 61 63 68 65 64 20 64 61 74 61  um attached data
343c0 62 61 73 65 73 20 77 61 73 0a 61 64 64 65 64 20  bases was.added 
343d0 69 6e 20 5b 76 65 72 73 69 6f 6e 20 33 2e 31 35  in [version 3.15
343e0 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31  .0] ([dateof:3.1
343f0 35 2e 30 5d 29 2e 20 20 50 72 69 6f 72 20 74 6f  5.0]).  Prior to
34400 20 74 68 61 74 2c 20 61 20 0a 3c 79 79 74 65 72   that, a .<yyter
34410 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79  m>schema-name</y
34420 79 74 65 72 6d 3e 20 61 64 64 65 64 20 74 6f 20  yterm> added to 
34430 74 68 65 0a 56 41 43 55 55 4d 20 73 74 61 74 65  the.VACUUM state
34440 6d 65 6e 74 20 77 6f 75 6c 64 20 62 65 20 73 69  ment would be si
34450 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 20 61  lently ignored a
34460 6e 64 20 74 68 65 20 22 6d 61 69 6e 22 20 73 63  nd the "main" sc
34470 68 65 6d 61 20 77 6f 75 6c 64 20 62 65 0a 76 61  hema would be.va
34480 63 75 75 6d 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  cuumed.</p>..<p>
34490 5e 54 68 65 20 56 41 43 55 55 4d 20 63 6f 6d 6d  ^The VACUUM comm
344a0 61 6e 64 20 77 6f 72 6b 73 20 62 79 20 63 6f 70  and works by cop
344b0 79 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ying the content
344c0 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
344d0 65 20 69 6e 74 6f 0a 61 20 74 65 6d 70 6f 72 61  e into.a tempora
344e0 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
344f0 20 61 6e 64 20 74 68 65 6e 20 6f 76 65 72 77 72   and then overwr
34500 69 74 69 6e 67 20 74 68 65 20 6f 72 69 67 69 6e  iting the origin
34510 61 6c 20 77 69 74 68 20 74 68 65 20 0a 63 6f 6e  al with the .con
34520 74 65 6e 74 73 20 6f 66 20 74 68 65 20 74 65 6d  tents of the tem
34530 70 6f 72 61 72 79 20 66 69 6c 65 2e 20 5e 57 68  porary file. ^Wh
34540 65 6e 20 6f 76 65 72 77 72 69 74 69 6e 67 20 74  en overwriting t
34550 68 65 20 6f 72 69 67 69 6e 61 6c 2c 20 61 20 72  he original, a r
34560 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20  ollback.journal 
34570 6f 72 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20  or [write-ahead 
34580 6c 6f 67 5d 20 57 41 4c 20 66 69 6c 65 20 69 73  log] WAL file is
34590 20 75 73 65 64 20 6a 75 73 74 20 61 73 20 69 74   used just as it
345a0 20 77 6f 75 6c 64 20 62 65 20 66 6f 72 20 61 6e   would be for an
345b0 79 0a 6f 74 68 65 72 20 64 61 74 61 62 61 73 65  y.other database
345c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 5e 54   transaction. ^T
345d0 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 20 77  his means that w
345e0 68 65 6e 20 56 41 43 55 55 4d 69 6e 67 20 61 20  hen VACUUMing a 
345f0 64 61 74 61 62 61 73 65 2c 20 0a 61 73 20 6d 75  database, .as mu
34600 63 68 20 61 73 20 74 77 69 63 65 20 74 68 65 20  ch as twice the 
34610 73 69 7a 65 20 6f 66 20 74 68 65 20 6f 72 69 67  size of the orig
34620 69 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 69  inal database fi
34630 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 20 69  le is required i
34640 6e 20 66 72 65 65 0a 64 69 73 6b 20 73 70 61 63  n free.disk spac
34650 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56 41 43 55  e...<p>^The VACU
34660 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 63  UM command may c
34670 68 61 6e 67 65 20 74 68 65 20 5b 52 4f 57 49 44  hange the [ROWID
34680 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66 20 65 6e   | ROWIDs] of en
34690 74 72 69 65 73 20 69 6e 20 61 6e 79 0a 74 61 62  tries in any.tab
346a0 6c 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  les that do not 
346b0 68 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74  have an explicit
346c0 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
346d0 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70  Y KEY]..</p>..<p
346e0 3e 5e 41 20 56 41 43 55 55 4d 20 77 69 6c 6c 20  >^A VACUUM will 
346f0 66 61 69 6c 20 69 66 20 74 68 65 72 65 20 69 73  fail if there is
34700 20 61 6e 20 6f 70 65 6e 20 74 72 61 6e 73 61 63   an open transac
34710 74 69 6f 6e 2c 20 6f 72 20 69 66 20 74 68 65 72  tion, or if ther
34720 65 20 61 72 65 20 6f 6e 65 20 6f 72 0a 6d 6f 72  e are one or.mor
34730 65 20 61 63 74 69 76 65 20 53 51 4c 20 73 74 61  e active SQL sta
34740 74 65 6d 65 6e 74 73 20 77 68 65 6e 20 69 74 20  tements when it 
34750 69 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e 28 41 6e  is run...<p>^(An
34760 20 61 6c 74 65 72 6e 61 74 69 76 65 20 74 6f 20   alternative to 
34770 75 73 69 6e 67 20 74 68 65 20 56 41 43 55 55 4d  using the VACUUM
34780 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72 65 63 6c   command to.recl
34790 61 69 6d 20 73 70 61 63 65 20 61 66 74 65 72 20  aim space after 
347a0 64 61 74 61 20 68 61 73 20 62 65 65 6e 20 64 65  data has been de
347b0 6c 65 74 65 64 20 69 73 20 61 75 74 6f 2d 76 61  leted is auto-va
347c0 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e 61 62 6c  cuum mode, enabl
347d0 65 64 20 75 73 69 6e 67 0a 74 68 65 20 5b 61 75  ed using.the [au
347e0 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72 61 67 6d  to_vacuum] pragm
347f0 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61 75 74 6f  a.)^ ^When [auto
34800 5f 76 61 63 75 75 6d 5d 20 69 73 20 65 6e 61 62  _vacuum] is enab
34810 6c 65 64 20 66 6f 72 20 61 20 64 61 74 61 62 61  led for a databa
34820 73 65 0a 66 72 65 65 20 70 61 67 65 73 20 6d 61  se.free pages ma
34830 79 20 62 65 20 72 65 63 6c 61 69 6d 65 64 20 61  y be reclaimed a
34840 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20 64 61  fter deleting da
34850 74 61 2c 20 63 61 75 73 69 6e 67 20 74 68 65 20  ta, causing the 
34860 66 69 6c 65 20 74 6f 20 73 68 72 69 6e 6b 2c 0a  file to shrink,.
34870 77 69 74 68 6f 75 74 20 72 65 62 75 69 6c 64 69  without rebuildi
34880 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20 64 61  ng the entire da
34890 74 61 62 61 73 65 20 75 73 69 6e 67 20 56 41 43  tabase using VAC
348a0 55 55 4d 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  UUM.  ^However, 
348b0 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76 61 63 75  using.[auto_vacu
348c0 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20 74 6f 20  um] can lead to 
348d0 65 78 74 72 61 20 64 61 74 61 62 61 73 65 20 66  extra database f
348e0 69 6c 65 20 66 72 61 67 6d 65 6e 74 61 74 69 6f  ile fragmentatio
348f0 6e 2e 20 20 5e 41 6e 64 20 5b 61 75 74 6f 5f 76  n.  ^And [auto_v
34900 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e 6f 74 20  acuum].does not 
34910 63 6f 6d 70 61 63 74 20 70 61 72 74 69 61 6c 6c  compact partiall
34920 79 20 66 69 6c 6c 65 64 20 70 61 67 65 73 20 6f  y filled pages o
34930 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  f the database a
34940 73 20 56 41 43 55 55 4d 20 64 6f 65 73 2e 0a 0a  s VACUUM does...
34950 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23  </p>...<tcl>.###
34960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
349a0 23 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74  ###########.Sect
349b0 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20 42 59 7d  ion {INDEXED BY}
349c0 20 69 6e 64 65 78 65 64 62 79 20 7b 7b 49 4e 44   indexedby {{IND
349d0 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54 20 49 4e  EXED BY} {NOT IN
349e0 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63 6c 3e 0a  DEXED}}..</tcl>.
349f0 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
34a00 42 59 20 70 68 72 61 73 65 20 66 6f 72 63 65 73  BY phrase forces
34a10 20 74 68 65 20 5b 53 51 4c 69 74 65 20 71 75 65   the [SQLite que
34a20 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74 6f 20 75  ry planner] to u
34a30 73 65 20 61 0a 70 61 72 74 69 63 75 6c 61 72 20  se a.particular 
34a40 6e 61 6d 65 64 20 69 6e 64 65 78 20 6f 6e 20 61  named index on a
34a50 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 53 45 4c 45   [DELETE], [SELE
34a60 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41 54 45 5d  CT], or [UPDATE]
34a70 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54 68 65 20   statement..The 
34a80 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
34a90 65 20 69 73 20 61 6e 20 53 51 4c 69 74 65 20 65  e is an SQLite e
34aa0 78 74 65 6e 73 69 6f 6e 20 61 6e 64 0a 69 73 20  xtension and.is 
34ab0 6e 6f 74 20 70 6f 72 74 61 62 6c 65 20 74 6f 20  not portable to 
34ac0 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
34ad0 73 65 20 65 6e 67 69 6e 65 73 2e 3c 2f 70 3e 0a  se engines.</p>.
34ae0 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65  .<tcl>.Recursive
34af0 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 71 75  BubbleDiagram qu
34b00 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61  alified-table-na
34b10 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54  me.</tcl>..<p>^T
34b20 68 65 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  he "INDEXED BY <
34b30 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61 6d  yyterm>index-nam
34b40 65 3c 2f 79 79 74 65 72 6d 3e 22 20 70 68 72 61  e</yyterm>" phra
34b50 73 65 20 73 70 65 63 69 66 69 65 73 20 0a 74 68  se specifies .th
34b60 61 74 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64  at the named ind
34b70 65 78 0a 6d 75 73 74 20 62 65 20 75 73 65 64 20  ex.must be used 
34b80 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 6f 6f 6b  in order to look
34b90 20 75 70 20 76 61 6c 75 65 73 20 6f 6e 20 74 68   up values on th
34ba0 65 20 70 72 65 63 65 64 69 6e 67 20 74 61 62 6c  e preceding tabl
34bb0 65 2e 0a 5e 49 66 20 3c 79 79 74 65 72 6d 3e 69  e..^If <yyterm>i
34bc0 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79 74 65 72  ndex-name</yyter
34bd0 6d 3e 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  m> does not exis
34be0 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65 20 75  t or cannot be u
34bf0 73 65 64 20 0a 66 6f 72 20 74 68 65 20 71 75 65  sed .for the que
34c00 72 79 2c 20 74 68 65 6e 20 74 68 65 20 70 72 65  ry, then the pre
34c10 70 61 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  paration of the 
34c20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 66 61  SQL statement fa
34c30 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e 4f 54 20  ils..^(The "NOT 
34c40 49 4e 44 45 58 45 44 22 20 63 6c 61 75 73 65 20  INDEXED" clause 
34c50 73 70 65 63 69 66 69 65 73 20 74 68 61 74 20 6e  specifies that n
34c60 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c 20 62 65  o index shall be
34c70 20 75 73 65 64 20 77 68 65 6e 0a 61 63 63 65 73   used when.acces
34c80 73 69 6e 67 20 74 68 65 20 70 72 65 63 65 64 69  sing the precedi
34c90 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63 6c 75 64  ng table, includ
34ca0 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 69  ing implied indi
34cb0 63 65 73 20 63 72 65 61 74 65 20 62 79 0a 55 4e  ces create by.UN
34cc0 49 51 55 45 20 61 6e 64 20 50 52 49 4d 41 52 59  IQUE and PRIMARY
34cd0 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 73   KEY constraints
34ce0 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20  .  However, the 
34cf0 5b 72 6f 77 69 64 5d 0a 63 61 6e 20 73 74 69 6c  [rowid].can stil
34d00 6c 20 62 65 20 75 73 65 64 20 74 6f 20 6c 6f 6f  l be used to loo
34d10 6b 20 75 70 20 65 6e 74 72 69 65 73 20 65 76 65  k up entries eve
34d20 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49 4e 44 45  n when "NOT INDE
34d30 58 45 44 22 20 69 73 20 73 70 65 63 69 66 69 65  XED" is specifie
34d40 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 53 6f 6d  d.)^</p>..<p>Som
34d50 65 20 53 51 4c 20 64 61 74 61 62 61 73 65 20 65  e SQL database e
34d60 6e 67 69 6e 65 73 20 70 72 6f 76 69 64 65 20 6e  ngines provide n
34d70 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22 68 69 6e  on-standard "hin
34d80 74 22 20 6d 65 63 68 61 6e 69 73 6d 73 20 77 68  t" mechanisms wh
34d90 69 63 68 0a 63 61 6e 20 62 65 20 75 73 65 64 20  ich.can be used 
34da0 74 6f 20 67 69 76 65 20 74 68 65 20 71 75 65 72  to give the quer
34db0 79 20 6f 70 74 69 6d 69 7a 65 72 20 63 6c 75 65  y optimizer clue
34dc0 73 20 61 62 6f 75 74 20 77 68 61 74 20 69 6e 64  s about what ind
34dd0 69 63 65 73 20 69 74 20 73 68 6f 75 6c 64 0a 75  ices it should.u
34de0 73 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75  se for a particu
34df0 6c 61 72 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  lar statement.  
34e00 54 68 65 20 49 4e 44 45 58 20 42 59 20 63 6c 61  The INDEX BY cla
34e10 75 73 65 20 6f 66 20 53 51 4c 69 74 65 20 69 73  use of SQLite is
34e20 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20 61   .<em>not</em> a
34e30 20 68 69 6e 74 69 6e 67 20 6d 65 63 68 61 6e 69   hinting mechani
34e40 73 6d 20 61 6e 64 20 69 74 20 73 68 6f 75 6c 64  sm and it should
34e50 20 6e 6f 74 20 62 65 20 75 73 65 64 20 61 73 20   not be used as 
34e60 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e 44 45 58  such..^The INDEX
34e70 45 44 20 42 59 20 63 6c 61 75 73 65 20 64 6f 65  ED BY clause doe
34e80 73 20 6e 6f 74 20 67 69 76 65 20 74 68 65 20 6f  s not give the o
34e90 70 74 69 6d 69 7a 65 72 20 68 69 6e 74 73 20 61  ptimizer hints a
34ea0 62 6f 75 74 20 77 68 69 63 68 20 69 6e 64 65 78  bout which index
34eb0 0a 74 6f 20 75 73 65 3b 20 69 74 20 67 69 76 65  .to use; it give
34ec0 73 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  s the optimizer 
34ed0 61 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6f 66  a requirement of
34ee0 20 77 68 69 63 68 20 69 6e 64 65 78 20 74 6f 20   which index to 
34ef0 75 73 65 2e 0a 5e 49 66 20 74 68 65 20 71 75 65  use..^If the que
34f00 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 20  ry optimizer is 
34f10 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 74 68  unable to use th
34f20 65 20 69 6e 64 65 78 20 73 70 65 63 69 66 69 65  e index specifie
34f30 64 20 62 79 20 74 68 65 0a 49 4e 44 45 58 20 42  d by the.INDEX B
34f40 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
34f50 68 65 20 71 75 65 72 79 20 77 69 6c 6c 20 66 61  he query will fa
34f60 69 6c 20 77 69 74 68 20 61 6e 20 65 72 72 6f 72  il with an error
34f70 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 49 4e  .</p>..<p>The IN
34f80 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
34f90 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e 20  is <em>not</em> 
34fa0 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
34fb0 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68 65 20 70   in tuning.the p
34fc0 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66 20 61 20  erformance of a 
34fd0 71 75 65 72 79 2e 20 20 54 68 65 20 69 6e 74 65  query.  The inte
34fe0 6e 74 20 6f 66 20 74 68 65 20 49 4e 44 45 58 45  nt of the INDEXE
34ff0 44 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a 74  D BY clause is.t
35000 6f 20 72 61 69 73 65 20 61 20 72 75 6e 2d 74 69  o raise a run-ti
35010 6d 65 20 65 72 72 6f 72 20 69 66 20 61 20 73 63  me error if a sc
35020 68 65 6d 61 20 63 68 61 6e 67 65 2c 20 73 75 63  hema change, suc
35030 68 20 61 73 20 64 72 6f 70 70 69 6e 67 20 6f 72  h as dropping or
35040 0a 63 72 65 61 74 69 6e 67 20 61 6e 20 69 6e 64  .creating an ind
35050 65 78 2c 20 63 61 75 73 65 73 20 74 68 65 20 71  ex, causes the q
35060 75 65 72 79 20 70 6c 61 6e 20 66 6f 72 20 61 20  uery plan for a 
35070 74 69 6d 65 2d 73 65 6e 73 69 74 69 76 65 20 71  time-sensitive q
35080 75 65 72 79 0a 74 6f 20 63 68 61 6e 67 65 2e 20  uery.to change. 
35090 20 54 68 65 20 49 4e 44 45 58 45 44 20 42 59 20   The INDEXED BY 
350a0 63 6c 61 75 73 65 20 69 73 20 64 65 73 69 67 6e  clause is design
350b0 65 64 20 74 6f 20 68 65 6c 70 20 64 65 74 65 63  ed to help detec
350c0 74 0a 75 6e 64 65 73 69 72 61 62 6c 65 20 71 75  t.undesirable qu
350d0 65 72 79 20 70 6c 61 6e 20 63 68 61 6e 67 65 73  ery plan changes
350e0 20 64 75 72 69 6e 67 20 72 65 67 72 65 73 73 69   during regressi
350f0 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 41 70 70 6c  on testing..Appl
35100 69 63 61 74 69 6f 6e 20 0a 64 65 76 65 6c 6f 70  ication .develop
35110 65 72 73 20 61 72 65 20 61 64 6d 6f 6e 69 73 68  ers are admonish
35120 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c 6c 20 75  ed to omit all u
35130 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20 42 59  se of INDEXED BY
35140 20 64 75 72 69 6e 67 0a 61 70 70 6c 69 63 61 74   during.applicat
35150 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69 6d 70 6c  ion design, impl
35160 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 65 73 74  ementation, test
35170 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69 6e 67 2e  ing, and tuning.
35180 20 20 49 66 0a 49 4e 44 45 58 45 44 20 42 59 20    If.INDEXED BY 
35190 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 61 74  is to be used at
351a0 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75 6c 64 20   all, it should 
351b0 62 65 20 69 6e 73 65 72 74 65 64 20 61 74 20 74  be inserted at t
351c0 68 65 20 76 65 72 79 0a 65 6e 64 20 6f 66 20 74  he very.end of t
351d0 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 70  he development p
351e0 72 6f 63 65 73 73 20 77 68 65 6e 20 22 6c 6f 63  rocess when "loc
351f0 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20 64 65 73  king down" a des
35200 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 65  ign.</p>..<h3>Se
35210 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a 0a 3c 6f  e Also:</h3>..<o
35220 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b 71  l>.<li><p>The [q
35230 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 68 65  uery planner che
35240 63 6b 6c 69 73 74 5d 20 64 65 73 63 72 69 62 65  cklist] describe
35250 73 20 73 74 65 70 73 20 74 68 61 74 20 61 70 70  s steps that app
35260 6c 69 63 61 74 69 6f 6e 0a 64 65 76 65 6c 6f 70  lication.develop
35270 65 72 73 20 73 68 6f 75 6c 64 20 66 6f 6c 6c 6f  ers should follo
35280 77 69 6e 67 20 74 6f 20 68 65 6c 70 20 72 65 73  wing to help res
35290 6f 6c 76 65 20 71 75 65 72 79 20 70 6c 61 6e 6e  olve query plann
352a0 65 72 20 70 72 6f 62 6c 65 6d 73 2e 0a 4e 6f 74  er problems..Not
352b0 69 63 65 20 74 68 65 20 74 68 61 74 20 74 68 65  ice the that the
352c0 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44 20   use of INDEXED 
352d0 42 59 20 69 73 20 61 20 6c 61 73 74 20 72 65 73  BY is a last res
352e0 6f 72 74 2c 20 74 6f 20 62 65 20 75 73 65 64 20  ort, to be used 
352f0 6f 6e 6c 79 0a 77 68 65 6e 20 61 6c 6c 20 6f 74  only.when all ot
35300 68 65 72 20 6d 65 61 73 75 72 65 73 20 66 61 69  her measures fai
35310 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5b  l.</p>..<li><p>[
35320 75 70 6c 75 73 63 6f 6e 74 72 6f 6c 7c 54 68 65  upluscontrol|The
35330 20 75 6e 61 72 79 20 22 2b 22 20 6f 70 65 72 61   unary "+" opera
35340 74 6f 72 5d 0a 63 61 6e 20 62 65 20 75 73 65 64  tor].can be used
35350 20 74 6f 20 64 69 73 71 75 61 6c 69 66 79 20 74   to disqualify t
35360 65 72 6d 73 20 69 6e 20 74 68 65 20 57 48 45 52  erms in the WHER
35370 45 20 63 6c 61 75 73 65 20 66 72 6f 6d 20 75 73  E clause from us
35380 65 20 62 79 20 69 6e 64 69 63 65 73 2e 0a 43 61  e by indices..Ca
35390 72 65 66 75 6c 20 75 73 65 20 6f 66 20 75 6e 61  reful use of una
353a0 72 79 20 2b 20 63 61 6e 20 73 6f 6d 65 74 69 6d  ry + can sometim
353b0 65 73 20 68 65 6c 70 20 70 72 65 76 65 6e 74 20  es help prevent 
353c0 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  the query planne
353d0 72 20 66 72 6f 6d 0a 63 68 6f 6f 73 69 6e 67 20  r from.choosing 
353e0 61 20 70 6f 6f 72 20 69 6e 64 65 78 20 77 69 74  a poor index wit
353f0 68 6f 75 74 20 72 65 73 74 72 69 63 74 69 6e 67  hout restricting
35400 20 69 74 20 74 6f 20 75 73 69 6e 67 20 6f 6e 65   it to using one
35410 20 73 70 65 63 69 66 69 63 20 69 6e 64 65 78 2e   specific index.
35420 0a 43 61 72 65 66 75 6c 20 70 6c 61 63 65 6d 65  .Careful placeme
35430 6e 74 20 6f 66 20 75 6e 61 72 79 20 2b 20 6f 70  nt of unary + op
35440 65 72 61 74 6f 72 73 20 69 73 20 61 20 62 65 74  erators is a bet
35450 74 65 72 20 6d 65 74 68 6f 64 20 66 6f 72 20 63  ter method for c
35460 6f 6e 74 72 6f 6c 6c 69 6e 67 20 0a 77 68 69 63  ontrolling .whic
35470 68 20 69 6e 64 69 63 65 73 20 61 72 65 20 75 73  h indices are us
35480 65 64 20 62 79 20 61 20 71 75 65 72 79 2e 3c 2f  ed by a query.</
35490 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 5b  p>..<li><p>The [
354a0 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
354b0 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20 69 6e 74  tus()] C/C++ int
354c0 65 72 66 61 63 65 20 74 6f 67 65 74 68 65 72 20  erface together 
354d0 77 69 74 68 20 74 68 65 0a 5b 53 51 4c 49 54 45  with the.[SQLITE
354e0 5f 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c 4c  _STMTSTATUS_FULL
354f0 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e 64 20 5b  SCAN_STEP] and [
35500 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
35510 53 5f 53 4f 52 54 5d 20 76 65 72 62 73 0a 63 61  S_SORT] verbs.ca
35520 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 65 74  n be used to det
35530 65 63 74 20 61 74 20 72 75 6e 2d 74 69 6d 65 20  ect at run-time 
35540 77 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61 74  when an SQL stat
35550 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a 6d 61 6b  ement is not.mak
35560 69 6e 67 20 65 66 66 65 63 74 69 76 65 20 75 73  ing effective us
35570 65 20 6f 66 20 69 6e 64 69 63 65 73 2e 20 20 4d  e of indices.  M
35580 61 6e 79 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  any applications
35590 20 6d 61 79 20 70 72 65 66 65 72 20 74 6f 0a 75   may prefer to.u
355a0 73 65 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  se the [sqlite3_
355b0 73 74 6d 74 5f 73 74 61 74 75 73 28 29 5d 20 69  stmt_status()] i
355c0 6e 74 65 72 66 61 63 65 20 74 6f 20 64 65 74 65  nterface to dete
355d0 63 74 20 69 6e 64 65 78 20 6d 69 73 75 73 65 0a  ct index misuse.
355e0 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  rather than the 
355f0 49 4e 44 45 58 45 44 20 42 59 20 70 68 72 61 73  INDEXED BY phras
35600 65 20 64 65 73 63 72 69 62 65 64 20 68 65 72 65  e described here
35610 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 74 63  .</p>.</ol>..<tc
35620 6c 3e 0a 73 65 74 20 6b 65 79 77 6f 72 64 5f 6c  l>.set keyword_l
35630 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a 20 20 20  ist [lsort {.   
35640 41 42 4f 52 54 0a 20 20 20 41 43 54 49 4f 4e 0a  ABORT.   ACTION.
35650 20 20 20 41 44 44 0a 20 20 20 41 46 54 45 52 0a     ADD.   AFTER.
35660 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54 45 52 0a     ALL.   ALTER.
35670 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20 20 41 4e     ANALYZE.   AN
35680 44 0a 20 20 20 41 53 0a 20 20 20 41 53 43 0a 20  D.   AS.   ASC. 
35690 20 20 41 54 54 41 43 48 0a 20 20 20 41 55 54 4f    ATTACH.   AUTO
356a0 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 42 45 46  INCREMENT.   BEF
356b0 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a 20 20 20  ORE.   BEGIN.   
356c0 42 45 54 57 45 45 4e 0a 20 20 20 42 59 0a 20 20  BETWEEN.   BY.  
356d0 20 43 41 53 43 41 44 45 0a 20 20 20 43 41 53 45   CASCADE.   CASE
356e0 0a 20 20 20 43 41 53 54 0a 20 20 20 43 48 45 43  .   CAST.   CHEC
356f0 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a 20 20 20  K.   COLLATE.   
35700 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d 4d 49 54  COLUMN.   COMMIT
35710 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a 20 20 20  .   CONFLICT.   
35720 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20 20 43 52  CONSTRAINT.   CR
35730 45 41 54 45 0a 20 20 20 43 52 4f 53 53 0a 20 20  EATE.   CROSS.  
35740 20 43 55 52 52 45 4e 54 0a 20 20 20 43 55 52 52   CURRENT.   CURR
35750 45 4e 54 5f 44 41 54 45 0a 20 20 20 43 55 52 52  ENT_DATE.   CURR
35760 45 4e 54 5f 54 49 4d 45 0a 20 20 20 43 55 52 52  ENT_TIME.   CURR
35770 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20 20  ENT_TIMESTAMP.  
35780 20 44 41 54 41 42 41 53 45 0a 20 20 20 44 45 46   DATABASE.   DEF
35790 41 55 4c 54 0a 20 20 20 44 45 46 45 52 52 45 44  AULT.   DEFERRED
357a0 0a 20 20 20 44 45 46 45 52 52 41 42 4c 45 0a 20  .   DEFERRABLE. 
357b0 20 20 44 45 4c 45 54 45 0a 20 20 20 44 45 53 43    DELETE.   DESC
357c0 0a 20 20 20 44 45 54 41 43 48 0a 20 20 20 44 49  .   DETACH.   DI
357d0 53 54 49 4e 43 54 0a 20 20 20 44 4f 0a 20 20 20  STINCT.   DO.   
357e0 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20 20 20 45  DROP.   END.   E
357f0 41 43 48 0a 20 20 20 45 4c 53 45 0a 20 20 20 45  ACH.   ELSE.   E
35800 53 43 41 50 45 0a 20 20 20 45 58 43 45 50 54 0a  SCAPE.   EXCEPT.
35810 20 20 20 45 58 43 4c 55 53 49 56 45 0a 20 20 20     EXCLUSIVE.   
35820 45 58 49 53 54 53 0a 20 20 20 45 58 50 4c 41 49  EXISTS.   EXPLAI
35830 4e 0a 20 20 20 46 41 49 4c 0a 20 20 20 46 49 4c  N.   FAIL.   FIL
35840 54 45 52 0a 20 20 20 46 4f 4c 4c 4f 57 49 4e 47  TER.   FOLLOWING
35850 0a 20 20 20 46 4f 52 0a 20 20 20 46 4f 52 45 49  .   FOR.   FOREI
35860 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20 20 46 55  GN.   FROM.   FU
35870 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20 20 20 47 52  LL.   GLOB.   GR
35880 4f 55 50 0a 20 20 20 48 41 56 49 4e 47 0a 20 20  OUP.   HAVING.  
35890 20 49 46 0a 20 20 20 49 47 4e 4f 52 45 0a 20 20   IF.   IGNORE.  
358a0 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 20 49 4e   IMMEDIATE.   IN
358b0 0a 20 20 20 49 4e 44 45 58 0a 20 20 20 49 4e 44  .   INDEX.   IND
358c0 45 58 45 44 0a 20 20 20 49 4e 49 54 49 41 4c 4c  EXED.   INITIALL
358d0 59 0a 20 20 20 49 4e 4e 45 52 0a 20 20 20 49 4e  Y.   INNER.   IN
358e0 53 45 52 54 0a 20 20 20 49 4e 53 54 45 41 44 0a  SERT.   INSTEAD.
358f0 20 20 20 49 4e 54 45 52 53 45 43 54 0a 20 20 20     INTERSECT.   
35900 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20 20 49 53  INTO.   IS.   IS
35910 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a 20 20 20  NULL.   JOIN.   
35920 4b 45 59 0a 20 20 20 4c 45 46 54 0a 20 20 20 4c  KEY.   LEFT.   L
35930 49 4b 45 0a 20 20 20 4c 49 4d 49 54 0a 20 20 20  IKE.   LIMIT.   
35940 4d 41 54 43 48 0a 20 20 20 4e 41 54 55 52 41 4c  MATCH.   NATURAL
35950 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f 54 0a 20 20  .   NO.   NOT.  
35960 20 4e 4f 54 48 49 4e 47 0a 20 20 20 4e 4f 54 4e   NOTHING.   NOTN
35970 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20 20 20 4f  ULL.   NULL.   O
35980 46 0a 20 20 20 4f 46 46 53 45 54 0a 20 20 20 4f  F.   OFFSET.   O
35990 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52 44 45 52  N.   OR.   ORDER
359a0 0a 20 20 20 4f 55 54 45 52 0a 20 20 20 4f 56 45  .   OUTER.   OVE
359b0 52 0a 20 20 20 50 41 52 54 49 54 49 4f 4e 0a 20  R.   PARTITION. 
359c0 20 20 50 4c 41 4e 0a 20 20 20 50 52 41 47 4d 41    PLAN.   PRAGMA
359d0 0a 20 20 20 50 52 45 43 45 44 49 4e 47 0a 20 20  .   PRECEDING.  
359e0 20 50 52 49 4d 41 52 59 0a 20 20 20 51 55 45 52   PRIMARY.   QUER
359f0 59 0a 20 20 20 52 41 49 53 45 0a 20 20 20 52 41  Y.   RAISE.   RA
35a00 4e 47 45 0a 20 20 20 52 45 43 55 52 53 49 56 45  NGE.   RECURSIVE
35a10 0a 20 20 20 52 45 46 45 52 45 4e 43 45 53 0a 20  .   REFERENCES. 
35a20 20 20 52 45 47 45 58 50 0a 20 20 20 52 45 49 4e    REGEXP.   REIN
35a30 44 45 58 0a 20 20 20 52 45 4c 45 41 53 45 0a 20  DEX.   RELEASE. 
35a40 20 20 52 45 4e 41 4d 45 0a 20 20 20 52 45 50 4c    RENAME.   REPL
35a50 41 43 45 0a 20 20 20 52 45 53 54 52 49 43 54 0a  ACE.   RESTRICT.
35a60 20 20 20 52 49 47 48 54 0a 20 20 20 52 4f 4c 4c     RIGHT.   ROLL
35a70 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20 20 20 52  BACK.   ROW.   R
35a80 4f 57 53 0a 20 20 20 53 41 56 45 50 4f 49 4e 54  OWS.   SAVEPOINT
35a90 0a 20 20 20 53 45 4c 45 43 54 0a 20 20 20 53 45  .   SELECT.   SE
35aa0 54 0a 20 20 20 54 41 42 4c 45 0a 20 20 20 54 45  T.   TABLE.   TE
35ab0 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41 52 59 0a  MP.   TEMPORARY.
35ac0 20 20 20 54 48 45 4e 0a 20 20 20 54 4f 0a 20 20     THEN.   TO.  
35ad0 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a 20 20 20   TRANSACTION.   
35ae0 54 52 49 47 47 45 52 0a 20 20 20 55 4e 42 4f 55  TRIGGER.   UNBOU
35af0 4e 44 45 44 0a 20 20 20 55 4e 49 4f 4e 0a 20 20  NDED.   UNION.  
35b00 20 55 4e 49 51 55 45 0a 20 20 20 55 50 44 41 54   UNIQUE.   UPDAT
35b10 45 0a 20 20 20 55 53 49 4e 47 0a 20 20 20 56 41  E.   USING.   VA
35b20 43 55 55 4d 0a 20 20 20 56 41 4c 55 45 53 0a 20  CUUM.   VALUES. 
35b30 20 20 56 49 45 57 0a 20 20 20 56 49 52 54 55 41    VIEW.   VIRTUA
35b40 4c 0a 20 20 20 57 48 45 4e 0a 20 20 20 57 48 45  L.   WHEN.   WHE
35b50 52 45 0a 20 20 20 57 49 4e 44 4f 57 0a 20 20 20  RE.   WINDOW.   
35b60 57 49 54 48 0a 20 20 20 57 49 54 48 4f 55 54 0a  WITH.   WITHOUT.
35b70 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b 3c 44 49  }]..hd_puts {<DI
35b80 56 20 63 6c 61 73 73 3d 22 70 64 66 5f 73 65 63  V class="pdf_sec
35b90 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69 6f 6e 20  tion">}.Section 
35ba0 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f 72 64 73  {SQLite Keywords
35bb0 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b 2a 53 51  } keywords {{*SQ
35bc0 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53 51 4c 20  L keyword} {SQL 
35bd0 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64 5f 70 75  keywords}}.hd_pu
35be0 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c 2f 74 63  ts {</DIV>}.</tc
35bf0 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51 4c 20 73  l>..<p>The SQL s
35c00 74 61 6e 64 61 72 64 20 73 70 65 63 69 66 69 65  tandard specifie
35c10 73 20 61 20 6c 61 72 67 65 20 6e 75 6d 62 65 72  s a large number
35c20 20 6f 66 20 6b 65 79 77 6f 72 64 73 20 77 68 69   of keywords whi
35c30 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65 20 75 73  ch may not.be us
35c40 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65 73 20  ed as the names 
35c50 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e 64 69 63  of tables, indic
35c60 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20 64 61 74  es, columns, dat
35c70 61 62 61 73 65 73 2c 20 75 73 65 72 2d 64 65 66  abases, user-def
35c80 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e 73 2c 20  ined.functions, 
35c90 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76 69 72 74  collations, virt
35ca0 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65  ual table module
35cb0 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20  s, or any other 
35cc0 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e 0a 54 68  named object..Th
35cd0 65 20 6c 69 73 74 20 6f 66 20 6b 65 79 77 6f 72  e list of keywor
35ce0 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67 20 74 68  ds is so long th
35cf0 61 74 20 66 65 77 20 70 65 6f 70 6c 65 20 63 61  at few people ca
35d00 6e 20 72 65 6d 65 6d 62 65 72 20 74 68 65 6d 20  n remember them 
35d10 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74 20 53 51  all..For most SQ
35d20 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20 73 61 66  L code, your saf
35d30 65 73 74 20 62 65 74 20 69 73 20 74 6f 20 6e 65  est bet is to ne
35d40 76 65 72 20 75 73 65 20 61 6e 79 20 45 6e 67 6c  ver use any Engl
35d50 69 73 68 20 6c 61 6e 67 75 61 67 65 0a 77 6f 72  ish language.wor
35d60 64 20 61 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  d as the name of
35d70 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20   a user-defined 
35d80 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  object.</p>..<p>
35d90 49 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 75  If you want to u
35da0 73 65 20 61 20 6b 65 79 77 6f 72 64 20 61 73 20  se a keyword as 
35db0 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e 65 65 64  a name, you need
35dc0 20 74 6f 20 71 75 6f 74 65 20 69 74 2e 20 20 54   to quote it.  T
35dd0 68 65 72 65 0a 61 72 65 20 66 6f 75 72 20 77 61  here.are four wa
35de0 79 73 20 6f 66 20 71 75 6f 74 69 6e 67 20 6b 65  ys of quoting ke
35df0 79 77 6f 72 64 73 20 69 6e 20 53 51 4c 69 74 65  ywords in SQLite
35e00 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62 6c 6f 63  :</p>..<p>.<bloc
35e10 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 3e 0a  kquote>.<table>.
35e20 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e 3d  <tr>.<td valign=
35e30 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79 77 6f 72  "top"><b>'keywor
35e40 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 20 77  d'</b></td><td w
35e50 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74 64 3e 0a  idth="20"></td>.
35e60 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64 20  .<td>^A keyword 
35e70 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f 74 65 73  in single quotes
35e80 20 69 73 20 61 20 73 74 72 69 6e 67 20 6c 69 74   is a string lit
35e90 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74 72 3e 0a  eral.</td></tr>.
35ea0 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
35eb0 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65 79 77 6f  ="top"><b>"keywo
35ec0 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e  rd"</b></td><td>
35ed0 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65  </td>..<td>^A ke
35ee0 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c 65 2d  yword in double-
35ef0 71 75 6f 74 65 73 20 69 73 20 61 6e 20 69 64 65  quotes is an ide
35f00 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e 3c 2f 74  ntifier.</td></t
35f10 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c  r>..<tr>.<td val
35f20 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 26 23 39  ign="top"><b>&#9
35f30 31 3b 6b 65 79 77 6f 72 64 26 23 39 33 3b 3c 2f  1;keyword&#93;</
35f40 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f 74 64 3e  b></td><td></td>
35f50 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f 72 64  ..<td>^A keyword
35f60 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 73 71 75   enclosed in squ
35f70 61 72 65 20 62 72 61 63 6b 65 74 73 20 69 73 20  are brackets is 
35f80 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65 6e  .        an iden
35f90 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69 73  tifier.  This is
35fa0 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53 51   not standard SQ
35fb0 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e 67  L.  This quoting
35fc0 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20 20   mechanism.     
35fd0 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d 53     is used by MS
35fe0 20 41 63 63 65 73 73 20 61 6e 64 20 53 51 4c 20   Access and SQL 
35ff0 53 65 72 76 65 72 20 61 6e 64 20 69 73 20 69 6e  Server and is in
36000 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65  cluded in SQLite
36010 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d   for.        com
36020 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e  patibility.</td>
36030 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20  </tr>..<tr>.<td 
36040 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
36050 26 23 39 36 3b 6b 65 79 77 6f 72 64 26 23 39 36  &#96;keyword&#96
36060 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f  ;</b></td><td></
36070 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77  td>..<td>^A keyw
36080 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ord enclosed in 
36090 67 72 61 76 65 20 61 63 63 65 6e 74 73 20 28 41  grave accents (A
360a0 53 43 49 49 20 63 6f 64 65 20 39 36 29 20 69 73  SCII code 96) is
360b0 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69 64 65   .        an ide
360c0 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73 20 69  ntifier.  This i
360d0 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64 20 53  s not standard S
360e0 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74 69 6e  QL.  This quotin
360f0 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20 20 20  g mechanism.    
36100 20 20 20 20 69 73 20 75 73 65 64 20 62 79 20 4d      is used by M
36110 79 53 51 4c 20 61 6e 64 20 69 73 20 69 6e 63 6c  ySQL and is incl
36120 75 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 66  uded in SQLite f
36130 6f 72 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61  or.        compa
36140 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64 3e 3c 2f  tibility.</td></
36150 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62  tr>.</table>.</b
36160 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f 70 3e 0a  lockquote>.</p>.
36170 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c 69 65 6e  .<p>For resilien
36180 63 65 20 77 68 65 6e 20 63 6f 6e 66 72 6f 6e 74  ce when confront
36190 65 64 20 77 69 74 68 20 68 69 73 74 6f 72 69 63  ed with historic
361a0 61 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  al SQL statement
361b0 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20 73  s, SQLite.will s
361c0 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64 20 74 68  ometimes bend th
361d0 65 20 71 75 6f 74 69 6e 67 20 72 75 6c 65 73 20  e quoting rules 
361e0 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c 75 6c 3e  above:</p>..<ul>
361f0 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20 6b 65  .<li><p>^If a ke
36200 79 77 6f 72 64 20 69 6e 20 73 69 6e 67 6c 65 0a  yword in single.
36210 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62 3e 27  quotes (ex: <b>'
36220 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c 62 3e 27  key'</b> or <b>'
36230 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73 20 75 73  glob'</b>) is us
36240 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78 74 20  ed in a context 
36250 77 68 65 72 65 0a 61 6e 20 69 64 65 6e 74 69 66  where.an identif
36260 69 65 72 20 69 73 20 61 6c 6c 6f 77 65 64 20 62  ier is allowed b
36270 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69 6e  ut where a strin
36280 67 20 6c 69 74 65 72 61 6c 20 69 73 20 6e 6f 74  g literal is not
36290 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 0a 74   allowed, then.t
362a0 68 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65  he token is unde
362b0 72 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 6e 20  rstood to be an 
362c0 69 64 65 6e 74 69 66 69 65 72 20 69 6e 73 74 65  identifier inste
362d0 61 64 20 6f 66 20 61 20 73 74 72 69 6e 67 20 6c  ad of a string l
362e0 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c 2f 6c 69  iteral..</p></li
362f0 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61 20  >..<li><p>^If a 
36300 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62 6c  keyword in doubl
36310 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c 62  e.quotes (ex: <b
36320 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72 20 3c 62  >"key"</b> or <b
36330 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20 69 73 20  >"glob"</b>) is 
36340 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65 78  used in a contex
36350 74 20 77 68 65 72 65 0a 69 74 20 63 61 6e 6e 6f  t where.it canno
36360 74 20 62 65 20 72 65 73 6f 6c 76 65 64 20 74 6f  t be resolved to
36370 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 62   an identifier b
36380 75 74 20 77 68 65 72 65 20 61 20 73 74 72 69 6e  ut where a strin
36390 67 20 6c 69 74 65 72 61 6c 0a 69 73 20 61 6c 6c  g literal.is all
363a0 6f 77 65 64 2c 20 74 68 65 6e 20 74 68 65 20 74  owed, then the t
363b0 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72 73 74 6f  oken is understo
363c0 6f 64 20 74 6f 20 62 65 20 61 20 73 74 72 69 6e  od to be a strin
363d0 67 20 6c 69 74 65 72 61 6c 20 69 6e 73 74 65 61  g literal instea
363e0 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74 69 66 69  d.of an identifi
363f0 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75  er.</p></li>.</u
36400 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61 6d 6d 65  l>..<p>Programme
36410 72 73 20 61 72 65 20 63 61 75 74 69 6f 6e 65 64  rs are cautioned
36420 20 6e 6f 74 20 74 6f 20 75 73 65 20 74 68 65 20   not to use the 
36430 74 77 6f 20 65 78 63 65 70 74 69 6f 6e 73 20 64  two exceptions d
36440 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65 20  escribed in.the 
36450 70 72 65 76 69 6f 75 73 20 62 75 6c 6c 65 74 73  previous bullets
36460 2e 20 20 57 65 20 65 6d 70 68 61 73 69 7a 65 20  .  We emphasize 
36470 74 68 61 74 20 74 68 65 79 20 65 78 69 73 74 20  that they exist 
36480 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20 6f 6c 64  only so that old
36490 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d 65 64 20  .and ill-formed 
364a0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 77  SQL statements w
364b0 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65 63 74 6c  ill run correctl
364c0 79 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69  y.  Future versi
364d0 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65 20 6d 69  ons of.SQLite mi
364e0 67 68 74 20 72 61 69 73 65 20 65 72 72 6f 72 73  ght raise errors
364f0 20 69 6e 73 74 65 61 64 20 6f 66 20 61 63 63 65   instead of acce
36500 70 74 69 6e 67 20 74 68 65 20 6d 61 6c 66 6f 72  pting the malfor
36510 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74 73 20 63  med.statements c
36520 6f 76 65 72 65 64 20 62 79 20 74 68 65 20 65 78  overed by the ex
36530 63 65 70 74 69 6f 6e 73 20 61 62 6f 76 65 2e 3c  ceptions above.<
36540 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20  /p>..<p>.SQLite 
36550 61 64 64 73 20 6e 65 77 20 6b 65 79 77 6f 72 64  adds new keyword
36560 73 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74  s from time to t
36570 69 6d 65 20 77 68 65 6e 20 69 74 20 74 61 6b 65  ime when it take
36580 73 20 6f 6e 20 6e 65 77 20 66 65 61 74 75 72 65  s on new feature
36590 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76 65 6e 74  s..So to prevent
365a0 20 79 6f 75 72 20 63 6f 64 65 20 66 72 6f 6d 20   your code from 
365b0 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20 62 79 20  being broken by 
365c0 66 75 74 75 72 65 20 65 6e 68 61 6e 63 65 6d 65  future enhanceme
365d0 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75 6c 64 0a  nts, you should.
365e0 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74 65 20 61  normally quote a
365f0 6e 79 20 69 64 65 6e 74 69 66 69 65 72 20 74 68  ny identifier th
36600 61 74 20 69 73 20 61 6e 20 45 6e 67 6c 69 73 68  at is an English
36610 20 6c 61 6e 67 75 61 67 65 20 77 6f 72 64 2c 20   language word, 
36620 65 76 65 6e 20 69 66 0a 79 6f 75 20 64 6f 20 6e  even if.you do n
36630 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c 2f 70 3e  ot have to..</p>
36640 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73 74 20 62  ..<p>.The list b
36650 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c 6c 20 70  elow shows all p
36660 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f 72 64 73  ossible keywords
36670 20 75 73 65 64 20 62 79 20 61 6e 79 20 62 75 69   used by any bui
36680 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20 72 65 67  ld of.SQLite reg
36690 61 72 64 6c 65 73 73 20 6f 66 20 5b 63 6f 6d 70  ardless of [comp
366a0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
366b0 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61 73 6f 6e  ].  .Most reason
366c0 61 62 6c 65 20 63 6f 6e 66 69 67 75 72 61 74 69  able configurati
366d0 6f 6e 73 20 75 73 65 20 6d 6f 73 74 20 6f 72 20  ons use most or 
366e0 61 6c 6c 20 6f 66 20 74 68 65 73 65 20 6b 65 79  all of these key
366f0 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f 6d 65 20  words,.but some 
36700 6b 65 79 77 6f 72 64 73 20 6d 61 79 20 62 65 20  keywords may be 
36710 6f 6d 69 74 74 65 64 20 77 68 65 6e 20 53 51 4c  omitted when SQL
36720 20 6c 61 6e 67 75 61 67 65 20 66 65 61 74 75 72   language featur
36730 65 73 20 61 72 65 0a 64 69 73 61 62 6c 65 64 2e  es are.disabled.
36740 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61  .Applications ca
36750 6e 20 75 73 65 20 74 68 65 0a 5b 73 71 6c 69 74  n use the.[sqlit
36760 65 33 5f 6b 65 79 77 6f 72 64 5f 63 6f 75 6e 74  e3_keyword_count
36770 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33 5f 6b 65  ()], [sqlite3_ke
36780 79 77 6f 72 64 5f 6e 61 6d 65 28 29 5d 2c 20 61  yword_name()], a
36790 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 6b 65 79 77  nd.[sqlite3_keyw
367a0 6f 72 64 5f 63 68 65 63 6b 28 29 5d 20 69 6e 74  ord_check()] int
367b0 65 72 66 61 63 65 73 20 74 6f 20 64 65 74 65 72  erfaces to deter
367c0 6d 69 6e 65 20 74 68 65 20 6b 65 79 77 6f 72 64  mine the keyword
367d0 73 0a 72 65 63 6f 67 6e 69 7a 65 64 20 62 79 20  s.recognized by 
367e0 53 51 4c 69 74 65 20 61 74 20 72 75 6e 2d 74 69  SQLite at run-ti
367f0 6d 65 2e 0a 5e 28 52 65 67 61 72 64 6c 65 73 73  me..^(Regardless
36800 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d   of the compile-
36810 74 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69  time configurati
36820 6f 6e 2c 20 61 6e 79 20 69 64 65 6e 74 69 66 69  on, any identifi
36830 65 72 20 74 68 61 74 20 69 73 20 6e 6f 74 20 6f  er that is not o
36840 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n.the following 
36850 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20 5b 6c 6c  <tcl>hd_puts [ll
36860 65 6e 67 74 68 20 24 6b 65 79 77 6f 72 64 5f 6c  ength $keyword_l
36870 69 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c 65 6d 65  ist]</tcl> eleme
36880 6e 74 0a 6c 69 73 74 20 69 73 20 6e 6f 74 20 61  nt.list is not a
36890 20 6b 65 79 77 6f 72 64 20 74 6f 20 74 68 65 20   keyword to the 
368a0 53 51 4c 20 70 61 72 73 65 72 20 69 6e 20 53 51  SQL parser in SQ
368b0 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  Lite:.</p>..<ol>
368c0 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c 78 20 7b 7d  .<tcl>.set lx {}
368d0 0a 66 6f 72 65 61 63 68 20 77 6f 72 64 20 5b 6c  .foreach word [l
368e0 73 6f 72 74 20 24 6b 65 79 77 6f 72 64 5f 6c 69  sort $keyword_li
368f0 73 74 5d 20 7b 0a 20 20 68 64 5f 70 75 74 73 6e  st] {.  hd_putsn
36900 6c 20 22 3c 6c 69 3e 24 77 6f 72 64 3c 2f 6c 69  l "<li>$word</li
36910 3e 22 0a 7d 0a 68 64 5f 70 75 74 73 6e 6c 20 22  >".}.hd_putsnl "
36920 3c 2f 6f 6c 3e 29 5e 22 0a 3c 2f 74 63 6c 3e 0a  </ol>)^".</tcl>.