Documentation Source Text

Hex Artifact Content
Login

Artifact c3aa99a6e37a690415f2610a7b30e45c28b9d2c1b12807538976965a36eec517:


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 0a 20 20 5e 49 66 20 74 68 65 20 5b 73  or..  ^If the [s
1a7a0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
1a7b0 6e 63 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  nction()] interf
1a7c0 61 63 65 20 69 73 20 75 73 65 64 20 74 6f 0a 20  ace is used to. 
1a7d0 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 67 6c   override the gl
1a7e0 6f 62 28 58 2c 59 29 20 66 75 6e 63 74 69 6f 6e  ob(X,Y) function
1a7f0 20 77 69 74 68 20 61 6e 20 61 6c 74 65 72 6e 61   with an alterna
1a800 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tive implementat
1a810 69 6f 6e 20 74 68 65 6e 0a 20 20 74 68 65 20 5b  ion then.  the [
1a820 47 4c 4f 42 5d 20 6f 70 65 72 61 74 6f 72 20 77  GLOB] operator w
1a830 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20 61  ill invoke the a
1a840 6c 74 65 72 6e 61 74 69 76 65 20 69 6d 70 6c 65  lternative imple
1a850 6d 65 6e 74 61 74 69 6f 6e 2e 0a 7d 0a 0a 66 75  mentation..}..fu
1a860 6e 63 64 65 66 20 7b 69 66 6e 75 6c 6c 28 58 2c  ncdef {ifnull(X,
1a870 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1a880 69 66 6e 75 6c 6c 28 29 20 66 75 6e 63 74 69 6f  ifnull() functio
1a890 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79  n returns a copy
1a8a0 20 6f 66 20 69 74 73 20 66 69 72 73 74 20 6e 6f   of its first no
1a8b0 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2c  n-NULL argument,
1a8c0 20 6f 72 0a 20 20 4e 55 4c 4c 20 69 66 20 62 6f   or.  NULL if bo
1a8d0 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  th arguments are
1a8e0 20 4e 55 4c 4c 2e 20 20 5e 49 66 6e 75 6c 6c 28   NULL.  ^Ifnull(
1a8f0 29 20 6d 75 73 74 20 68 61 76 65 20 65 78 61 63  ) must have exac
1a900 74 6c 79 20 32 20 61 72 67 75 6d 65 6e 74 73 2e  tly 2 arguments.
1a910 0a 20 20 5e 54 68 65 20 69 66 6e 75 6c 6c 28 29  .  ^The ifnull()
1a920 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75   function is equ
1a930 69 76 61 6c 65 6e 74 20 74 6f 20 5b 63 6f 61 6c  ivalent to [coal
1a940 65 73 63 65 28 29 5d 20 77 69 74 68 20 74 77 6f  esce()] with two
1a950 20 61 72 67 75 6d 65 6e 74 73 2e 0a 7d 0a 0a 66   arguments..}..f
1a960 75 6e 63 64 65 66 20 7b 69 6e 73 74 72 28 58 2c  uncdef {instr(X,
1a970 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20  Y)} {} {.  ^The 
1a980 69 6e 73 74 72 28 58 2c 59 29 20 66 75 6e 63 74  instr(X,Y) funct
1a990 69 6f 6e 20 66 69 6e 64 73 20 74 68 65 20 66 69  ion finds the fi
1a9a0 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65 20 6f  rst occurrence o
1a9b0 66 20 73 74 72 69 6e 67 20 59 20 77 69 74 68 69  f string Y withi
1a9c0 6e 20 0a 20 20 73 74 72 69 6e 67 20 58 20 61 6e  n .  string X an
1a9d0 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75  d returns the nu
1a9e0 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 63 68  mber of prior ch
1a9f0 61 72 61 63 74 65 72 73 20 70 6c 75 73 20 31 2c  aracters plus 1,
1aa00 20 6f 72 20 30 20 69 66 0a 20 20 59 20 69 73 20   or 0 if.  Y is 
1aa10 6e 6f 77 68 65 72 65 20 66 6f 75 6e 64 20 77 69  nowhere found wi
1aa20 74 68 69 6e 20 58 2e 0a 20 20 5e 4f 72 2c 20 69  thin X..  ^Or, i
1aa30 66 20 58 20 61 6e 64 20 59 20 61 72 65 20 62 6f  f X and Y are bo
1aa40 74 68 20 42 4c 4f 42 73 2c 20 74 68 65 6e 20 69  th BLOBs, then i
1aa50 6e 73 74 72 28 58 2c 59 29 20 72 65 74 75 72 6e  nstr(X,Y) return
1aa60 73 20 6f 6e 65 0a 20 20 6d 6f 72 65 20 74 68 61  s one.  more tha
1aa70 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 62 79 74  n the number byt
1aa80 65 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  es prior to the 
1aa90 66 69 72 73 74 20 6f 63 63 75 72 72 65 6e 63 65  first occurrence
1aaa0 20 6f 66 20 59 2c 20 6f 72 20 30 20 69 66 0a 20   of Y, or 0 if. 
1aab0 20 59 20 64 6f 65 73 20 6e 6f 74 20 6f 63 63 75   Y does not occu
1aac0 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68 69  r anywhere withi
1aad0 6e 20 58 2e 0a 20 20 5e 49 66 20 62 6f 74 68 20  n X..  ^If both 
1aae0 61 72 67 75 6d 65 6e 74 73 20 58 20 61 6e 64 20  arguments X and 
1aaf0 59 20 74 6f 20 69 6e 73 74 72 28 58 2c 59 29 20  Y to instr(X,Y) 
1ab00 61 72 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 6e 64  are non-NULL and
1ab10 20 61 72 65 20 6e 6f 74 20 42 4c 4f 42 73 0a 20   are not BLOBs. 
1ab20 20 74 68 65 6e 20 62 6f 74 68 20 61 72 65 20 69   then both are i
1ab30 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 73 74  nterpreted as st
1ab40 72 69 6e 67 73 2e 0a 20 20 5e 49 66 20 65 69 74  rings..  ^If eit
1ab50 68 65 72 20 58 20 6f 72 20 59 20 61 72 65 20 4e  her X or Y are N
1ab60 55 4c 4c 20 69 6e 20 69 6e 73 74 72 28 58 2c 59  ULL in instr(X,Y
1ab70 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
1ab80 74 20 69 73 20 4e 55 4c 4c 2e 0a 7d 0a 0a 66 75  t is NULL..}..fu
1ab90 6e 63 64 65 66 20 7b 68 65 78 28 58 29 7d 20 7b  ncdef {hex(X)} {
1aba0 7d 20 7b 0a 20 20 5e 54 68 65 20 68 65 78 28 29  } {.  ^The hex()
1abb0 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 65 72 70   function interp
1abc0 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e  rets its argumen
1abd0 74 20 61 73 20 61 20 42 4c 4f 42 20 61 6e 64 20  t as a BLOB and 
1abe0 72 65 74 75 72 6e 73 0a 20 20 61 20 73 74 72 69  returns.  a stri
1abf0 6e 67 20 77 68 69 63 68 20 69 73 20 74 68 65 20  ng which is the 
1ac00 75 70 70 65 72 2d 63 61 73 65 20 68 65 78 61 64  upper-case hexad
1ac10 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67  ecimal rendering
1ac20 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   of the content 
1ac30 6f 66 0a 20 20 74 68 61 74 20 62 6c 6f 62 2e 0a  of.  that blob..
1ac40 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 61 73 74  }..funcdef {last
1ac50 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 7d  _insert_rowid()}
1ac60 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 61 73   {} {.  ^The las
1ac70 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1ac80 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1ac90 73 20 74 68 65 20 5b 52 4f 57 49 44 5d 0a 20 20  s the [ROWID].  
1aca0 6f 66 20 74 68 65 20 6c 61 73 74 20 72 6f 77 20  of the last row 
1acb0 69 6e 73 65 72 74 20 66 72 6f 6d 20 74 68 65 20  insert from the 
1acc0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
1acd0 69 6f 6e 20 77 68 69 63 68 20 69 6e 76 6f 6b 65  ion which invoke
1ace0 64 20 74 68 65 0a 20 20 66 75 6e 63 74 69 6f 6e  d the.  function
1acf0 2e 0a 20 20 5e 54 68 65 20 6c 61 73 74 5f 69 6e  ..  ^The last_in
1ad00 73 65 72 74 5f 72 6f 77 69 64 28 29 20 53 51 4c  sert_rowid() SQL
1ad10 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 77   function is a w
1ad20 72 61 70 70 65 72 20 61 72 6f 75 6e 64 20 74 68  rapper around th
1ad30 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f 6c 61 73  e.  [sqlite3_las
1ad40 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
1ad50 5d 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63  ] C/C++ interfac
1ad60 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 7d 0a 0a 66  e function..}..f
1ad70 75 6e 63 64 65 66 20 7b 6c 65 6e 67 74 68 28 58  uncdef {length(X
1ad80 29 7d 20 7b 7d 20 7b 0a 20 20 5e 46 6f 72 20 61  )} {} {.  ^For a
1ad90 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 58 2c   string value X,
1ada0 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66   the length(X) f
1adb0 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1adc0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 0a 20  the number of . 
1add0 20 63 68 61 72 61 63 74 65 72 73 20 28 6e 6f 74   characters (not
1ade0 20 62 79 74 65 73 29 20 69 6e 20 58 20 70 72 69   bytes) in X pri
1adf0 6f 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  or to the first 
1ae00 4e 55 4c 20 63 68 61 72 61 63 74 65 72 2e 0a 20  NUL character.. 
1ae10 20 53 69 6e 63 65 20 53 51 4c 69 74 65 20 73 74   Since SQLite st
1ae20 72 69 6e 67 73 20 64 6f 20 6e 6f 74 20 6e 6f 72  rings do not nor
1ae30 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 4e 55  mally contain NU
1ae40 4c 20 63 68 61 72 61 63 74 65 72 73 2c 20 74 68  L characters, th
1ae50 65 20 6c 65 6e 67 74 68 28 58 29 0a 20 20 66 75  e length(X).  fu
1ae60 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 75 73 75 61  nction will usua
1ae70 6c 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 74  lly return the t
1ae80 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63  otal number of c
1ae90 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 65  haracters in the
1aea0 20 73 74 72 69 6e 67 20 58 2e 0a 20 20 5e 46 6f   string X..  ^Fo
1aeb0 72 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 58  r a blob value X
1aec0 2c 20 6c 65 6e 67 74 68 28 58 29 20 72 65 74 75  , length(X) retu
1aed0 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
1aee0 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 62  f bytes in the b
1aef0 6c 6f 62 2e 0a 20 20 5e 49 66 20 58 20 69 73 20  lob..  ^If X is 
1af00 4e 55 4c 4c 20 74 68 65 6e 20 6c 65 6e 67 74 68  NULL then length
1af10 28 58 29 20 69 73 20 4e 55 4c 4c 2e 0a 20 20 5e  (X) is NULL..  ^
1af20 49 66 20 58 20 69 73 20 6e 75 6d 65 72 69 63 20  If X is numeric 
1af30 74 68 65 6e 20 6c 65 6e 67 74 68 28 58 29 20 72  then length(X) r
1af40 65 74 75 72 6e 73 20 74 68 65 20 6c 65 6e 67 74  eturns the lengt
1af50 68 20 6f 66 20 61 20 73 74 72 69 6e 67 0a 20 20  h of a string.  
1af60 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
1af70 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
1af80 7b 6c 69 6b 65 28 58 2c 59 29 20 6c 69 6b 65 28  {like(X,Y) like(
1af90 58 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e  X,Y,Z)} {} {.  ^
1afa0 54 68 65 20 6c 69 6b 65 28 29 20 66 75 6e 63 74  The like() funct
1afb0 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 69  ion is used to i
1afc0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 20 20 22  mplement the.  "
1afd0 3c 62 3e 59 20 4c 49 4b 45 20 58 20 26 23 39 31  <b>Y LIKE X &#91
1afe0 3b 45 53 43 41 50 45 20 5a 26 23 39 33 3b 3c 2f  ;ESCAPE Z&#93;</
1aff0 62 3e 22 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  b>" expression. 
1b000 0a 20 20 5e 49 66 20 74 68 65 20 6f 70 74 69 6f  .  ^If the optio
1b010 6e 61 6c 20 45 53 43 41 50 45 20 63 6c 61 75 73  nal ESCAPE claus
1b020 65 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68  e is present, th
1b030 65 6e 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20  en the.  like() 
1b040 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 76 6f  function is invo
1b050 6b 65 64 20 77 69 74 68 20 74 68 72 65 65 20 61  ked with three a
1b060 72 67 75 6d 65 6e 74 73 2e 20 20 5e 4f 74 68 65  rguments.  ^Othe
1b070 72 77 69 73 65 2c 20 69 74 20 69 73 0a 20 20 69  rwise, it is.  i
1b080 6e 76 6f 6b 65 64 20 77 69 74 68 20 74 77 6f 20  nvoked with two 
1b090 61 72 67 75 6d 65 6e 74 73 20 6f 6e 6c 79 2e 20  arguments only. 
1b0a0 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 58 20  Note that the X 
1b0b0 61 6e 64 20 59 20 70 61 72 61 6d 65 74 65 72 73  and Y parameters
1b0c0 20 61 72 65 0a 20 20 72 65 76 65 72 73 65 64 20   are.  reversed 
1b0d0 69 6e 20 74 68 65 20 6c 69 6b 65 28 29 20 66 75  in the like() fu
1b0e0 6e 63 74 69 6f 6e 20 72 65 6c 61 74 69 76 65 20  nction relative 
1b0f0 74 6f 20 74 68 65 20 69 6e 66 69 78 20 5b 4c 49  to the infix [LI
1b100 4b 45 5d 20 6f 70 65 72 61 74 6f 72 2e 0a 20 20  KE] operator..  
1b110 5e 54 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72  ^The [sqlite3_cr
1b120 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 29 5d  eate_function()]
1b130 20 69 6e 74 65 72 66 61 63 65 20 63 61 6e 20 62   interface can b
1b140 65 20 75 73 65 64 20 74 6f 20 6f 76 65 72 72 69  e used to overri
1b150 64 65 20 74 68 65 0a 20 20 6c 69 6b 65 28 29 20  de the.  like() 
1b160 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74 68 65  function and the
1b170 72 65 62 79 20 63 68 61 6e 67 65 20 74 68 65 20  reby change the 
1b180 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
1b190 0a 20 20 5b 4c 49 4b 45 5d 20 6f 70 65 72 61 74  .  [LIKE] operat
1b1a0 6f 72 2e 20 20 57 68 65 6e 20 6f 76 65 72 72 69  or.  When overri
1b1b0 64 69 6e 67 20 74 68 65 20 6c 69 6b 65 28 29 20  ding the like() 
1b1c0 66 75 6e 63 74 69 6f 6e 2c 20 69 74 20 6d 61 79  function, it may
1b1d0 20 62 65 20 69 6d 70 6f 72 74 61 6e 74 0a 20 20   be important.  
1b1e0 74 6f 20 6f 76 65 72 72 69 64 65 20 62 6f 74 68  to override both
1b1f0 20 74 68 65 20 74 77 6f 20 61 6e 64 20 74 68 72   the two and thr
1b200 65 65 20 61 72 67 75 6d 65 6e 74 20 76 65 72 73  ee argument vers
1b210 69 6f 6e 73 20 6f 66 20 74 68 65 20 6c 69 6b 65  ions of the like
1b220 28 29 20 0a 20 20 66 75 6e 63 74 69 6f 6e 2e 20  () .  function. 
1b230 4f 74 68 65 72 77 69 73 65 2c 20 64 69 66 66 65  Otherwise, diffe
1b240 72 65 6e 74 20 63 6f 64 65 20 6d 61 79 20 62 65  rent code may be
1b250 20 63 61 6c 6c 65 64 20 74 6f 20 69 6d 70 6c 65   called to imple
1b260 6d 65 6e 74 20 74 68 65 0a 20 20 5b 4c 49 4b 45  ment the.  [LIKE
1b270 5d 20 6f 70 65 72 61 74 6f 72 20 64 65 70 65 6e  ] operator depen
1b280 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20  ding on whether 
1b290 6f 72 20 6e 6f 74 20 61 6e 20 45 53 43 41 50 45  or not an ESCAPE
1b2a0 20 63 6c 61 75 73 65 20 77 61 73 20 0a 20 20 73   clause was .  s
1b2b0 70 65 63 69 66 69 65 64 2e 0a 7d 0a 0a 0a 66 75  pecified..}...fu
1b2c0 6e 63 64 65 66 20 7b 6c 69 6b 65 6c 69 68 6f 6f  ncdef {likelihoo
1b2d0 64 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  d(X,Y)} {} {.  ^
1b2e0 54 68 65 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58  The likelihood(X
1b2f0 2c 59 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  ,Y) function ret
1b300 75 72 6e 73 20 61 72 67 75 6d 65 6e 74 20 58 20  urns argument X 
1b310 75 6e 63 68 61 6e 67 65 64 2e 0a 20 20 5e 28 54  unchanged..  ^(T
1b320 68 65 20 76 61 6c 75 65 20 59 20 69 6e 20 6c 69  he value Y in li
1b330 6b 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 6d 75  kelihood(X,Y) mu
1b340 73 74 20 62 65 20 61 20 66 6c 6f 61 74 69 6e 67  st be a floating
1b350 20 70 6f 69 6e 74 20 63 6f 6e 73 74 61 6e 74 0a   point constant.
1b360 20 20 62 65 74 77 65 65 6e 20 30 2e 30 20 61 6e    between 0.0 an
1b370 64 20 31 2e 30 2c 20 69 6e 63 6c 75 73 69 76 65  d 1.0, inclusive
1b380 2e 29 5e 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c  .)^.  ^The likel
1b390 69 68 6f 6f 64 28 58 29 20 66 75 6e 63 74 69 6f  ihood(X) functio
1b3a0 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 20 74 68 61  n is a no-op tha
1b3b0 74 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  t the code gener
1b3c0 61 74 6f 72 0a 20 20 6f 70 74 69 6d 69 7a 65 73  ator.  optimizes
1b3d0 20 61 77 61 79 20 73 6f 20 74 68 61 74 20 69 74   away so that it
1b3e0 20 63 6f 6e 73 75 6d 65 73 20 6e 6f 20 43 50 55   consumes no CPU
1b3f0 20 63 79 63 6c 65 73 20 64 75 72 69 6e 67 20 72   cycles during r
1b400 75 6e 2d 74 69 6d 65 0a 20 20 28 74 68 61 74 20  un-time.  (that 
1b410 69 73 2c 20 64 75 72 69 6e 67 20 63 61 6c 6c 73  is, during calls
1b420 20 74 6f 20 5b 73 71 6c 69 74 65 33 5f 73 74 65   to [sqlite3_ste
1b430 70 28 29 5d 29 2e 0a 20 20 5e 54 68 65 20 70 75  p()])..  ^The pu
1b440 72 70 6f 73 65 20 6f 66 20 74 68 65 20 6c 69 6b  rpose of the lik
1b450 65 6c 69 68 6f 6f 64 28 58 2c 59 29 20 66 75 6e  elihood(X,Y) fun
1b460 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76  ction is to prov
1b470 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20  ide a hint.  to 
1b480 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  the query planne
1b490 72 20 74 68 61 74 20 74 68 65 20 61 72 67 75 6d  r that the argum
1b4a0 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65  ent X is a boole
1b4b0 61 6e 20 74 68 61 74 20 69 73 0a 20 20 74 72 75  an that is.  tru
1b4c0 65 20 77 69 74 68 20 61 20 70 72 6f 62 61 62 69  e with a probabi
1b4d0 6c 69 74 79 20 6f 66 20 61 70 70 72 6f 78 69 6d  lity of approxim
1b4e0 61 74 65 6c 79 20 59 2e 0a 20 20 5e 28 54 68 65  ately Y..  ^(The
1b4f0 20 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 20 66   [unlikely(X)] f
1b500 75 6e 63 74 69 6f 6e 20 69 73 20 73 68 6f 72 74  unction is short
1b510 2d 68 61 6e 64 20 66 6f 72 20 6c 69 6b 65 6c 69  -hand for likeli
1b520 68 6f 6f 64 28 58 2c 30 2e 30 36 32 35 29 2e 29  hood(X,0.0625).)
1b530 5e 0a 20 20 5e 28 54 68 65 20 5b 6c 69 6b 65 6c  ^.  ^(The [likel
1b540 79 28 58 29 5d 20 66 75 6e 63 74 69 6f 6e 20 69  y(X)] function i
1b550 73 20 73 68 6f 72 74 2d 68 61 6e 64 20 66 6f 72  s short-hand for
1b560 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 58 2c 30 2e   likelihood(X,0.
1b570 39 33 37 35 29 2e 29 5e 0a 7d 0a 0a 66 75 6e 63  9375).)^.}..func
1b580 64 65 66 20 7b 6c 69 6b 65 6c 79 28 58 29 7d 20  def {likely(X)} 
1b590 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 69 6b 65  {} {.  ^The like
1b5a0 6c 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72  ly(X) function r
1b5b0 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
1b5c0 65 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e  ent X unchanged.
1b5d0 0a 20 20 5e 54 68 65 20 6c 69 6b 65 6c 79 28 58  .  ^The likely(X
1b5e0 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20  ) function is a 
1b5f0 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20 63  no-op that the c
1b600 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20 20  ode generator.  
1b610 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20 73  optimizes away s
1b620 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75 6d  o that it consum
1b630 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65 73  es no CPU cycles
1b640 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20 28   at.  run-time (
1b650 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67 20  that is, during 
1b660 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74 65  calls to [sqlite
1b670 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e 54  3_step()])..  ^T
1b680 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68  he purpose of th
1b690 65 20 6c 69 6b 65 6c 79 28 58 29 20 66 75 6e 63  e likely(X) func
1b6a0 74 69 6f 6e 20 69 73 20 74 6f 20 70 72 6f 76 69  tion is to provi
1b6b0 64 65 20 61 20 68 69 6e 74 0a 20 20 74 6f 20 74  de a hint.  to t
1b6c0 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
1b6d0 20 74 68 61 74 20 74 68 65 20 61 72 67 75 6d 65   that the argume
1b6e0 6e 74 20 58 20 69 73 20 61 20 62 6f 6f 6c 65 61  nt X is a boolea
1b6f0 6e 20 76 61 6c 75 65 0a 20 20 74 68 61 74 20 69  n value.  that i
1b700 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20  s usually true. 
1b710 5e 28 54 68 65 20 6c 69 6b 65 6c 79 28 58 29 20  ^(The likely(X) 
1b720 66 75 6e 63 74 69 6f 6e 20 69 73 20 65 71 75 69  function is equi
1b730 76 61 6c 65 6e 74 0a 20 20 74 6f 20 5b 6c 69 6b  valent.  to [lik
1b740 65 6c 69 68 6f 6f 64 5d 28 58 2c 30 2e 39 33 37  elihood](X,0.937
1b750 35 29 2e 29 5e 20 53 65 65 20 61 6c 73 6f 3a 20  5).)^ See also: 
1b760 5b 75 6e 6c 69 6b 65 6c 79 28 58 29 5d 2e 0a 7d  [unlikely(X)]..}
1b770 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 61 64 5f  ..funcdef {load_
1b780 65 78 74 65 6e 73 69 6f 6e 28 58 29 20 6c 6f 61  extension(X) loa
1b790 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59 29  d_extension(X,Y)
1b7a0 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 6c 6f  } {} {.  ^The lo
1b7b0 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 58 2c 59  ad_extension(X,Y
1b7c0 29 20 66 75 6e 63 74 69 6f 6e 20 6c 6f 61 64 73  ) function loads
1b7d0 20 5b 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69   [SQLite extensi
1b7e0 6f 6e 73 5d 20 6f 75 74 20 6f 66 20 74 68 65 20  ons] out of the 
1b7f0 73 68 61 72 65 64 0a 20 20 6c 69 62 72 61 72 79  shared.  library
1b800 20 66 69 6c 65 20 6e 61 6d 65 64 20 58 20 75 73   file named X us
1b810 69 6e 67 20 74 68 65 20 65 6e 74 72 79 20 70 6f  ing the entry po
1b820 69 6e 74 20 59 2e 20 20 5e 54 68 65 20 72 65 73  int Y.  ^The res
1b830 75 6c 74 20 6f 66 20 6c 6f 61 64 5f 65 78 74 65  ult of load_exte
1b840 6e 73 69 6f 6e 28 29 0a 20 20 69 73 20 61 6c 77  nsion().  is alw
1b850 61 79 73 20 61 20 4e 55 4c 4c 2e 20 20 5e 49 66  ays a NULL.  ^If
1b860 20 59 20 69 73 20 6f 6d 69 74 74 65 64 20 74 68   Y is omitted th
1b870 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 65  en the default e
1b880 6e 74 72 79 20 70 6f 69 6e 74 20 6e 61 6d 65 20  ntry point name 
1b890 69 73 20 75 73 65 64 2e 0a 20 20 5e 54 68 65 20  is used..  ^The 
1b8a0 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
1b8b0 20 66 75 6e 63 74 69 6f 6e 20 72 61 69 73 65 73   function raises
1b8c0 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 66   an exception if
1b8d0 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 66   the extension f
1b8e0 61 69 6c 73 20 74 6f 0a 20 20 6c 6f 61 64 20 6f  ails to.  load o
1b8f0 72 20 69 6e 69 74 69 61 6c 69 7a 65 20 63 6f 72  r initialize cor
1b900 72 65 63 74 6c 79 2e 0a 0a 20 20 3c 70 3e 5e 54  rectly...  <p>^T
1b910 68 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  he load_extensio
1b920 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c  n() function wil
1b930 6c 20 66 61 69 6c 20 69 66 20 74 68 65 20 65 78  l fail if the ex
1b940 74 65 6e 73 69 6f 6e 20 61 74 74 65 6d 70 74 73  tension attempts
1b950 20 74 6f 20 0a 20 20 6d 6f 64 69 66 79 20 6f 72   to .  modify or
1b960 20 64 65 6c 65 74 65 20 61 6e 20 53 51 4c 20 66   delete an SQL f
1b970 75 6e 63 74 69 6f 6e 20 6f 72 20 63 6f 6c 6c 61  unction or colla
1b980 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
1b990 5e 54 68 65 0a 20 20 65 78 74 65 6e 73 69 6f 6e  ^The.  extension
1b9a0 20 63 61 6e 20 61 64 64 20 6e 65 77 20 66 75 6e   can add new fun
1b9b0 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61 74  ctions or collat
1b9c0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20 62  ing sequences, b
1b9d0 75 74 20 63 61 6e 6e 6f 74 0a 20 20 6d 6f 64 69  ut cannot.  modi
1b9e0 66 79 20 6f 72 20 64 65 6c 65 74 65 20 65 78 69  fy or delete exi
1b9f0 73 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20  sting functions 
1ba00 6f 72 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  or collating seq
1ba10 75 65 6e 63 65 73 20 62 65 63 61 75 73 65 0a 20  uences because. 
1ba20 20 74 68 6f 73 65 20 66 75 6e 63 74 69 6f 6e 73   those functions
1ba30 20 61 6e 64 2f 6f 72 20 63 6f 6c 6c 61 74 69 6e   and/or collatin
1ba40 67 20 73 65 71 75 65 6e 63 65 73 20 6d 69 67 68  g sequences migh
1ba50 74 20 62 65 20 75 73 65 64 20 65 6c 73 65 77 68  t be used elsewh
1ba60 65 72 65 0a 20 20 69 6e 20 74 68 65 20 63 75 72  ere.  in the cur
1ba70 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 53  rently running S
1ba80 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  QL statement.  T
1ba90 6f 20 6c 6f 61 64 20 61 6e 20 65 78 74 65 6e 73  o load an extens
1baa0 69 6f 6e 20 74 68 61 74 0a 20 20 63 68 61 6e 67  ion that.  chang
1bab0 65 73 20 6f 72 20 64 65 6c 65 74 65 73 20 66 75  es or deletes fu
1bac0 6e 63 74 69 6f 6e 73 20 6f 72 20 63 6f 6c 6c 61  nctions or colla
1bad0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 2c 20  ting sequences, 
1bae0 75 73 65 20 74 68 65 0a 20 20 5b 73 71 6c 69 74  use the.  [sqlit
1baf0 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  e3_load_extensio
1bb00 6e 28 29 5d 20 43 2d 6c 61 6e 67 75 61 67 65 20  n()] C-language 
1bb10 41 50 49 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 46  API.</p>..  <p>F
1bb20 6f 72 20 73 65 63 75 72 69 74 79 20 72 65 61 73  or security reas
1bb30 6f 6e 73 2c 20 65 78 74 65 6e 73 69 6f 6e 20 6c  ons, extension l
1bb40 6f 61 64 65 64 20 69 73 20 74 75 72 6e 65 64 20  oaded is turned 
1bb50 6f 66 66 20 62 79 20 64 65 66 61 75 6c 74 20 61  off by default a
1bb60 6e 64 20 6d 75 73 74 0a 20 20 62 65 20 65 6e 61  nd must.  be ena
1bb70 62 6c 65 64 20 62 79 20 61 20 70 72 69 6f 72 20  bled by a prior 
1bb80 63 61 6c 6c 20 74 6f 20 5b 73 71 6c 69 74 65 33  call to [sqlite3
1bb90 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74  _enable_load_ext
1bba0 65 6e 73 69 6f 6e 28 29 5d 2e 3c 2f 70 3e 0a 7d  ension()].</p>.}
1bbb0 0a 0a 66 75 6e 63 64 65 66 20 7b 6c 6f 77 65 72  ..funcdef {lower
1bbc0 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  (X)} {} {.  ^The
1bbd0 20 6c 6f 77 65 72 28 58 29 20 66 75 6e 63 74 69   lower(X) functi
1bbe0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 63 6f 70  on returns a cop
1bbf0 79 20 6f 66 20 73 74 72 69 6e 67 20 58 20 77 69  y of string X wi
1bc00 74 68 20 61 6c 6c 20 41 53 43 49 49 20 63 68 61  th all ASCII cha
1bc10 72 61 63 74 65 72 73 0a 20 20 63 6f 6e 76 65 72  racters.  conver
1bc20 74 65 64 20 74 6f 20 6c 6f 77 65 72 20 63 61 73  ted to lower cas
1bc30 65 2e 20 20 5e 54 68 65 20 64 65 66 61 75 6c 74  e.  ^The default
1bc40 20 62 75 69 6c 74 2d 69 6e 20 6c 6f 77 65 72 28   built-in lower(
1bc50 29 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72 6b 73  ) function works
1bc60 0a 20 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  .  for ASCII cha
1bc70 72 61 63 74 65 72 73 20 6f 6e 6c 79 2e 20 20 54  racters only.  T
1bc80 6f 20 64 6f 20 63 61 73 65 20 63 6f 6e 76 65 72  o do case conver
1bc90 73 69 6f 6e 73 20 6f 6e 20 6e 6f 6e 2d 41 53 43  sions on non-ASC
1bca0 49 49 0a 20 20 63 68 61 72 61 63 74 65 72 73 2c  II.  characters,
1bcb0 20 6c 6f 61 64 20 74 68 65 20 49 43 55 20 65 78   load the ICU ex
1bcc0 74 65 6e 73 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63  tension..}..func
1bcd0 64 65 66 20 7b 6c 74 72 69 6d 28 58 29 20 6c 74  def {ltrim(X) lt
1bce0 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20  rim(X,Y)} {} {. 
1bcf0 20 5e 54 68 65 20 6c 74 72 69 6d 28 58 2c 59 29   ^The ltrim(X,Y)
1bd00 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1bd10 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
1bd20 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
1bd30 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
1bd40 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
1bd50 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65  ar in Y from the
1bd60 20 6c 65 66 74 20 73 69 64 65 20 6f 66 20 58 2e   left side of X.
1bd70 0a 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67  .  ^If the Y arg
1bd80 75 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64  ument is omitted
1bd90 2c 20 6c 74 72 69 6d 28 58 29 20 72 65 6d 6f 76  , ltrim(X) remov
1bda0 65 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74  es spaces from t
1bdb0 68 65 20 6c 65 66 74 20 73 69 64 65 0a 20 20 6f  he left side.  o
1bdc0 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
1bdd0 7b 6d 61 78 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  {max(X,Y,...)} {
1bde0 2a 6d 61 78 43 6f 72 65 46 75 6e 63 20 2a 6d 61  *maxCoreFunc *ma
1bdf0 78 20 7b 6d 61 78 28 29 20 53 51 4c 20 66 75 6e  x {max() SQL fun
1be00 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
1be10 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
1be20 6d 61 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  max() function r
1be30 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
1be40 65 6e 74 20 77 69 74 68 20 74 68 65 20 0a 20 20  ent with the .  
1be50 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65 2c 20 6f  maximum value, o
1be60 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66  r return NULL if
1be70 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 69 73   any argument is
1be80 20 4e 55 4c 4c 2e 20 0a 20 20 5e 54 68 65 20 6d   NULL. .  ^The m
1be90 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20 6d 61  ulti-argument ma
1bea0 78 28 29 20 66 75 6e 63 74 69 6f 6e 20 73 65 61  x() function sea
1beb0 72 63 68 65 73 20 69 74 73 20 61 72 67 75 6d 65  rches its argume
1bec0 6e 74 73 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  nts from left to
1bed0 20 72 69 67 68 74 0a 20 20 66 6f 72 20 61 6e 20   right.  for an 
1bee0 61 72 67 75 6d 65 6e 74 20 74 68 61 74 20 64 65  argument that de
1bef0 66 69 6e 65 73 20 61 20 63 6f 6c 6c 61 74 69 6e  fines a collatin
1bf00 67 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 75  g function and u
1bf10 73 65 73 20 74 68 61 74 20 63 6f 6c 6c 61 74 69  ses that collati
1bf20 6e 67 0a 20 20 66 75 6e 63 74 69 6f 6e 20 66 6f  ng.  function fo
1bf30 72 20 61 6c 6c 20 73 74 72 69 6e 67 20 63 6f 6d  r all string com
1bf40 70 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 6e  parisons.  ^If n
1bf50 6f 6e 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d  one of the argum
1bf60 65 6e 74 73 20 74 6f 20 6d 61 78 28 29 0a 20 20  ents to max().  
1bf70 64 65 66 69 6e 65 20 61 20 63 6f 6c 6c 61 74 69  define a collati
1bf80 6e 67 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 65  ng function, the
1bf90 6e 20 74 68 65 20 42 49 4e 41 52 59 20 63 6f 6c  n the BINARY col
1bfa0 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
1bfb0 69 73 20 75 73 65 64 2e 0a 20 20 5e 28 4e 6f 74  is used..  ^(Not
1bfc0 65 20 74 68 61 74 20 3c 62 3e 6d 61 78 28 29 3c  e that <b>max()<
1bfd0 2f 62 3e 20 69 73 20 61 20 73 69 6d 70 6c 65 20  /b> is a simple 
1bfe0 66 75 6e 63 74 69 6f 6e 20 77 68 65 6e 0a 20 20  function when.  
1bff0 69 74 20 68 61 73 20 32 20 6f 72 20 6d 6f 72 65  it has 2 or more
1c000 20 61 72 67 75 6d 65 6e 74 73 20 62 75 74 20 6f   arguments but o
1c010 70 65 72 61 74 65 73 20 61 73 20 61 6e 0a 20 20  perates as an.  
1c020 5b 6d 61 78 41 67 67 46 75 6e 63 20 7c 20 61 67  [maxAggFunc | ag
1c030 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1c040 5d 20 69 66 20 67 69 76 65 6e 20 6f 6e 6c 79 20  ] if given only 
1c050 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
1c060 74 2e 29 5e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  t.)^.}..funcdef 
1c070 7b 6d 69 6e 28 58 2c 59 2c 2e 2e 2e 29 7d 20 7b  {min(X,Y,...)} {
1c080 2a 6d 69 6e 43 6f 72 65 46 75 6e 63 20 2a 6d 69  *minCoreFunc *mi
1c090 6e 20 7b 6d 69 6e 28 29 20 53 51 4c 20 66 75 6e  n {min() SQL fun
1c0a0 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
1c0b0 20 6d 75 6c 74 69 2d 61 72 67 75 6d 65 6e 74 20   multi-argument 
1c0c0 6d 69 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 72  min() function r
1c0d0 65 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d  eturns the argum
1c0e0 65 6e 74 20 77 69 74 68 20 74 68 65 0a 20 20 6d  ent with the.  m
1c0f0 69 6e 69 6d 75 6d 20 76 61 6c 75 65 2e 0a 20 20  inimum value..  
1c100 5e 54 68 65 20 6d 75 6c 74 69 2d 61 72 67 75 6d  ^The multi-argum
1c110 65 6e 74 20 6d 69 6e 28 29 20 66 75 6e 63 74 69  ent min() functi
1c120 6f 6e 20 73 65 61 72 63 68 65 73 20 69 74 73 20  on searches its 
1c130 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 6c  arguments from l
1c140 65 66 74 20 74 6f 20 72 69 67 68 74 0a 20 20 66  eft to right.  f
1c150 6f 72 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 74  or an argument t
1c160 68 61 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  hat defines a co
1c170 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
1c180 20 61 6e 64 20 75 73 65 73 20 74 68 61 74 20 63   and uses that c
1c190 6f 6c 6c 61 74 69 6e 67 0a 20 20 66 75 6e 63 74  ollating.  funct
1c1a0 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
1c1b0 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 20  ng comparisons. 
1c1c0 20 5e 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65   ^If none of the
1c1d0 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 6d 69   arguments to mi
1c1e0 6e 28 29 0a 20 20 64 65 66 69 6e 65 20 61 20 63  n().  define a c
1c1f0 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
1c200 6e 2c 20 74 68 65 6e 20 74 68 65 20 42 49 4e 41  n, then the BINA
1c210 52 59 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  RY collating fun
1c220 63 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20  ction is used.. 
1c230 20 5e 28 4e 6f 74 65 20 74 68 61 74 20 3c 62 3e   ^(Note that <b>
1c240 6d 69 6e 28 29 3c 2f 62 3e 20 69 73 20 61 20 73  min()</b> is a s
1c250 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 77  imple function w
1c260 68 65 6e 0a 20 20 69 74 20 68 61 73 20 32 20 6f  hen.  it has 2 o
1c270 72 20 6d 6f 72 65 20 61 72 67 75 6d 65 6e 74 73  r more arguments
1c280 20 62 75 74 20 6f 70 65 72 61 74 65 73 20 61 73   but operates as
1c290 20 61 6e 20 0a 20 20 5b 6d 69 6e 41 67 67 46 75   an .  [minAggFu
1c2a0 6e 63 20 7c 20 61 67 67 72 65 67 61 74 65 20 66  nc | aggregate f
1c2b0 75 6e 63 74 69 6f 6e 5d 20 69 66 20 67 69 76 65  unction] if give
1c2c0 6e 0a 20 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c  n.  only a singl
1c2d0 65 20 61 72 67 75 6d 65 6e 74 2e 29 5e 0a 7d 0a  e argument.)^.}.
1c2e0 0a 66 75 6e 63 64 65 66 20 7b 6e 75 6c 6c 69 66  .funcdef {nullif
1c2f0 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  (X,Y)} {} {.  ^T
1c300 68 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66  he nullif(X,Y) f
1c310 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1c320 69 74 73 20 66 69 72 73 74 20 61 72 67 75 6d 65  its first argume
1c330 6e 74 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  nt if the argume
1c340 6e 74 73 20 61 72 65 0a 20 20 64 69 66 66 65 72  nts are.  differ
1c350 65 6e 74 20 61 6e 64 20 4e 55 4c 4c 20 69 66 20  ent and NULL if 
1c360 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 61 72  the arguments ar
1c370 65 20 74 68 65 20 73 61 6d 65 2e 20 20 5e 54 68  e the same.  ^Th
1c380 65 20 6e 75 6c 6c 69 66 28 58 2c 59 29 20 66 75  e nullif(X,Y) fu
1c390 6e 63 74 69 6f 6e 0a 20 20 73 65 61 72 63 68 65  nction.  searche
1c3a0 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20  s its arguments 
1c3b0 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
1c3c0 68 74 20 66 6f 72 20 61 6e 20 61 72 67 75 6d 65  ht for an argume
1c3d0 6e 74 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  nt that defines 
1c3e0 61 0a 20 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  a.  collating fu
1c3f0 6e 63 74 69 6f 6e 20 61 6e 64 20 75 73 65 73 20  nction and uses 
1c400 74 68 61 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66  that collating f
1c410 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20  unction for all 
1c420 73 74 72 69 6e 67 0a 20 20 63 6f 6d 70 61 72 69  string.  compari
1c430 73 6f 6e 73 2e 20 20 5e 49 66 20 6e 65 69 74 68  sons.  ^If neith
1c440 65 72 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 6e  er argument to n
1c450 75 6c 6c 69 66 28 29 20 64 65 66 69 6e 65 73 20  ullif() defines 
1c460 61 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  a collating func
1c470 74 69 6f 6e 0a 20 20 74 68 65 6e 20 74 68 65 20  tion.  then the 
1c480 42 49 4e 41 52 59 20 69 73 20 75 73 65 64 2e 0a  BINARY is used..
1c490 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 70 72 69 6e  }..funcdef {prin
1c4a0 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 7d 20  tf(FORMAT,...)} 
1c4b0 7b 7d 20 7b 0a 20 20 5e 28 54 68 65 20 70 72 69  {} {.  ^(The pri
1c4c0 6e 74 66 28 46 4f 52 4d 41 54 2c 2e 2e 2e 29 20  ntf(FORMAT,...) 
1c4d0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 6f 72  SQL function wor
1c4e0 6b 73 20 6c 69 6b 65 20 74 68 65 20 5b 73 71 6c  ks like the [sql
1c4f0 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 29 5d 20  ite3_mprintf()] 
1c500 43 2d 6c 61 6e 67 75 61 67 65 0a 20 20 66 75 6e  C-language.  fun
1c510 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 20 70 72  ction and the pr
1c520 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  intf() function 
1c530 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72  from the standar
1c540 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a 20  d C library.)^. 
1c550 20 54 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   The first argum
1c560 65 6e 74 20 69 73 20 61 20 66 6f 72 6d 61 74 20  ent is a format 
1c570 73 74 72 69 6e 67 20 74 68 61 74 20 73 70 65 63  string that spec
1c580 69 66 69 65 73 20 68 6f 77 20 74 6f 20 63 6f 6e  ifies how to con
1c590 73 74 72 75 63 74 20 74 68 65 20 6f 75 74 70 75  struct the outpu
1c5a0 74 0a 20 20 73 74 72 69 6e 67 20 75 73 69 6e 67  t.  string using
1c5b0 20 76 61 6c 75 65 73 20 74 61 6b 65 6e 20 66 72   values taken fr
1c5c0 6f 6d 20 73 75 62 73 65 71 75 65 6e 74 20 61 72  om subsequent ar
1c5d0 67 75 6d 65 6e 74 73 2e 20 20 5e 49 66 20 74 68  guments.  ^If th
1c5e0 65 20 46 4f 52 4d 41 54 20 61 72 67 75 6d 65 6e  e FORMAT argumen
1c5f0 74 20 69 73 0a 20 20 6d 69 73 73 69 6e 67 20 6f  t is.  missing o
1c600 72 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  r NULL then the 
1c610 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
1c620 20 5e 54 68 65 20 25 6e 20 66 6f 72 6d 61 74 20   ^The %n format 
1c630 69 73 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f  is silently igno
1c640 72 65 64 20 61 6e 64 0a 20 20 64 6f 65 73 20 6e  red and.  does n
1c650 6f 74 20 63 6f 6e 73 75 6d 65 20 61 6e 20 61 72  ot consume an ar
1c660 67 75 6d 65 6e 74 2e 20 20 5e 54 68 65 20 25 70  gument.  ^The %p
1c670 20 66 6f 72 6d 61 74 20 69 73 20 61 6e 20 61 6c   format is an al
1c680 69 61 73 20 66 6f 72 20 25 58 2e 20 20 5e 54 68  ias for %X.  ^Th
1c690 65 20 25 7a 20 66 6f 72 6d 61 74 0a 20 20 69 73  e %z format.  is
1c6a0 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62 6c 65   interchangeable
1c6b0 20 77 69 74 68 20 25 73 2e 20 20 5e 28 49 66 20   with %s.  ^(If 
1c6c0 74 68 65 72 65 20 61 72 65 20 74 6f 6f 20 66 65  there are too fe
1c6d0 77 20 61 72 67 75 6d 65 6e 74 73 20 69 6e 20 74  w arguments in t
1c6e0 68 65 20 61 72 67 75 6d 65 6e 74 20 6c 69 73 74  he argument list
1c6f0 2c 0a 20 20 6d 69 73 73 69 6e 67 20 61 72 67 75  ,.  missing argu
1c700 6d 65 6e 74 73 20 61 72 65 20 61 73 73 75 6d 65  ments are assume
1c710 64 20 74 6f 20 68 61 76 65 20 61 20 4e 55 4c 4c  d to have a NULL
1c720 20 76 61 6c 75 65 2c 20 77 68 69 63 68 20 69 73   value, which is
1c730 20 74 72 61 6e 73 6c 61 74 65 64 20 69 6e 74 6f   translated into
1c740 0a 20 20 30 20 6f 72 20 30 2e 30 20 66 6f 72 20  .  0 or 0.0 for 
1c750 6e 75 6d 65 72 69 63 20 66 6f 72 6d 61 74 73 20  numeric formats 
1c760 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  or an empty stri
1c770 6e 67 20 66 6f 72 20 25 73 2e 29 5e 20 20 53 65  ng for %s.)^  Se
1c780 65 20 74 68 65 0a 20 20 5b 62 75 69 6c 74 2d 69  e the.  [built-i
1c790 6e 20 70 72 69 6e 74 66 28 29 5d 20 64 6f 63 75  n printf()] docu
1c7a0 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64  mentation for ad
1c7b0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
1c7c0 74 69 6f 6e 2e 0a 7d 0a 20 20 0a 0a 66 75 6e 63  tion..}.  ..func
1c7d0 64 65 66 20 7b 71 75 6f 74 65 28 58 29 7d 20 7b  def {quote(X)} {
1c7e0 7d 20 7b 0a 20 20 5e 54 68 65 20 71 75 6f 74 65  } {.  ^The quote
1c7f0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
1c800 75 72 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66  urns the text of
1c810 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
1c820 77 68 69 63 68 0a 20 20 69 73 20 74 68 65 20 76  which.  is the v
1c830 61 6c 75 65 20 6f 66 20 69 74 73 20 61 72 67 75  alue of its argu
1c840 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f  ment suitable fo
1c850 72 20 69 6e 63 6c 75 73 69 6f 6e 20 69 6e 74 6f  r inclusion into
1c860 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
1c870 74 2e 0a 20 20 5e 53 74 72 69 6e 67 73 20 61 72  t..  ^Strings ar
1c880 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20  e surrounded by 
1c890 73 69 6e 67 6c 65 2d 71 75 6f 74 65 73 20 77 69  single-quotes wi
1c8a0 74 68 20 65 73 63 61 70 65 73 20 6f 6e 20 69 6e  th escapes on in
1c8b0 74 65 72 69 6f 72 20 71 75 6f 74 65 73 0a 20 20  terior quotes.  
1c8c0 61 73 20 6e 65 65 64 65 64 2e 20 20 5e 42 4c 4f  as needed.  ^BLO
1c8d0 42 73 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61  Bs are encoded a
1c8e0 73 20 68 65 78 61 64 65 63 69 6d 61 6c 20 6c 69  s hexadecimal li
1c8f0 74 65 72 61 6c 73 2e 0a 20 20 5e 53 74 72 69 6e  terals..  ^Strin
1c900 67 73 20 77 69 74 68 20 65 6d 62 65 64 64 65 64  gs with embedded
1c910 20 4e 55 4c 20 63 68 61 72 61 63 74 65 72 73 20   NUL characters 
1c920 63 61 6e 6e 6f 74 20 62 65 20 72 65 70 72 65 73  cannot be repres
1c930 65 6e 74 65 64 20 61 73 20 73 74 72 69 6e 67 0a  ented as string.
1c940 20 20 6c 69 74 65 72 61 6c 73 20 69 6e 20 53 51    literals in SQ
1c950 4c 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20  L and hence the 
1c960 72 65 74 75 72 6e 65 64 20 73 74 72 69 6e 67 20  returned string 
1c970 6c 69 74 65 72 61 6c 20 69 73 20 74 72 75 6e 63  literal is trunc
1c980 61 74 65 64 20 70 72 69 6f 72 0a 20 20 74 6f 20  ated prior.  to 
1c990 74 68 65 20 66 69 72 73 74 20 4e 55 4c 2e 0a 7d  the first NUL..}
1c9a0 0a 0a 66 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f  ..funcdef {rando
1c9b0 6d 28 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  m()} {} {.  ^The
1c9c0 20 72 61 6e 64 6f 6d 28 29 20 66 75 6e 63 74 69   random() functi
1c9d0 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 70 73 65  on returns a pse
1c9e0 75 64 6f 2d 72 61 6e 64 6f 6d 20 69 6e 74 65 67  udo-random integ
1c9f0 65 72 0a 20 20 62 65 74 77 65 65 6e 20 2d 39 32  er.  between -92
1ca00 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
1ca10 38 20 61 6e 64 20 2b 39 32 32 33 33 37 32 30 33  8 and +922337203
1ca20 36 38 35 34 37 37 35 38 30 37 2e 0a 7d 0a 0a 66  6854775807..}..f
1ca30 75 6e 63 64 65 66 20 7b 72 61 6e 64 6f 6d 62 6c  uncdef {randombl
1ca40 6f 62 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ob(N)} {} {.  ^T
1ca50 68 65 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 4e 29  he randomblob(N)
1ca60 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1ca70 20 61 6e 20 4e 2d 62 79 74 65 20 62 6c 6f 62 20   an N-byte blob 
1ca80 63 6f 6e 74 61 69 6e 69 6e 67 20 70 73 65 75 64  containing pseud
1ca90 6f 2d 72 61 6e 64 6f 6d 0a 20 20 62 79 74 65 73  o-random.  bytes
1caa0 2e 20 5e 49 66 20 4e 20 69 73 20 6c 65 73 73 20  . ^If N is less 
1cab0 74 68 61 6e 20 31 20 74 68 65 6e 20 61 20 31 2d  than 1 then a 1-
1cac0 62 79 74 65 20 72 61 6e 64 6f 6d 20 62 6c 6f 62  byte random blob
1cad0 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 20   is returned... 
1cae0 20 3c 70 3e 48 69 6e 74 3a 20 20 61 70 70 6c 69   <p>Hint:  appli
1caf0 63 61 74 69 6f 6e 73 20 63 61 6e 20 67 65 6e 65  cations can gene
1cb00 72 61 74 65 20 67 6c 6f 62 61 6c 6c 79 20 75 6e  rate globally un
1cb10 69 71 75 65 20 69 64 65 6e 74 69 66 69 65 72 73  ique identifiers
1cb20 0a 20 20 75 73 69 6e 67 20 74 68 69 73 20 66 75  .  using this fu
1cb30 6e 63 74 69 6f 6e 20 74 6f 67 65 74 68 65 72 20  nction together 
1cb40 77 69 74 68 20 5b 68 65 78 28 29 5d 20 61 6e 64  with [hex()] and
1cb50 2f 6f 72 0a 20 20 5b 6c 6f 77 65 72 28 29 5d 20  /or.  [lower()] 
1cb60 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a 0a  like this:</p>..
1cb70 20 20 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20    <blockquote>. 
1cb80 20 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28   hex(randomblob(
1cb90 31 36 29 29 3c 62 72 3e 3c 2f 62 72 3e 0a 20 20  16))<br></br>.  
1cba0 6c 6f 77 65 72 28 68 65 78 28 72 61 6e 64 6f 6d  lower(hex(random
1cbb0 62 6c 6f 62 28 31 36 29 29 29 0a 20 20 3c 2f 62  blob(16))).  </b
1cbc0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 7d 0a 0a 66 75  lockquote>.}..fu
1cbd0 6e 63 64 65 66 20 7b 72 65 70 6c 61 63 65 28 58  ncdef {replace(X
1cbe0 2c 59 2c 5a 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54  ,Y,Z)} {} {.  ^T
1cbf0 68 65 20 72 65 70 6c 61 63 65 28 58 2c 59 2c 5a  he replace(X,Y,Z
1cc00 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1cc10 6e 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d  ns a string form
1cc20 65 64 20 62 79 20 73 75 62 73 74 69 74 75 74 69  ed by substituti
1cc30 6e 67 0a 20 20 73 74 72 69 6e 67 20 5a 20 66 6f  ng.  string Z fo
1cc40 72 20 65 76 65 72 79 20 6f 63 63 75 72 72 65 6e  r every occurren
1cc50 63 65 20 6f 66 20 73 74 72 69 6e 67 20 59 20 69  ce of string Y i
1cc60 6e 20 73 74 72 69 6e 67 20 58 2e 20 20 5e 54 68  n string X.  ^Th
1cc70 65 20 5b 42 49 4e 41 52 59 5d 0a 20 20 63 6f 6c  e [BINARY].  col
1cc80 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
1cc90 69 73 20 75 73 65 64 20 66 6f 72 20 63 6f 6d 70  is used for comp
1cca0 61 72 69 73 6f 6e 73 2e 20 20 5e 49 66 20 59 20  arisons.  ^If Y 
1ccb0 69 73 20 61 6e 20 65 6d 70 74 79 0a 20 20 73 74  is an empty.  st
1ccc0 72 69 6e 67 20 74 68 65 6e 20 72 65 74 75 72 6e  ring then return
1ccd0 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 20 20 5e   X unchanged.  ^
1cce0 49 66 20 5a 20 69 73 20 6e 6f 74 20 69 6e 69 74  If Z is not init
1ccf0 69 61 6c 6c 79 0a 20 20 61 20 73 74 72 69 6e 67  ially.  a string
1cd00 2c 20 69 74 20 69 73 20 63 61 73 74 20 74 6f 20  , it is cast to 
1cd10 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70  a UTF-8 string p
1cd20 72 69 6f 72 20 74 6f 20 70 72 6f 63 65 73 73 69  rior to processi
1cd30 6e 67 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  ng..}..funcdef {
1cd40 72 6f 75 6e 64 28 58 29 20 72 6f 75 6e 64 28 58  round(X) round(X
1cd50 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65  ,Y)} {} {.  ^The
1cd60 20 72 6f 75 6e 64 28 58 2c 59 29 20 66 75 6e 63   round(X,Y) func
1cd70 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20 66  tion returns a f
1cd80 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 20 20  loating-point.  
1cd90 76 61 6c 75 65 20 58 20 72 6f 75 6e 64 65 64 20  value X rounded 
1cda0 74 6f 20 59 20 64 69 67 69 74 73 20 74 6f 20 74  to Y digits to t
1cdb0 68 65 20 72 69 67 68 74 20 6f 66 20 74 68 65 20  he right of the 
1cdc0 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 0a 20  decimal point.. 
1cdd0 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75 6d   ^If the Y argum
1cde0 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20  ent is omitted, 
1cdf0 69 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  it is assumed to
1ce00 20 62 65 20 30 2e 0a 7d 0a 0a 66 75 6e 63 64 65   be 0..}..funcde
1ce10 66 20 7b 72 74 72 69 6d 28 58 29 20 72 74 72 69  f {rtrim(X) rtri
1ce20 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a 20 20 5e  m(X,Y)} {} {.  ^
1ce30 54 68 65 20 72 74 72 69 6d 28 58 2c 59 29 20 66  The rtrim(X,Y) f
1ce40 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1ce50 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65 64 20  a string formed 
1ce60 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20  by removing any 
1ce70 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72 61 63  and all.  charac
1ce80 74 65 72 73 20 74 68 61 74 20 61 70 70 65 61 72  ters that appear
1ce90 20 69 6e 20 59 20 66 72 6f 6d 20 74 68 65 20 72   in Y from the r
1cea0 69 67 68 74 20 73 69 64 65 20 6f 66 20 58 2e 0a  ight side of X..
1ceb0 20 20 5e 49 66 20 74 68 65 20 59 20 61 72 67 75    ^If the Y argu
1cec0 6d 65 6e 74 20 69 73 20 6f 6d 69 74 74 65 64 2c  ment is omitted,
1ced0 20 72 74 72 69 6d 28 58 29 20 72 65 6d 6f 76 65   rtrim(X) remove
1cee0 73 20 73 70 61 63 65 73 20 66 72 6f 6d 20 74 68  s spaces from th
1cef0 65 20 72 69 67 68 74 0a 20 20 73 69 64 65 20 6f  e right.  side o
1cf00 66 20 58 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  f X..}..funcdef 
1cf10 7b 73 6f 75 6e 64 65 78 28 58 29 7d 20 7b 7d 20  {soundex(X)} {} 
1cf20 7b 0a 20 20 5e 54 68 65 20 73 6f 75 6e 64 65 78  {.  ^The soundex
1cf30 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  (X) function ret
1cf40 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 74 68  urns a string th
1cf50 61 74 20 69 73 20 74 68 65 20 73 6f 75 6e 64 65  at is the sounde
1cf60 78 20 65 6e 63 6f 64 69 6e 67 20 0a 20 20 6f 66  x encoding .  of
1cf70 20 74 68 65 20 73 74 72 69 6e 67 20 58 2e 0a 20   the string X.. 
1cf80 20 5e 54 68 65 20 73 74 72 69 6e 67 20 22 3f 30   ^The string "?0
1cf90 30 30 22 20 69 73 20 72 65 74 75 72 6e 65 64 20  00" is returned 
1cfa0 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
1cfb0 69 73 20 4e 55 4c 4c 20 6f 72 20 63 6f 6e 74 61  is NULL or conta
1cfc0 69 6e 73 0a 20 20 6e 6f 20 41 53 43 49 49 20 61  ins.  no ASCII a
1cfd0 6c 70 68 61 62 65 74 69 63 20 63 68 61 72 61 63  lphabetic charac
1cfe0 74 65 72 73 2e 0a 20 20 5e 28 54 68 69 73 20 66  ters..  ^(This f
1cff0 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6d 69 74 74  unction is omitt
1d000 65 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 62  ed from SQLite b
1d010 79 20 64 65 66 61 75 6c 74 2e 0a 20 20 49 74 20  y default..  It 
1d020 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c  is only availabl
1d030 65 20 69 66 20 74 68 65 20 5b 53 51 4c 49 54 45  e if the [SQLITE
1d040 5f 53 4f 55 4e 44 45 58 5d 20 63 6f 6d 70 69 6c  _SOUNDEX] compil
1d050 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 0a 20 20  e-time option.  
1d060 69 73 20 75 73 65 64 20 77 68 65 6e 20 53 51 4c  is used when SQL
1d070 69 74 65 20 69 73 20 62 75 69 6c 74 2e 29 5e 0a  ite is built.)^.
1d080 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
1d090 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  te_compileoption
1d0a0 5f 67 65 74 28 4e 29 7d 20 7b 7d 20 7b 0a 20 20  _get(N)} {} {.  
1d0b0 5e 54 68 65 20 73 71 6c 69 74 65 5f 63 6f 6d 70  ^The sqlite_comp
1d0c0 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 29 20  ileoption_get() 
1d0d0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  SQL function is 
1d0e0 61 20 77 72 61 70 70 65 72 20 61 72 6f 75 6e 64  a wrapper around
1d0f0 20 74 68 65 0a 20 20 5b 73 71 6c 69 74 65 33 5f   the.  [sqlite3_
1d100 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
1d110 74 28 29 5d 20 43 2f 43 2b 2b 20 66 75 6e 63 74  t()] C/C++ funct
1d120 69 6f 6e 2e 0a 20 20 5e 54 68 69 73 20 72 6f 75  ion..  ^This rou
1d130 74 69 6e 65 20 72 65 74 75 72 6e 73 20 74 68 65  tine returns the
1d140 20 4e 2d 74 68 20 63 6f 6d 70 69 6c 65 2d 74 69   N-th compile-ti
1d150 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74  me option used t
1d160 6f 20 62 75 69 6c 64 20 53 51 4c 69 74 65 0a 20  o build SQLite. 
1d170 20 6f 72 20 4e 55 4c 4c 20 69 66 20 4e 20 69 73   or NULL if N is
1d180 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 20 20   out of range.  
1d190 53 65 65 20 61 6c 73 6f 20 74 68 65 20 5b 63 6f  See also the [co
1d1a0 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 20 70 72  mpile_options pr
1d1b0 61 67 6d 61 5d 2e 0a 7d 0a 0a 66 75 6e 63 64 65  agma]..}..funcde
1d1c0 66 20 7b 73 71 6c 69 74 65 5f 63 6f 6d 70 69 6c  f {sqlite_compil
1d1d0 65 6f 70 74 69 6f 6e 5f 75 73 65 64 28 58 29 7d  eoption_used(X)}
1d1e0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c   {} {.  ^The sql
1d1f0 69 74 65 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  ite_compileoptio
1d200 6e 5f 75 73 65 64 28 29 20 53 51 4c 20 66 75 6e  n_used() SQL fun
1d210 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70 70  ction is a wrapp
1d220 65 72 20 61 72 6f 75 6e 64 20 74 68 65 0a 20 20  er around the.  
1d230 5b 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65  [sqlite3_compile
1d240 6f 70 74 69 6f 6e 5f 75 73 65 64 28 29 5d 20 43  option_used()] C
1d250 2f 43 2b 2b 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  /C++ function.. 
1d260 20 5e 57 68 65 6e 20 74 68 65 20 61 72 67 75 6d   ^When the argum
1d270 65 6e 74 20 58 20 74 6f 20 73 71 6c 69 74 65 5f  ent X to sqlite_
1d280 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 75 73  compileoption_us
1d290 65 64 28 58 29 20 69 73 20 61 20 73 74 72 69 6e  ed(X) is a strin
1d2a0 67 20 77 68 69 63 68 0a 20 20 69 73 20 74 68 65  g which.  is the
1d2b0 20 6e 61 6d 65 20 6f 66 20 61 20 63 6f 6d 70 69   name of a compi
1d2c0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20  le-time option, 
1d2d0 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74  this routine ret
1d2e0 75 72 6e 73 20 74 72 75 65 20 28 31 29 20 6f 72  urns true (1) or
1d2f0 0a 20 20 66 61 6c 73 65 20 28 30 29 20 64 65 70  .  false (0) dep
1d300 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
1d310 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 6f 70  r or not that op
1d320 74 69 6f 6e 20 77 61 73 20 75 73 65 64 20 64 75  tion was used du
1d330 72 69 6e 67 20 74 68 65 0a 20 20 62 75 69 6c 64  ring the.  build
1d340 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71  ..}..funcdef {sq
1d350 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29 7d 20  lite_offset(X)} 
1d360 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69  {} {.  ^The sqli
1d370 74 65 5f 6f 66 66 73 65 74 28 58 29 20 66 75 6e  te_offset(X) fun
1d380 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1d390 65 20 62 79 74 65 20 6f 66 66 73 65 74 20 69 6e  e byte offset in
1d3a0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
1d3b0 66 69 6c 65 20 66 6f 72 20 74 68 65 20 62 65 67  file for the beg
1d3c0 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65  inning of the re
1d3d0 63 6f 72 64 20 66 72 6f 6d 20 77 68 69 63 68 20  cord from which 
1d3e0 76 61 6c 75 65 20 77 6f 75 6c 64 20 62 65 20 72  value would be r
1d3f0 65 61 64 2e 0a 20 20 49 66 20 58 20 69 73 20 6e  ead..  If X is n
1d400 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  ot a column in a
1d410 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
1d420 2c 20 74 68 65 6e 20 73 71 6c 69 74 65 5f 6f 66  , then sqlite_of
1d430 66 73 65 74 28 58 29 20 72 65 74 75 72 6e 73 0a  fset(X) returns.
1d440 20 20 4e 55 4c 4c 2e 20 20 54 68 65 20 76 61 6c    NULL.  The val
1d450 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
1d460 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29 20  qlite_offset(X) 
1d470 6d 69 67 68 74 20 72 65 66 65 72 65 6e 63 65 20  might reference 
1d480 65 69 74 68 65 72 20 74 68 65 0a 20 20 6f 72 69  either the.  ori
1d490 67 69 6e 61 6c 20 74 61 62 6c 65 20 6f 72 20 61  ginal table or a
1d4a0 6e 20 69 6e 64 65 78 2c 20 64 65 70 65 6e 64 69  n index, dependi
1d4b0 6e 67 20 6f 6e 20 74 68 65 20 71 75 65 72 79 2e  ng on the query.
1d4c0 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 58    If the value X
1d4d0 20 77 6f 75 6c 64 0a 20 20 6e 6f 72 6d 61 6c 6c   would.  normall
1d4e0 79 20 62 65 20 65 78 74 72 61 63 74 65 64 20 66  y be extracted f
1d4f0 72 6f 6d 20 61 6e 20 69 6e 64 65 78 2c 20 74 68  rom an index, th
1d500 65 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28  e sqlite_offset(
1d510 58 29 20 72 65 74 75 72 6e 73 20 74 68 65 0a 20  X) returns the. 
1d520 20 6f 66 66 73 65 74 20 74 6f 20 74 68 65 20 63   offset to the c
1d530 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 69 6e 64  orresponding ind
1d540 65 78 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74  ex record.  If t
1d550 68 65 20 76 61 6c 75 65 20 58 20 77 6f 75 6c 64  he value X would
1d560 20 62 65 0a 20 20 65 78 74 72 61 63 74 65 64 20   be.  extracted 
1d570 66 72 6f 6d 20 74 68 65 20 6f 72 69 67 69 6e 61  from the origina
1d580 6c 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 73 71  l table, then sq
1d590 6c 69 74 65 5f 6f 66 66 73 65 74 28 58 29 20 72  lite_offset(X) r
1d5a0 65 74 75 72 6e 73 20 74 68 65 20 6f 66 66 73 65  eturns the offse
1d5b0 74 0a 20 20 74 6f 20 74 68 65 20 74 61 62 6c 65  t.  to the table
1d5c0 20 72 65 63 6f 72 64 2e 0a 0a 20 20 3c 70 3e 54   record...  <p>T
1d5d0 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  he sqlite_offset
1d5e0 28 58 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  (X) SQL function
1d5f0 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62   is only availab
1d600 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  le if SQLite is 
1d610 62 75 69 6c 74 0a 20 20 75 73 69 6e 67 20 74 68  built.  using th
1d620 65 20 5b 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42  e [-DSQLITE_ENAB
1d630 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55  LE_OFFSET_SQL_FU
1d640 4e 43 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  NC] compile-time
1d650 20 6f 70 74 69 6f 6e 2e 0a 7d 0a 0a 66 75 6e 63   option..}..func
1d660 64 65 66 20 7b 73 71 6c 69 74 65 5f 73 6f 75 72  def {sqlite_sour
1d670 63 65 5f 69 64 28 29 7d 20 7b 7d 20 7b 0a 20 20  ce_id()} {} {.  
1d680 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 6f 75 72  ^The sqlite_sour
1d690 63 65 5f 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  ce_id() function
1d6a0 20 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   returns a strin
1d6b0 67 20 74 68 61 74 20 69 64 65 6e 74 69 66 69 65  g that identifie
1d6c0 73 20 74 68 65 0a 20 20 73 70 65 63 69 66 69 63  s the.  specific
1d6d0 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
1d6e0 73 6f 75 72 63 65 20 63 6f 64 65 20 74 68 61 74  source code that
1d6f0 20 77 61 73 20 75 73 65 64 20 74 6f 20 62 75 69   was used to bui
1d700 6c 64 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20  ld the SQLite.  
1d710 6c 69 62 72 61 72 79 2e 20 20 5e 54 68 65 20 73  library.  ^The s
1d720 74 72 69 6e 67 20 72 65 74 75 72 6e 65 64 20 62  tring returned b
1d730 79 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  y sqlite_source_
1d740 69 64 28 29 20 69 73 0a 20 20 74 68 65 20 64 61  id() is.  the da
1d750 74 65 20 61 6e 64 20 74 69 6d 65 20 74 68 61 74  te and time that
1d760 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65   the source code
1d770 20 77 61 73 20 63 68 65 63 6b 65 64 20 69 6e 20   was checked in 
1d780 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20 20 74 68  followed by.  th
1d790 65 20 53 48 41 31 20 68 61 73 68 20 66 6f 72 20  e SHA1 hash for 
1d7a0 74 68 61 74 20 63 68 65 63 6b 2d 69 6e 2e 20 20  that check-in.  
1d7b0 5e 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69  ^This function i
1d7c0 73 0a 20 20 61 6e 20 53 51 4c 20 77 72 61 70 70  s.  an SQL wrapp
1d7d0 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b 73  er around the [s
1d7e0 71 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28  qlite3_sourceid(
1d7f0 29 5d 20 43 20 69 6e 74 65 72 66 61 63 65 2e 0a  )] C interface..
1d800 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 73 71 6c 69  }..funcdef {sqli
1d810 74 65 5f 76 65 72 73 69 6f 6e 28 29 7d 20 7b 7d  te_version()} {}
1d820 20 7b 0a 20 20 5e 54 68 65 20 73 71 6c 69 74 65   {.  ^The sqlite
1d830 5f 76 65 72 73 69 6f 6e 28 29 20 66 75 6e 63 74  _version() funct
1d840 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
1d850 76 65 72 73 69 6f 6e 20 73 74 72 69 6e 67 20 66  version string f
1d860 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0a 20 20  or the SQLite.  
1d870 6c 69 62 72 61 72 79 20 74 68 61 74 20 69 73 20  library that is 
1d880 72 75 6e 6e 69 6e 67 2e 20 20 5e 54 68 69 73 20  running.  ^This 
1d890 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 6e 20 53  function is an S
1d8a0 51 4c 0a 20 20 77 72 61 70 70 65 72 20 61 72 6f  QL.  wrapper aro
1d8b0 75 6e 64 20 74 68 65 20 5b 73 71 6c 69 74 65 33  und the [sqlite3
1d8c0 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29 5d 20 43  _libversion()] C
1d8d0 2d 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66  -interface..}..f
1d8e0 75 6e 63 64 65 66 20 7b 73 75 62 73 74 72 28 58  uncdef {substr(X
1d8f0 2c 59 2c 5a 29 20 73 75 62 73 74 72 28 58 2c 59  ,Y,Z) substr(X,Y
1d900 29 7d 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 73  )} {} {.  ^The s
1d910 75 62 73 74 72 28 58 2c 59 2c 5a 29 20 66 75 6e  ubstr(X,Y,Z) fun
1d920 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 20  ction returns a 
1d930 73 75 62 73 74 72 69 6e 67 20 6f 66 20 69 6e 70  substring of inp
1d940 75 74 20 73 74 72 69 6e 67 20 58 20 74 68 61 74  ut string X that
1d950 20 62 65 67 69 6e 73 0a 20 20 77 69 74 68 20 74   begins.  with t
1d960 68 65 20 59 2d 74 68 20 63 68 61 72 61 63 74 65  he Y-th characte
1d970 72 20 61 6e 64 20 77 68 69 63 68 20 69 73 20 5a  r and which is Z
1d980 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
1d990 2e 0a 20 20 5e 49 66 20 5a 20 69 73 20 6f 6d 69  ..  ^If Z is omi
1d9a0 74 74 65 64 20 74 68 65 6e 20 73 75 62 73 74 72  tted then substr
1d9b0 28 58 2c 59 29 20 72 65 74 75 72 6e 73 20 61 6c  (X,Y) returns al
1d9c0 6c 20 63 68 61 72 61 63 74 65 72 73 20 74 68 72  l characters thr
1d9d0 6f 75 67 68 20 74 68 65 20 65 6e 64 0a 20 20 6f  ough the end.  o
1d9e0 66 20 74 68 65 20 73 74 72 69 6e 67 20 58 20 62  f the string X b
1d9f0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 74 68  eginning with th
1da00 65 20 59 2d 74 68 2e 0a 20 20 5e 54 68 65 20 6c  e Y-th..  ^The l
1da10 65 66 74 2d 6d 6f 73 74 20 63 68 61 72 61 63 74  eft-most charact
1da20 65 72 20 6f 66 20 58 20 69 73 20 6e 75 6d 62 65  er of X is numbe
1da30 72 20 31 2e 20 20 5e 49 66 20 59 20 69 73 20 6e  r 1.  ^If Y is n
1da40 65 67 61 74 69 76 65 0a 20 20 74 68 65 6e 20 74  egative.  then t
1da50 68 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74  he first charact
1da60 65 72 20 6f 66 20 74 68 65 20 73 75 62 73 74 72  er of the substr
1da70 69 6e 67 20 69 73 20 66 6f 75 6e 64 20 62 79 20  ing is found by 
1da80 63 6f 75 6e 74 69 6e 67 20 66 72 6f 6d 20 74 68  counting from th
1da90 65 0a 20 20 72 69 67 68 74 20 72 61 74 68 65 72  e.  right rather
1daa0 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2e 20   than the left. 
1dab0 20 5e 49 66 20 5a 20 69 73 20 6e 65 67 61 74 69   ^If Z is negati
1dac0 76 65 20 74 68 65 6e 0a 20 20 74 68 65 20 61 62  ve then.  the ab
1dad0 73 28 5a 29 20 63 68 61 72 61 63 74 65 72 73 20  s(Z) characters 
1dae0 70 72 65 63 65 64 69 6e 67 20 74 68 65 20 59 2d  preceding the Y-
1daf0 74 68 20 63 68 61 72 61 63 74 65 72 20 61 72 65  th character are
1db00 20 72 65 74 75 72 6e 65 64 2e 0a 20 20 5e 49 66   returned..  ^If
1db10 20 58 20 69 73 20 61 20 73 74 72 69 6e 67 20 74   X is a string t
1db20 68 65 6e 20 63 68 61 72 61 63 74 65 72 73 20 69  hen characters i
1db30 6e 64 69 63 65 73 20 72 65 66 65 72 20 74 6f 20  ndices refer to 
1db40 61 63 74 75 61 6c 20 55 54 46 2d 38 20 0a 20 20  actual UTF-8 .  
1db50 63 68 61 72 61 63 74 65 72 73 2e 20 20 5e 49 66  characters.  ^If
1db60 20 58 20 69 73 20 61 20 42 4c 4f 42 20 74 68 65   X is a BLOB the
1db70 6e 20 74 68 65 20 69 6e 64 69 63 65 73 20 72 65  n the indices re
1db80 66 65 72 20 74 6f 20 62 79 74 65 73 2e 0a 7d 0a  fer to bytes..}.
1db90 0a 66 75 6e 63 64 65 66 20 7b 74 6f 74 61 6c 5f  .funcdef {total_
1dba0 63 68 61 6e 67 65 73 28 29 7d 20 7b 7d 20 7b 0a  changes()} {} {.
1dbb0 20 20 5e 54 68 65 20 74 6f 74 61 6c 5f 63 68 61    ^The total_cha
1dbc0 6e 67 65 73 28 29 20 66 75 6e 63 74 69 6f 6e 20  nges() function 
1dbd0 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62  returns the numb
1dbe0 65 72 20 6f 66 20 72 6f 77 20 63 68 61 6e 67 65  er of row change
1dbf0 73 0a 20 20 63 61 75 73 65 64 20 62 79 20 49 4e  s.  caused by IN
1dc00 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
1dc10 44 45 4c 45 54 45 0a 20 20 73 74 61 74 65 6d 65  DELETE.  stateme
1dc20 6e 74 73 20 73 69 6e 63 65 20 74 68 65 20 63 75  nts since the cu
1dc30 72 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63  rrent database c
1dc40 6f 6e 6e 65 63 74 69 6f 6e 20 77 61 73 20 6f 70  onnection was op
1dc50 65 6e 65 64 2e 0a 20 20 5e 54 68 69 73 20 66 75  ened..  ^This fu
1dc60 6e 63 74 69 6f 6e 20 69 73 20 61 20 77 72 61 70  nction is a wrap
1dc70 70 65 72 20 61 72 6f 75 6e 64 20 74 68 65 20 5b  per around the [
1dc80 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
1dc90 61 6e 67 65 73 28 29 5d 0a 20 20 43 2f 43 2b 2b  anges()].  C/C++
1dca0 20 69 6e 74 65 72 66 61 63 65 2e 0a 7d 0a 0a 66   interface..}..f
1dcb0 75 6e 63 64 65 66 20 7b 74 72 69 6d 28 58 29 20  uncdef {trim(X) 
1dcc0 74 72 69 6d 28 58 2c 59 29 7d 20 7b 7d 20 7b 0a  trim(X,Y)} {} {.
1dcd0 20 20 5e 54 68 65 20 74 72 69 6d 28 58 2c 59 29    ^The trim(X,Y)
1dce0 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1dcf0 73 20 61 20 73 74 72 69 6e 67 20 66 6f 72 6d 65  s a string forme
1dd00 64 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e  d by removing an
1dd10 79 20 61 6e 64 20 61 6c 6c 0a 20 20 63 68 61 72  y and all.  char
1dd20 61 63 74 65 72 73 20 74 68 61 74 20 61 70 70 65  acters that appe
1dd30 61 72 20 69 6e 20 59 20 66 72 6f 6d 20 62 6f 74  ar in Y from bot
1dd40 68 20 65 6e 64 73 20 6f 66 20 58 2e 0a 20 20 5e  h ends of X..  ^
1dd50 49 66 20 74 68 65 20 59 20 61 72 67 75 6d 65 6e  If the Y argumen
1dd60 74 20 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 72  t is omitted, tr
1dd70 69 6d 28 58 29 20 72 65 6d 6f 76 65 73 20 73 70  im(X) removes sp
1dd80 61 63 65 73 20 66 72 6f 6d 20 62 6f 74 68 20 65  aces from both e
1dd90 6e 64 73 20 6f 66 20 58 2e 0a 7d 0a 0a 66 75 6e  nds of X..}..fun
1dda0 63 64 65 66 20 7b 74 79 70 65 6f 66 28 58 29 7d  cdef {typeof(X)}
1ddb0 20 7b 7d 20 7b 0a 20 20 5e 54 68 65 20 74 79 70   {} {.  ^The typ
1ddc0 65 6f 66 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  eof(X) function 
1ddd0 72 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  returns a string
1dde0 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
1ddf0 74 68 65 20 5b 64 61 74 61 74 79 70 65 5d 20 6f  the [datatype] o
1de00 66 0a 20 20 74 68 65 20 65 78 70 72 65 73 73 69  f.  the expressi
1de10 6f 6e 20 58 3a 20 22 6e 75 6c 6c 22 2c 20 22 69  on X: "null", "i
1de20 6e 74 65 67 65 72 22 2c 20 22 72 65 61 6c 22 2c  nteger", "real",
1de30 20 22 74 65 78 74 22 2c 20 6f 72 20 22 62 6c 6f   "text", or "blo
1de40 62 22 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  b"..}..funcdef {
1de50 75 6e 6c 69 6b 65 6c 79 28 58 29 7d 20 7b 7d 20  unlikely(X)} {} 
1de60 7b 0a 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c  {.  ^The unlikel
1de70 79 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 72 65  y(X) function re
1de80 74 75 72 6e 73 20 74 68 65 20 61 72 67 75 6d 65  turns the argume
1de90 6e 74 20 58 20 75 6e 63 68 61 6e 67 65 64 2e 0a  nt X unchanged..
1dea0 20 20 5e 54 68 65 20 75 6e 6c 69 6b 65 6c 79 28    ^The unlikely(
1deb0 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  X) function is a
1dec0 20 6e 6f 2d 6f 70 20 74 68 61 74 20 74 68 65 20   no-op that the 
1ded0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 0a 20  code generator. 
1dee0 20 6f 70 74 69 6d 69 7a 65 73 20 61 77 61 79 20   optimizes away 
1def0 73 6f 20 74 68 61 74 20 69 74 20 63 6f 6e 73 75  so that it consu
1df00 6d 65 73 20 6e 6f 20 43 50 55 20 63 79 63 6c 65  mes no CPU cycle
1df10 73 20 61 74 0a 20 20 72 75 6e 2d 74 69 6d 65 20  s at.  run-time 
1df20 28 74 68 61 74 20 69 73 2c 20 64 75 72 69 6e 67  (that is, during
1df30 20 63 61 6c 6c 73 20 74 6f 20 5b 73 71 6c 69 74   calls to [sqlit
1df40 65 33 5f 73 74 65 70 28 29 5d 29 2e 0a 20 20 5e  e3_step()])..  ^
1df50 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74  The purpose of t
1df60 68 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 66  he unlikely(X) f
1df70 75 6e 63 74 69 6f 6e 20 69 73 20 74 6f 20 70 72  unction is to pr
1df80 6f 76 69 64 65 20 61 20 68 69 6e 74 0a 20 20 74  ovide a hint.  t
1df90 6f 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  o the query plan
1dfa0 6e 65 72 20 74 68 61 74 20 74 68 65 20 61 72 67  ner that the arg
1dfb0 75 6d 65 6e 74 20 58 20 69 73 20 61 20 62 6f 6f  ument X is a boo
1dfc0 6c 65 61 6e 20 76 61 6c 75 65 0a 20 20 74 68 61  lean value.  tha
1dfd0 74 20 69 73 20 75 73 75 61 6c 6c 79 20 6e 6f 74  t is usually not
1dfe0 20 74 72 75 65 2e 20 5e 28 54 68 65 20 75 6e 6c   true. ^(The unl
1dff0 69 6b 65 6c 79 28 58 29 20 66 75 6e 63 74 69 6f  ikely(X) functio
1e000 6e 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a  n is equivalent.
1e010 20 20 74 6f 20 5b 6c 69 6b 65 6c 69 68 6f 6f 64    to [likelihood
1e020 5d 28 58 2c 20 30 2e 30 36 32 35 29 2e 29 5e 0a  ](X, 0.0625).)^.
1e030 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 75 6e 69 63  }..funcdef {unic
1e040 6f 64 65 28 58 29 7d 20 7b 7d 20 7b 0a 20 20 5e  ode(X)} {} {.  ^
1e050 54 68 65 20 75 6e 69 63 6f 64 65 28 58 29 20 66  The unicode(X) f
1e060 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
1e070 74 68 65 20 6e 75 6d 65 72 69 63 20 75 6e 69 63  the numeric unic
1e080 6f 64 65 20 63 6f 64 65 20 70 6f 69 6e 74 20 63  ode code point c
1e090 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0a  orresponding to.
1e0a0 20 20 74 68 65 20 66 69 72 73 74 20 63 68 61 72    the first char
1e0b0 61 63 74 65 72 20 6f 66 20 74 68 65 20 73 74 72  acter of the str
1e0c0 69 6e 67 20 58 2e 20 20 49 66 20 74 68 65 20 61  ing X.  If the a
1e0d0 72 67 75 6d 65 6e 74 20 74 6f 20 75 6e 69 63 6f  rgument to unico
1e0e0 64 65 28 58 29 20 69 73 20 6e 6f 74 20 61 20 73  de(X) is not a s
1e0f0 74 72 69 6e 67 0a 20 20 74 68 65 6e 20 74 68 65  tring.  then the
1e100 20 72 65 73 75 6c 74 20 69 73 20 75 6e 64 65 66   result is undef
1e110 69 6e 65 64 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66  ined..}..funcdef
1e120 20 7b 75 70 70 65 72 28 58 29 7d 20 7b 7d 20 7b   {upper(X)} {} {
1e130 0a 20 20 5e 54 68 65 20 75 70 70 65 72 28 58 29  .  ^The upper(X)
1e140 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
1e150 73 20 61 20 63 6f 70 79 20 6f 66 20 69 6e 70 75  s a copy of inpu
1e160 74 20 73 74 72 69 6e 67 20 58 20 69 6e 20 77 68  t string X in wh
1e170 69 63 68 20 61 6c 6c 20 0a 20 20 6c 6f 77 65 72  ich all .  lower
1e180 2d 63 61 73 65 20 41 53 43 49 49 20 63 68 61 72  -case ASCII char
1e190 61 63 74 65 72 73 20 61 72 65 20 63 6f 6e 76 65  acters are conve
1e1a0 72 74 65 64 20 74 6f 20 74 68 65 69 72 20 75 70  rted to their up
1e1b0 70 65 72 2d 63 61 73 65 20 65 71 75 69 76 61 6c  per-case equival
1e1c0 65 6e 74 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20  ent..}..funcdef 
1e1d0 7b 7a 65 72 6f 62 6c 6f 62 28 4e 29 7d 20 7b 7d  {zeroblob(N)} {}
1e1e0 20 7b 0a 20 20 5e 54 68 65 20 7a 65 72 6f 62 6c   {.  ^The zerobl
1e1f0 6f 62 28 4e 29 20 66 75 6e 63 74 69 6f 6e 20 72  ob(N) function r
1e200 65 74 75 72 6e 73 20 61 20 42 4c 4f 42 20 63 6f  eturns a BLOB co
1e210 6e 73 69 73 74 69 6e 67 20 6f 66 20 4e 20 62 79  nsisting of N by
1e220 74 65 73 20 6f 66 20 30 78 30 30 2e 0a 20 20 53  tes of 0x00..  S
1e230 51 4c 69 74 65 20 6d 61 6e 61 67 65 73 20 74 68  QLite manages th
1e240 65 73 65 20 7a 65 72 6f 62 6c 6f 62 73 20 76 65  ese zeroblobs ve
1e250 72 79 20 65 66 66 69 63 69 65 6e 74 6c 79 2e 20  ry efficiently. 
1e260 20 5a 65 72 6f 62 6c 6f 62 73 20 63 61 6e 20 62   Zeroblobs can b
1e270 65 20 75 73 65 64 20 74 6f 0a 20 20 72 65 73 65  e used to.  rese
1e280 72 76 65 20 73 70 61 63 65 20 66 6f 72 20 61 20  rve space for a 
1e290 42 4c 4f 42 20 74 68 61 74 20 69 73 20 6c 61 74  BLOB that is lat
1e2a0 65 72 20 77 72 69 74 74 65 6e 20 75 73 69 6e 67  er written using
1e2b0 20 0a 20 20 5b 73 71 6c 69 74 65 33 5f 62 6c 6f   .  [sqlite3_blo
1e2c0 62 5f 6f 70 65 6e 28 29 20 7c 20 69 6e 63 72 65  b_open() | incre
1e2d0 6d 65 6e 74 61 6c 20 42 4c 4f 42 20 49 2f 4f 5d  mental BLOB I/O]
1e2e0 2e 0a 20 20 5e 54 68 69 73 20 53 51 4c 20 66 75  ..  ^This SQL fu
1e2f0 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d  nction is implem
1e300 65 6e 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  ented using the 
1e310 5b 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  [sqlite3_result_
1e320 7a 65 72 6f 62 6c 6f 62 28 29 5d 0a 20 20 72 6f  zeroblob()].  ro
1e330 75 74 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 43  utine from the C
1e340 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
1e350 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65  }.</tcl>..<p>The
1e360 20 63 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20   core functions 
1e370 73 68 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20  shown below are 
1e380 61 76 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66  available by def
1e390 61 75 6c 74 2e 20 0a 5b 64 61 74 65 66 75 6e 63  ault. .[datefunc
1e3a0 20 7c 20 44 61 74 65 20 26 61 6d 70 3b 20 54 69   | Date &amp; Ti
1e3b0 6d 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2c 0a 5b  me functions],.[
1e3c0 61 67 67 66 75 6e 63 20 7c 20 61 67 67 72 65 67  aggfunc | aggreg
1e3d0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 2c 0a  ate functions],.
1e3e0 5b 62 75 69 6c 74 69 6e 20 77 69 6e 64 6f 77 20  [builtin window 
1e3f0 66 75 6e 63 74 69 6f 6e 73 7c 77 69 6e 64 6f 77  functions|window
1e400 20 66 75 6e 63 74 69 6f 6e 73 5d 2c 20 61 6e 64   functions], and
1e410 0a 5b 6a 73 6f 6e 31 20 7c 20 4a 53 4f 4e 20 66  .[json1 | JSON f
1e420 75 6e 63 74 69 6f 6e 73 5d 20 61 72 65 20 64 6f  unctions] are do
1e430 63 75 6d 65 6e 74 65 64 20 73 65 70 61 72 61 74  cumented separat
1e440 65 6c 79 2e 20 20 41 6e 0a 61 70 70 6c 69 63 61  ely.  An.applica
1e450 74 69 6f 6e 20 6d 61 79 20 64 65 66 69 6e 65 20  tion may define 
1e460 61 64 64 69 74 69 6f 6e 61 6c 0a 66 75 6e 63 74  additional.funct
1e470 69 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20  ions written in 
1e480 43 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 74  C and added to t
1e490 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 67 69  he database engi
1e4a0 6e 65 20 75 73 69 6e 67 0a 74 68 65 20 5b 73 71  ne using.the [sq
1e4b0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
1e4c0 63 74 69 6f 6e 28 29 5d 20 41 50 49 2e 3c 2f 70  ction()] API.</p
1e4d0 3e 0a 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c 78 20  >..<tcl>.set lx 
1e4e0 7b 7d 0a 66 6f 72 65 61 63 68 20 62 61 73 65 73  {}.foreach bases
1e4f0 79 6e 74 61 78 20 5b 61 72 72 61 79 20 6e 61 6d  yntax [array nam
1e500 65 73 20 63 6f 72 65 66 75 6e 63 73 65 74 5d 20  es corefuncset] 
1e510 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73 79 6e  {.  foreach {syn
1e520 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73  tax keywords des
1e530 63 7d 20 24 63 6f 72 65 66 75 6e 63 73 65 74 28  c} $corefuncset(
1e540 24 62 61 73 65 73 79 6e 74 61 78 29 20 62 72 65  $basesyntax) bre
1e550 61 6b 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b 61  ak.  regexp {^[a
1e560 2d 7a 5f 5d 2b 7d 20 24 62 61 73 65 73 79 6e 74  -z_]+} $basesynt
1e570 61 78 20 66 72 61 67 6d 65 6e 74 0a 20 20 66 6f  ax fragment.  fo
1e580 72 65 61 63 68 20 63 6f 72 65 73 79 6e 74 61 78  reach coresyntax
1e590 20 24 73 79 6e 74 61 78 20 7b 0a 20 20 20 20 6c   $syntax {.    l
1e5a0 61 70 70 65 6e 64 20 6c 78 20 5b 6c 69 73 74 20  append lx [list 
1e5b0 24 66 72 61 67 6d 65 6e 74 20 24 63 6f 72 65 73  $fragment $cores
1e5c0 79 6e 74 61 78 20 30 5d 0a 20 20 7d 0a 7d 0a 68  yntax 0].  }.}.h
1e5d0 64 5f 6c 69 73 74 5f 6f 66 5f 6c 69 6e 6b 73 20  d_list_of_links 
1e5e0 7b 7d 20 32 32 35 20 5b 6c 73 6f 72 74 20 2d 69  {} 225 [lsort -i
1e5f0 6e 64 65 78 20 31 20 24 6c 78 5d 0a 0a 68 64 5f  ndex 1 $lx]..hd_
1e600 70 75 74 73 6e 6c 20 22 3c 68 72 20 63 6c 61 73  putsnl "<hr clas
1e610 73 3d 27 78 68 72 27 3e 22 0a 68 64 5f 70 75 74  s='xhr'>".hd_put
1e620 73 6e 6c 20 22 3c 64 6c 3e 22 0a 66 6f 72 65 61  snl "<dl>".forea
1e630 63 68 20 62 61 73 65 73 79 6e 74 61 78 20 5b 6c  ch basesyntax [l
1e640 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65  sort [array name
1e650 73 20 63 6f 72 65 66 75 6e 63 73 65 74 5d 5d 20  s corefuncset]] 
1e660 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 73 79 6e  {.  foreach {syn
1e670 74 61 78 20 6b 65 79 77 6f 72 64 73 20 64 65 73  tax keywords des
1e680 63 7d 20 24 63 6f 72 65 66 75 6e 63 73 65 74 28  c} $corefuncset(
1e690 24 62 61 73 65 73 79 6e 74 61 78 29 20 62 72 65  $basesyntax) bre
1e6a0 61 6b 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ak.  regsub -all
1e6b0 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74   {\s+} [string t
1e6c0 72 69 6d 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62  rim $syntax] {<b
1e6d0 72 20 2f 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72  r />} syntax.  r
1e6e0 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b  egsub -all {\(([
1e6f0 5e 2a 29 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61  ^*)]+)\)} $synta
1e700 78 20 7b 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20  x {(<i>\1</i>)} 
1e710 73 79 6e 74 61 78 0a 20 20 72 65 67 73 75 62 20  syntax.  regsub 
1e720 2d 61 6c 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78  -all {,} $syntax
1e730 20 7b 3c 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74   {</i>,<i>} synt
1e740 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  ax.  regsub -all
1e750 20 7b 3c 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d   {<i>\.\.\.</i>}
1e760 20 24 73 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73   $syntax {...} s
1e770 79 6e 74 61 78 0a 20 20 72 65 67 65 78 70 20 7b  yntax.  regexp {
1e780 5e 5b 61 2d 7a 5d 2b 7d 20 24 62 61 73 65 73 79  ^[a-z]+} $basesy
1e790 6e 74 61 78 20 66 72 61 67 6d 65 6e 74 0a 20 20  ntax fragment.  
1e7a0 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65  if {[llength $ke
1e7b0 79 77 6f 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20  ywords]==0} {.  
1e7c0 20 20 72 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d    regexp {[a-z_]
1e7d0 2b 7d 20 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a  +} $syntax name.
1e7e0 20 20 20 20 68 64 5f 66 72 61 67 6d 65 6e 74 20      hd_fragment 
1e7f0 24 6e 61 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b  $name *$name "${
1e800 6e 61 6d 65 7d 28 29 20 53 51 4c 20 66 75 6e 63  name}() SQL func
1e810 74 69 6f 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b  tion".  } else {
1e820 0a 20 20 20 20 73 65 74 20 66 72 61 67 6e 61 6d  .    set fragnam
1e830 65 20 5b 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f  e [lindex $keywo
1e840 72 64 73 20 30 5d 0a 20 20 20 20 72 65 67 73 75  rds 0].    regsu
1e850 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20  b -all {[^a-z]} 
1e860 24 66 72 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61  $fragname {} fra
1e870 67 6e 61 6d 65 0a 20 20 20 20 68 64 5f 66 72 61  gname.    hd_fra
1e880 67 6d 65 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a  gment $fragname.
1e890 20 20 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77      eval hd_keyw
1e8a0 6f 72 64 73 20 5b 73 74 72 69 6e 67 20 6d 61 70  ords [string map
1e8b0 20 7b 5c 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f   {\n { }} $keywo
1e8c0 72 64 73 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75  rds].  }.  hd_pu
1e8d0 74 73 20 22 3c 64 74 3e 3c 70 3e 3c 62 3e 24 73  ts "<dt><p><b>$s
1e8e0 79 6e 74 61 78 3c 2f 62 3e 3c 2f 64 74 3e 22 0a  yntax</b></dt>".
1e8f0 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 22 3c 64    hd_resolve "<d
1e900 64 3e 3c 70 3e 24 64 65 73 63 3c 2f 64 64 3e 5c  d><p>$desc</dd>\
1e910 6e 22 0a 7d 0a 68 64 5f 70 75 74 73 6e 6c 20 22  n".}.hd_putsnl "
1e920 3c 2f 64 6c 3e 22 0a 0a 23 23 23 23 23 23 23 23  </dl>"..########
1e930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e970 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b  ######.Section {
1e980 44 61 74 65 20 41 6e 64 20 54 69 6d 65 20 46 75  Date And Time Fu
1e990 6e 63 74 69 6f 6e 73 7d 20 64 61 74 65 66 75 6e  nctions} datefun
1e9a0 63 20 7b 2a 64 61 74 65 66 75 6e 63 20 7b 64 61  c {*datefunc {da
1e9b0 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e 63  te and time func
1e9c0 74 69 6f 6e 73 7d 7d 0a 68 64 5f 6b 65 79 77 6f  tions}}.hd_keywo
1e9d0 72 64 73 20 7b 64 61 74 65 28 29 20 53 51 4c 20  rds {date() SQL 
1e9e0 66 75 6e 63 74 69 6f 6e 7d 20 7b 74 69 6d 65 28  function} {time(
1e9f0 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d 0a  ) SQL function}.
1ea00 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 64 61 74  hd_keywords {dat
1ea10 65 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e 63  etime() SQL func
1ea20 74 69 6f 6e 7d 20 7b 6a 75 6c 69 61 6e 64 61 79  tion} {julianday
1ea30 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 7d  () SQL function}
1ea40 0a 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 73 74  .hd_keywords {st
1ea50 72 66 74 69 6d 65 28 29 20 53 51 4c 20 66 75 6e  rftime() SQL fun
1ea60 63 74 69 6f 6e 7d 0a 3c 2f 74 63 6c 3e 0a 0a 3c  ction}.</tcl>..<
1ea70 70 3e 0a 53 51 4c 69 74 65 20 73 75 70 70 6f 72  p>.SQLite suppor
1ea80 74 73 20 66 69 76 65 20 64 61 74 65 20 61 6e 64  ts five date and
1ea90 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20   time functions 
1eaa0 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 3c 2f 70 3e  as follows:.</p>
1eab0 0a 0a 3c 70 3e 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 20  ..<p>.<ol>.<li> 
1eac0 5e 28 3c 62 3e 64 61 74 65 28 3c 2f 62 3e 3c 69  ^(<b>date(</b><i
1ead0 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
1eae0 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
1eaf0 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
1eb00 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28  )^ </li>.<li> ^(
1eb10 3c 62 3e 74 69 6d 65 28 3c 2f 62 3e 3c 69 3e 74  <b>time(</b><i>t
1eb20 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66  imestring, modif
1eb30 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e  ier, modifier, .
1eb40 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e  ..</i><b>)</b>)^
1eb50 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28 3c 62   </li>.<li> ^(<b
1eb60 3e 64 61 74 65 74 69 6d 65 28 3c 2f 62 3e 3c 69  >datetime(</b><i
1eb70 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64  >timestring, mod
1eb80 69 66 69 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c  ifier, modifier,
1eb90 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e   ...</i><b>)</b>
1eba0 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 20 5e 28  )^ </li>.<li> ^(
1ebb0 3c 62 3e 6a 75 6c 69 61 6e 64 61 79 28 3c 2f 62  <b>julianday(</b
1ebc0 3e 3c 69 3e 74 69 6d 65 73 74 72 69 6e 67 2c 20  ><i>timestring, 
1ebd0 6d 6f 64 69 66 69 65 72 2c 20 6d 6f 64 69 66 69  modifier, modifi
1ebe0 65 72 2c 20 2e 2e 2e 3c 2f 69 3e 3c 62 3e 29 3c  er, ...</i><b>)<
1ebf0 2f 62 3e 29 5e 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e  /b>)^ </li>.<li>
1ec00 20 5e 28 3c 62 3e 73 74 72 66 74 69 6d 65 28 3c   ^(<b>strftime(<
1ec10 2f 62 3e 3c 69 3e 66 6f 72 6d 61 74 2c 20 74 69  /b><i>format, ti
1ec20 6d 65 73 74 72 69 6e 67 2c 20 6d 6f 64 69 66 69  mestring, modifi
1ec30 65 72 2c 20 6d 6f 64 69 66 69 65 72 2c 20 2e 2e  er, modifier, ..
1ec40 2e 3c 2f 69 3e 3c 62 3e 29 3c 2f 62 3e 29 5e 20  .</i><b>)</b>)^ 
1ec50 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </li>.</ol>..<p>
1ec60 0a 5e 41 6c 6c 20 66 69 76 65 20 64 61 74 65 20  .^All five date 
1ec70 61 6e 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f  and time functio
1ec80 6e 73 20 74 61 6b 65 20 61 20 74 69 6d 65 20 73  ns take a time s
1ec90 74 72 69 6e 67 20 61 73 20 61 6e 20 61 72 67 75  tring as an argu
1eca0 6d 65 6e 74 2e 20 0a 5e 54 68 65 20 74 69 6d 65  ment. .^The time
1ecb0 20 73 74 72 69 6e 67 20 69 73 20 66 6f 6c 6c 6f   string is follo
1ecc0 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d  wed by zero or m
1ecd0 6f 72 65 20 6d 6f 64 69 66 69 65 72 73 2e 20 0a  ore modifiers. .
1ece0 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28 29 20  ^The strftime() 
1ecf0 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20 74 61  function also ta
1ed00 6b 65 73 20 61 20 66 6f 72 6d 61 74 20 73 74 72  kes a format str
1ed10 69 6e 67 20 61 73 20 69 74 73 20 66 69 72 73 74  ing as its first
1ed20 20 61 72 67 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a   argument..</p>.
1ed30 0a 3c 70 3e 0a 54 68 65 20 64 61 74 65 20 61 6e  .<p>.The date an
1ed40 64 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  d time functions
1ed50 20 75 73 65 20 61 20 73 75 62 73 65 74 20 6f 66   use a subset of
1ed60 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69  .[http://en.wiki
1ed70 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 49  pedia.org/wiki/I
1ed80 53 4f 5f 38 36 30 31 20 7c 20 49 53 30 2d 38 36  SO_8601 | IS0-86
1ed90 30 31 5d 20 64 61 74 65 20 61 6e 64 20 74 69 6d  01] date and tim
1eda0 65 0a 66 6f 72 6d 61 74 73 2e 0a 5e 54 68 65 20  e.formats..^The 
1edb0 64 61 74 65 28 29 20 66 75 6e 63 74 69 6f 6e 20  date() function 
1edc0 72 65 74 75 72 6e 73 20 74 68 65 20 64 61 74 65  returns the date
1edd0 20 69 6e 20 74 68 69 73 20 66 6f 72 6d 61 74 3a   in this format:
1ede0 20 59 59 59 59 2d 4d 4d 2d 44 44 2e 20 0a 5e 54   YYYY-MM-DD. .^T
1edf0 68 65 20 74 69 6d 65 28 29 20 66 75 6e 63 74 69  he time() functi
1ee00 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 74  on returns the t
1ee10 69 6d 65 20 61 73 20 48 48 3a 4d 4d 3a 53 53 2e  ime as HH:MM:SS.
1ee20 20 0a 5e 54 68 65 20 64 61 74 65 74 69 6d 65 28   .^The datetime(
1ee30 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  ) function retur
1ee40 6e 73 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48  ns "YYYY-MM-DD H
1ee50 48 3a 4d 4d 3a 53 53 22 2e 20 0a 5e 28 54 68 65  H:MM:SS". .^(The
1ee60 20 6a 75 6c 69 61 6e 64 61 79 28 29 20 66 75 6e   julianday() fun
1ee70 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68  ction returns th
1ee80 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69  e .[http://en.wi
1ee90 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1eea0 2f 4a 75 6c 69 61 6e 5f 64 61 79 20 7c 20 4a 75  /Julian_day | Ju
1eeb0 6c 69 61 6e 20 64 61 79 5d 20 2d 20 74 68 65 0a  lian day] - the.
1eec0 6e 75 6d 62 65 72 20 6f 66 20 64 61 79 73 20 73  number of days s
1eed0 69 6e 63 65 20 6e 6f 6f 6e 20 69 6e 20 47 72 65  ince noon in Gre
1eee0 65 6e 77 69 63 68 20 6f 6e 20 4e 6f 76 65 6d 62  enwich on Novemb
1eef0 65 72 20 32 34 2c 20 34 37 31 34 20 42 2e 43 2e  er 24, 4714 B.C.
1ef00 20 0a 28 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69   .([http://en.wi
1ef10 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69  kipedia.org/wiki
1ef20 2f 50 72 6f 6c 65 70 74 69 63 5f 47 72 65 67 6f  /Proleptic_Grego
1ef30 72 69 61 6e 5f 63 61 6c 65 6e 64 61 72 20 7c 20  rian_calendar | 
1ef40 50 72 6f 6c 65 70 74 69 63 20 47 72 65 67 6f 72  Proleptic Gregor
1ef50 69 61 6e 20 63 61 6c 65 6e 64 61 72 5d 29 2e 29  ian calendar]).)
1ef60 5e 0a 5e 54 68 65 20 73 74 72 66 74 69 6d 65 28  ^.^The strftime(
1ef70 29 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  ) routine return
1ef80 73 20 74 68 65 20 64 61 74 65 20 66 6f 72 6d 61  s the date forma
1ef90 74 74 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  tted according t
1efa0 6f 20 0a 74 68 65 20 66 6f 72 6d 61 74 20 73 74  o .the format st
1efb0 72 69 6e 67 20 73 70 65 63 69 66 69 65 64 20 61  ring specified a
1efc0 73 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  s the first argu
1efd0 6d 65 6e 74 2e 0a 5e 54 68 65 20 66 6f 72 6d 61  ment..^The forma
1efe0 74 20 73 74 72 69 6e 67 20 73 75 70 70 6f 72 74  t string support
1eff0 73 20 74 68 65 20 6d 6f 73 74 20 63 6f 6d 6d 6f  s the most commo
1f000 6e 20 73 75 62 73 74 69 74 75 74 69 6f 6e 73 20  n substitutions 
1f010 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 0a 5b 68  found in the .[h
1f020 74 74 70 3a 2f 2f 6f 70 65 6e 67 72 6f 75 70 2e  ttp://opengroup.
1f030 6f 72 67 2f 6f 6e 6c 69 6e 65 70 75 62 73 2f 30  org/onlinepubs/0
1f040 30 37 39 30 38 37 39 39 2f 78 73 68 2f 73 74 72  07908799/xsh/str
1f050 66 74 69 6d 65 2e 68 74 6d 6c 20 7c 20 73 74 72  ftime.html | str
1f060 66 74 69 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e  ftime() function
1f070 5d 0a 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64  ].from the stand
1f080 61 72 64 20 43 20 6c 69 62 72 61 72 79 20 70 6c  ard C library pl
1f090 75 73 20 74 77 6f 20 6e 65 77 20 73 75 62 73 74  us two new subst
1f0a0 69 74 75 74 69 6f 6e 73 2c 20 25 66 20 61 6e 64  itutions, %f and
1f0b0 20 25 4a 2e 0a 5e 28 54 68 65 20 66 6f 6c 6c 6f   %J..^(The follo
1f0c0 77 69 6e 67 20 69 73 20 61 20 63 6f 6d 70 6c 65  wing is a comple
1f0d0 74 65 20 6c 69 73 74 20 6f 66 20 76 61 6c 69 64  te list of valid
1f0e0 20 73 74 72 66 74 69 6d 65 28 29 20 73 75 62 73   strftime() subs
1f0f0 74 69 74 75 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a  titutions:.</p>.
1f100 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74  .<blockquote>.<t
1f110 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20  able border="0" 
1f120 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 30 22 20  cellpadding="0" 
1f130 63 65 6c 6c 73 70 61 63 69 6e 67 3d 22 30 22 3e  cellspacing="0">
1f140 0a 3c 74 72 3e 3c 74 64 3e 3c 74 64 20 77 69 64  .<tr><td><td wid
1f150 74 68 3d 22 31 30 22 3e 3c 74 64 3e 3c 2f 74 72  th="10"><td></tr
1f160 3e 0a 0a 3c 74 72 3e 3c 74 64 3e 20 25 64 20 3c  >..<tr><td> %d <
1f170 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 6d  td><td> day of m
1f180 6f 6e 74 68 3a 20 30 30 0a 3c 74 72 3e 3c 74 64  onth: 00.<tr><td
1f190 3e 20 25 66 20 3c 74 64 3e 3c 74 64 3e 20 66 72  > %f <td><td> fr
1f1a0 61 63 74 69 6f 6e 61 6c 20 73 65 63 6f 6e 64 73  actional seconds
1f1b0 3a 20 53 53 2e 53 53 53 0a 3c 74 72 3e 3c 74 64  : SS.SSS.<tr><td
1f1c0 3e 20 25 48 20 3c 74 64 3e 3c 74 64 3e 20 68 6f  > %H <td><td> ho
1f1d0 75 72 3a 20 30 30 2d 32 34 20 0a 3c 74 72 3e 3c  ur: 00-24 .<tr><
1f1e0 74 64 3e 20 25 6a 20 3c 74 64 3e 3c 74 64 3e 20  td> %j <td><td> 
1f1f0 64 61 79 20 6f 66 20 79 65 61 72 3a 20 30 30 31  day of year: 001
1f200 2d 33 36 36 0a 3c 74 72 3e 3c 74 64 3e 20 25 4a  -366.<tr><td> %J
1f210 20 3c 74 64 3e 3c 74 64 3e 20 4a 75 6c 69 61 6e   <td><td> Julian
1f220 20 64 61 79 20 6e 75 6d 62 65 72 0a 3c 74 72 3e   day number.<tr>
1f230 3c 74 64 3e 20 25 6d 20 3c 74 64 3e 3c 74 64 3e  <td> %m <td><td>
1f240 20 6d 6f 6e 74 68 3a 20 30 31 2d 31 32 0a 3c 74   month: 01-12.<t
1f250 72 3e 3c 74 64 3e 20 25 4d 20 3c 74 64 3e 3c 74  r><td> %M <td><t
1f260 64 3e 20 6d 69 6e 75 74 65 3a 20 30 30 2d 35 39  d> minute: 00-59
1f270 0a 3c 74 72 3e 3c 74 64 3e 20 25 73 20 3c 74 64  .<tr><td> %s <td
1f280 3e 3c 74 64 3e 20 73 65 63 6f 6e 64 73 20 73 69  ><td> seconds si
1f290 6e 63 65 20 31 39 37 30 2d 30 31 2d 30 31 0a 3c  nce 1970-01-01.<
1f2a0 74 72 3e 3c 74 64 3e 20 25 53 20 3c 74 64 3e 3c  tr><td> %S <td><
1f2b0 74 64 3e 20 73 65 63 6f 6e 64 73 3a 20 30 30 2d  td> seconds: 00-
1f2c0 35 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 77 20 3c  59.<tr><td> %w <
1f2d0 74 64 3e 3c 74 64 3e 20 64 61 79 20 6f 66 20 77  td><td> day of w
1f2e0 65 65 6b 20 30 2d 36 20 77 69 74 68 20 53 75 6e  eek 0-6 with Sun
1f2f0 64 61 79 3d 3d 30 0a 3c 74 72 3e 3c 74 64 3e 20  day==0.<tr><td> 
1f300 25 57 20 3c 74 64 3e 3c 74 64 3e 20 77 65 65 6b  %W <td><td> week
1f310 20 6f 66 20 79 65 61 72 3a 20 30 30 2d 35 33 0a   of year: 00-53.
1f320 3c 74 72 3e 3c 74 64 3e 20 25 59 20 3c 74 64 3e  <tr><td> %Y <td>
1f330 3c 74 64 3e 20 79 65 61 72 3a 20 30 30 30 30 2d  <td> year: 0000-
1f340 39 39 39 39 0a 3c 74 72 3e 3c 74 64 3e 20 25 25  9999.<tr><td> %%
1f350 20 3c 74 64 3e 3c 74 64 3e 20 25 0a 3c 2f 74 61   <td><td> %.</ta
1f360 62 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  ble>.</blockquot
1f370 65 3e 29 5e 0a 0a 3c 70 3e 0a 5e 28 4e 6f 74 69  e>)^..<p>.^(Noti
1f380 63 65 20 74 68 61 74 20 61 6c 6c 20 6f 74 68 65  ce that all othe
1f390 72 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20  r date and time 
1f3a0 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 62 65  functions can be
1f3b0 20 65 78 70 72 65 73 73 65 64 0a 69 6e 20 74 65   expressed.in te
1f3c0 72 6d 73 20 6f 66 20 73 74 72 66 74 69 6d 65 28  rms of strftime(
1f3d0 29 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ):.</p>..<blockq
1f3e0 75 6f 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  uote>.<table bor
1f3f0 64 65 72 3d 22 30 22 20 63 65 6c 6c 70 61 64 64  der="0" cellpadd
1f400 69 6e 67 3d 22 30 22 20 63 65 6c 6c 73 70 61 63  ing="0" cellspac
1f410 69 6e 67 3d 22 30 22 3e 0a 3c 74 72 3e 3c 74 64  ing="0">.<tr><td
1f420 3e 3c 62 3e 46 75 6e 63 74 69 6f 6e 3c 2f 62 3e  ><b>Function</b>
1f430 3c 74 64 20 77 69 64 74 68 3d 22 33 30 22 3e 3c  <td width="30"><
1f440 74 64 3e 3c 62 3e 45 71 75 69 76 61 6c 65 6e 74  td><b>Equivalent
1f450 20 73 74 72 66 74 69 6d 65 28 29 3c 2f 62 3e 0a   strftime()</b>.
1f460 3c 74 72 3e 3c 74 64 3e 20 20 20 64 61 74 65 28  <tr><td>   date(
1f470 2e 2e 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74  ...)      <td><t
1f480 64 3e 20 20 73 74 72 66 74 69 6d 65 28 27 25 59  d>  strftime('%Y
1f490 2d 25 6d 2d 25 64 27 2c 20 2e 2e 2e 29 0a 3c 74  -%m-%d', ...).<t
1f4a0 72 3e 3c 74 64 3e 20 20 20 74 69 6d 65 28 2e 2e  r><td>   time(..
1f4b0 2e 29 20 20 20 20 20 20 3c 74 64 3e 3c 74 64 3e  .)      <td><td>
1f4c0 20 20 73 74 72 66 74 69 6d 65 28 27 25 48 3a 25    strftime('%H:%
1f4d0 4d 3a 25 53 27 2c 20 2e 2e 2e 29 0a 3c 74 72 3e  M:%S', ...).<tr>
1f4e0 3c 74 64 3e 20 20 20 64 61 74 65 74 69 6d 65 28  <td>   datetime(
1f4f0 2e 2e 2e 29 20 20 3c 74 64 3e 3c 74 64 3e 20 20  ...)  <td><td>  
1f500 73 74 72 66 74 69 6d 65 28 27 25 59 2d 25 6d 2d  strftime('%Y-%m-
1f510 25 64 20 25 48 3a 25 4d 3a 25 53 27 2c 20 2e 2e  %d %H:%M:%S', ..
1f520 2e 29 0a 3c 74 72 3e 3c 74 64 3e 20 20 20 6a 75  .).<tr><td>   ju
1f530 6c 69 61 6e 64 61 79 28 2e 2e 2e 29 20 3c 74 64  lianday(...) <td
1f540 3e 3c 74 64 3e 20 20 73 74 72 66 74 69 6d 65 28  ><td>  strftime(
1f550 27 25 4a 27 2c 20 2e 2e 2e 29 0a 3c 2f 74 61 62  '%J', ...).</tab
1f560 6c 65 3e 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  le>.</blockquote
1f570 3e 29 5e 0a 0a 3c 70 3e 0a 54 68 65 20 6f 6e 6c  >)^..<p>.The onl
1f580 79 20 72 65 61 73 6f 6e 73 20 66 6f 72 20 70 72  y reasons for pr
1f590 6f 76 69 64 69 6e 67 20 66 75 6e 63 74 69 6f 6e  oviding function
1f5a0 73 20 6f 74 68 65 72 20 74 68 61 6e 20 73 74 72  s other than str
1f5b0 66 74 69 6d 65 28 29 20 69 73 0a 66 6f 72 20 63  ftime() is.for c
1f5c0 6f 6e 76 65 6e 69 65 6e 63 65 20 61 6e 64 20 66  onvenience and f
1f5d0 6f 72 20 65 66 66 69 63 69 65 6e 63 79 2e 0a 3c  or efficiency..<
1f5e0 2f 70 3e 0a 0a 3c 68 33 3e 54 69 6d 65 20 53 74  /p>..<h3>Time St
1f5f0 72 69 6e 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  rings</h3>..<p>^
1f600 28 41 20 74 69 6d 65 20 73 74 72 69 6e 67 20 63  (A time string c
1f610 61 6e 20 62 65 20 69 6e 20 61 6e 79 20 6f 66 20  an be in any of 
1f620 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f  the following fo
1f630 72 6d 61 74 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  rmats:</p>..<ol>
1f640 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d 4d  .<li> <i>YYYY-MM
1f650 2d 44 44 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e  -DD</i>.<li> <i>
1f660 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d  YYYY-MM-DD HH:MM
1f670 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
1f680 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
1f690 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59  </i>.<li> <i>YYY
1f6a0 59 2d 4d 4d 2d 44 44 20 48 48 3a 4d 4d 3a 53 53  Y-MM-DD HH:MM:SS
1f6b0 2e 53 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69  .SSS</i>.<li> <i
1f6c0 3e 59 59 59 59 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c  >YYYY-MM-DD</i><
1f6d0 62 3e 54 3c 2f 62 3e 3c 69 3e 48 48 3a 4d 4d 3c  b>T</b><i>HH:MM<
1f6e0 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59  /i>.<li> <i>YYYY
1f6f0 2d 4d 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f  -MM-DD</i><b>T</
1f700 62 3e 3c 69 3e 48 48 3a 4d 4d 3a 53 53 3c 2f 69  b><i>HH:MM:SS</i
1f710 3e 0a 3c 6c 69 3e 20 3c 69 3e 59 59 59 59 2d 4d  >.<li> <i>YYYY-M
1f720 4d 2d 44 44 3c 2f 69 3e 3c 62 3e 54 3c 2f 62 3e  M-DD</i><b>T</b>
1f730 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  <i>HH:MM:SS.SSS<
1f740 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48 3a 4d  /i>.<li> <i>HH:M
1f750 4d 3c 2f 69 3e 0a 3c 6c 69 3e 20 3c 69 3e 48 48  M</i>.<li> <i>HH
1f760 3a 4d 4d 3a 53 53 3c 2f 69 3e 0a 3c 6c 69 3e 20  :MM:SS</i>.<li> 
1f770 3c 69 3e 48 48 3a 4d 4d 3a 53 53 2e 53 53 53 3c  <i>HH:MM:SS.SSS<
1f780 2f 69 3e 0a 3c 6c 69 3e 20 3c 62 3e 6e 6f 77 3c  /i>.<li> <b>now<
1f790 2f 62 3e 0a 3c 6c 69 3e 20 3c 69 3e 44 44 44 44  /b>.<li> <i>DDDD
1f7a0 44 44 44 44 44 44 3c 2f 69 3e 0a 3c 2f 6f 6c 3e  DDDDDD</i>.</ol>
1f7b0 29 5e 0a 0a 3c 70 3e 0a 5e 49 6e 20 66 6f 72 6d  )^..<p>.^In form
1f7c0 61 74 73 20 35 20 74 68 72 6f 75 67 68 20 37 2c  ats 5 through 7,
1f7d0 20 74 68 65 20 22 54 22 20 69 73 20 61 20 6c 69   the "T" is a li
1f7e0 74 65 72 61 6c 20 63 68 61 72 61 63 74 65 72 20  teral character 
1f7f0 73 65 70 61 72 61 74 69 6e 67 20 0a 74 68 65 20  separating .the 
1f800 64 61 74 65 20 61 6e 64 20 74 68 65 20 74 69 6d  date and the tim
1f810 65 2c 20 61 73 20 72 65 71 75 69 72 65 64 20 62  e, as required b
1f820 79 20 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 77  y .[http://www.w
1f830 33 63 2e 6f 72 67 2f 54 52 2f 4e 4f 54 45 2d 64  3c.org/TR/NOTE-d
1f840 61 74 65 74 69 6d 65 20 7c 20 49 53 4f 2d 38 36  atetime | ISO-86
1f850 30 31 5d 2e 20 0a 5e 46 6f 72 6d 61 74 73 20 38  01]. .^Formats 8
1f860 20 74 68 72 6f 75 67 68 20 31 30 20 74 68 61 74   through 10 that
1f870 20 73 70 65 63 69 66 79 20 6f 6e 6c 79 20 61 20   specify only a 
1f880 74 69 6d 65 20 61 73 73 75 6d 65 20 61 20 64 61  time assume a da
1f890 74 65 20 6f 66 20 0a 32 30 30 30 2d 30 31 2d 30  te of .2000-01-0
1f8a0 31 2e 20 46 6f 72 6d 61 74 20 31 31 2c 20 74 68  1. Format 11, th
1f8b0 65 20 73 74 72 69 6e 67 20 27 6e 6f 77 27 2c 20  e string 'now', 
1f8c0 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  is converted int
1f8d0 6f 20 74 68 65 20 0a 63 75 72 72 65 6e 74 20 64  o the .current d
1f8e0 61 74 65 20 61 6e 64 20 74 69 6d 65 20 61 73 20  ate and time as 
1f8f0 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68  obtained from th
1f900 65 20 78 43 75 72 72 65 6e 74 54 69 6d 65 20 6d  e xCurrentTime m
1f910 65 74 68 6f 64 0a 6f 66 20 74 68 65 20 5b 73 71  ethod.of the [sq
1f920 6c 69 74 65 33 5f 76 66 73 5d 20 6f 62 6a 65 63  lite3_vfs] objec
1f930 74 20 69 6e 20 75 73 65 2e 0a 5e 54 68 65 20 27  t in use..^The '
1f940 6e 6f 77 27 20 61 72 67 75 6d 65 6e 74 20 74 6f  now' argument to
1f950 20 64 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66   date and time f
1f960 75 6e 63 74 69 6f 6e 73 20 61 6c 77 61 79 73 20  unctions always 
1f970 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c 79 20  returns exactly 
1f980 74 68 65 0a 73 61 6d 65 20 76 61 6c 75 65 20 66  the.same value f
1f990 6f 72 20 6d 75 6c 74 69 70 6c 65 20 69 6e 76 6f  or multiple invo
1f9a0 63 61 74 69 6f 6e 73 20 77 69 74 68 69 6e 20 74  cations within t
1f9b0 68 65 20 73 61 6d 65 20 5b 73 71 6c 69 74 65 33  he same [sqlite3
1f9c0 5f 73 74 65 70 28 29 5d 20 63 61 6c 6c 2e 0a 5e  _step()] call..^
1f9d0 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70  [http://en.wikip
1f9e0 65 64 69 61 2e 6f 72 67 2f 77 69 6b 69 2f 43 6f  edia.org/wiki/Co
1f9f0 6f 72 64 69 6e 61 74 65 64 5f 55 6e 69 76 65 72  ordinated_Univer
1fa00 73 61 6c 5f 54 69 6d 65 20 7c 20 55 6e 69 76 65  sal_Time | Unive
1fa10 72 73 61 6c 20 43 6f 6f 72 64 69 6e 61 74 65 64  rsal Coordinated
1fa20 20 54 69 6d 65 20 28 55 54 43 29 5d 20 69 73 20   Time (UTC)] is 
1fa30 75 73 65 64 2e 20 0a 5e 46 6f 72 6d 61 74 20 31  used. .^Format 1
1fa40 32 20 69 73 20 74 68 65 20 0a 5b 68 74 74 70 3a  2 is the .[http:
1fa50 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69 61 2e 6f  //en.wikipedia.o
1fa60 72 67 2f 77 69 6b 69 2f 4a 75 6c 69 61 6e 5f 64  rg/wiki/Julian_d
1fa70 61 79 20 7c 20 4a 75 6c 69 61 6e 20 64 61 79 20  ay | Julian day 
1fa80 6e 75 6d 62 65 72 5d 0a 65 78 70 72 65 73 73 65  number].expresse
1fa90 64 20 61 73 20 61 20 66 6c 6f 61 74 69 6e 67 20  d as a floating 
1faa0 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 3c 2f 70  point value..</p
1fab0 3e 0a 0a 3c 70 3e 0a 46 6f 72 6d 61 74 73 20 32  >..<p>.Formats 2
1fac0 20 74 68 72 6f 75 67 68 20 31 30 20 6d 61 79 20   through 10 may 
1fad0 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  be optionally fo
1fae0 6c 6c 6f 77 65 64 20 62 79 20 61 20 74 69 6d 65  llowed by a time
1faf0 7a 6f 6e 65 20 69 6e 64 69 63 61 74 6f 72 20 6f  zone indicator o
1fb00 66 20 74 68 65 20 66 6f 72 6d 0a 22 3c 69 3e 26  f the form."<i>&
1fb10 23 39 31 3b 2b 2d 26 23 39 33 3b 48 48 3a 4d 4d  #91;+-&#93;HH:MM
1fb20 3c 2f 69 3e 22 20 6f 72 20 6a 75 73 74 20 22 3c  </i>" or just "<
1fb30 69 3e 5a 3c 2f 69 3e 22 2e 20 20 54 68 65 20 64  i>Z</i>".  The d
1fb40 61 74 65 20 61 6e 64 20 74 69 6d 65 20 66 75 6e  ate and time fun
1fb50 63 74 69 6f 6e 73 20 75 73 65 20 55 54 43 20 6f  ctions use UTC o
1fb60 72 20 22 7a 75 6c 75 22 0a 74 69 6d 65 20 69 6e  r "zulu".time in
1fb70 74 65 72 6e 61 6c 6c 79 2c 20 61 6e 64 20 73 6f  ternally, and so
1fb80 20 74 68 65 20 22 5a 22 20 73 75 66 66 69 78 20   the "Z" suffix 
1fb90 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 41 6e 79  is a no-op.  Any
1fba0 20 6e 6f 6e 2d 7a 65 72 6f 20 22 48 48 3a 4d 4d   non-zero "HH:MM
1fbb0 22 20 73 75 66 66 69 78 20 69 73 0a 73 75 62 74  " suffix is.subt
1fbc0 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20  racted from the 
1fbd0 69 6e 64 69 63 61 74 65 64 20 64 61 74 65 20 61  indicated date a
1fbe0 6e 64 20 74 69 6d 65 20 69 6e 20 6f 72 64 65 72  nd time in order
1fbf0 20 74 6f 20 63 6f 6d 70 75 74 65 20 7a 75 6c 75   to compute zulu
1fc00 20 74 69 6d 65 2e 0a 46 6f 72 20 65 78 61 6d 70   time..For examp
1fc10 6c 65 2c 20 61 6c 6c 20 6f 66 20 74 68 65 20 66  le, all of the f
1fc20 6f 6c 6c 6f 77 69 6e 67 20 74 69 6d 65 20 73 74  ollowing time st
1fc30 72 69 6e 67 73 20 61 72 65 20 65 71 75 69 76 61  rings are equiva
1fc40 6c 65 6e 74 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  lent:.</p>..<blo
1fc50 63 6b 71 75 6f 74 65 3e 0a 32 30 31 33 2d 31 30  ckquote>.2013-10
1fc60 2d 30 37 20 30 38 3a 32 33 3a 31 39 2e 31 32 30  -07 08:23:19.120
1fc70 3c 62 72 3e 0a 32 30 31 33 2d 31 30 2d 30 37 54  <br>.2013-10-07T
1fc80 30 38 3a 32 33 3a 31 39 2e 31 32 30 5a 3c 62 72  08:23:19.120Z<br
1fc90 3e 0a 32 30 31 33 2d 31 30 2d 30 37 20 30 34 3a  >.2013-10-07 04:
1fca0 32 33 3a 31 39 2e 31 32 30 2d 30 34 3a 30 30 3c  23:19.120-04:00<
1fcb0 62 72 3e 0a 32 34 35 36 35 37 32 2e 38 34 39 35  br>.2456572.8495
1fcc0 32 36 38 35 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  2685.</blockquot
1fcd0 65 3e 0a 0a 3c 70 3e 0a 5e 28 49 6e 20 66 6f 72  e>..<p>.^(In for
1fce0 6d 61 74 73 20 34 2c 20 37 2c 20 61 6e 64 20 31  mats 4, 7, and 1
1fcf0 30 2c 20 74 68 65 20 66 72 61 63 74 69 6f 6e 61  0, the fractiona
1fd00 6c 20 73 65 63 6f 6e 64 73 20 76 61 6c 75 65 20  l seconds value 
1fd10 53 53 2e 53 53 53 20 63 61 6e 20 68 61 76 65 0a  SS.SSS can have.
1fd20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 64 69 67 69  one or more digi
1fd30 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ts following the
1fd40 20 64 65 63 69 6d 61 6c 20 70 6f 69 6e 74 2e 20   decimal point. 
1fd50 20 45 78 61 63 74 6c 79 20 74 68 72 65 65 20 64   Exactly three d
1fd60 69 67 69 74 73 20 61 72 65 0a 73 68 6f 77 6e 20  igits are.shown 
1fd70 69 6e 20 74 68 65 20 65 78 61 6d 70 6c 65 73 20  in the examples 
1fd80 62 65 63 61 75 73 65 20 6f 6e 6c 79 20 74 68 65  because only the
1fd90 20 66 69 72 73 74 20 74 68 72 65 65 20 64 69 67   first three dig
1fda0 69 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63  its are signific
1fdb0 61 6e 74 0a 74 6f 20 74 68 65 20 72 65 73 75 6c  ant.to the resul
1fdc0 74 2c 20 62 75 74 20 74 68 65 20 69 6e 70 75 74  t, but the input
1fdd0 20 73 74 72 69 6e 67 20 63 61 6e 20 68 61 76 65   string can have
1fde0 20 66 65 77 65 72 20 6f 72 20 6d 6f 72 65 20 74   fewer or more t
1fdf0 68 61 6e 20 74 68 72 65 65 20 64 69 67 69 74 73  han three digits
1fe00 0a 61 6e 64 20 74 68 65 20 64 61 74 65 2f 74 69  .and the date/ti
1fe10 6d 65 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c  me functions wil
1fe20 6c 20 73 74 69 6c 6c 20 6f 70 65 72 61 74 65 20  l still operate 
1fe30 63 6f 72 72 65 63 74 6c 79 2e 29 5e 0a 53 69 6d  correctly.)^.Sim
1fe40 69 6c 61 72 6c 79 2c 20 66 6f 72 6d 61 74 20 31  ilarly, format 1
1fe50 32 20 69 73 20 73 68 6f 77 6e 20 77 69 74 68 20  2 is shown with 
1fe60 31 30 20 73 69 67 6e 69 66 69 63 61 6e 74 20 64  10 significant d
1fe70 69 67 69 74 73 2c 20 62 75 74 20 74 68 65 20 64  igits, but the d
1fe80 61 74 65 2f 74 69 6d 65 0a 66 75 6e 63 74 69 6f  ate/time.functio
1fe90 6e 73 20 77 69 6c 6c 20 72 65 61 6c 6c 79 20 61  ns will really a
1fea0 63 63 65 70 74 20 61 73 20 6d 61 6e 79 20 6f 72  ccept as many or
1feb0 20 61 73 20 66 65 77 20 64 69 67 69 74 73 20 61   as few digits a
1fec0 73 20 61 72 65 20 6e 65 63 65 73 73 61 72 79 20  s are necessary 
1fed0 74 6f 0a 72 65 70 72 65 73 65 6e 74 20 74 68 65  to.represent the
1fee0 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75 6d 62   Julian day numb
1fef0 65 72 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 4d 6f  er..</p>..<h3>Mo
1ff00 64 69 66 69 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70  difiers</h3>..<p
1ff10 3e 5e 54 68 65 20 74 69 6d 65 20 73 74 72 69 6e  >^The time strin
1ff20 67 20 63 61 6e 20 62 65 20 66 6f 6c 6c 6f 77 65  g can be followe
1ff30 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  d by zero or mor
1ff40 65 20 6d 6f 64 69 66 69 65 72 73 20 74 68 61 74  e modifiers that
1ff50 20 0a 61 6c 74 65 72 20 64 61 74 65 20 61 6e 64   .alter date and
1ff60 2f 6f 72 20 74 69 6d 65 2e 20 5e 45 61 63 68 20  /or time. ^Each 
1ff70 6d 6f 64 69 66 69 65 72 0a 69 73 20 61 20 74 72  modifier.is a tr
1ff80 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61  ansformation tha
1ff90 74 20 69 73 20 61 70 70 6c 69 65 64 20 74 6f 20  t is applied to 
1ffa0 74 68 65 20 74 69 6d 65 20 76 61 6c 75 65 20 74  the time value t
1ffb0 6f 20 69 74 73 20 6c 65 66 74 2e 0a 5e 4d 6f 64  o its left..^Mod
1ffc0 69 66 69 65 72 73 20 61 72 65 20 61 70 70 6c 69  ifiers are appli
1ffd0 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ed from left to 
1ffe0 72 69 67 68 74 3b 20 6f 72 64 65 72 20 69 73 20  right; order is 
1fff0 69 6d 70 6f 72 74 61 6e 74 2e 0a 5e 28 54 68 65  important..^(The
20000 20 61 76 61 69 6c 61 62 6c 65 20 6d 6f 64 69 66   available modif
20010 69 65 72 73 20 61 72 65 20 61 73 20 66 6f 6c 6c  iers are as foll
20020 6f 77 73 2e 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  ows.</p>..<ol>.<
20030 6c 69 3e 20 4e 4e 4e 20 64 61 79 73 0a 3c 6c 69  li> NNN days.<li
20040 3e 20 4e 4e 4e 20 68 6f 75 72 73 0a 3c 6c 69 3e  > NNN hours.<li>
20050 20 4e 4e 4e 20 6d 69 6e 75 74 65 73 0a 3c 6c 69   NNN minutes.<li
20060 3e 20 4e 4e 4e 2e 4e 4e 4e 4e 20 73 65 63 6f 6e  > NNN.NNNN secon
20070 64 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 6d 6f 6e 74  ds.<li> NNN mont
20080 68 73 0a 3c 6c 69 3e 20 4e 4e 4e 20 79 65 61 72  hs.<li> NNN year
20090 73 0a 3c 6c 69 3e 20 73 74 61 72 74 20 6f 66 20  s.<li> start of 
200a0 6d 6f 6e 74 68 0a 3c 6c 69 3e 20 73 74 61 72 74  month.<li> start
200b0 20 6f 66 20 79 65 61 72 0a 3c 6c 69 3e 20 73 74   of year.<li> st
200c0 61 72 74 20 6f 66 20 64 61 79 0a 3c 6c 69 3e 20  art of day.<li> 
200d0 77 65 65 6b 64 61 79 20 4e 0a 3c 6c 69 3e 20 75  weekday N.<li> u
200e0 6e 69 78 65 70 6f 63 68 0a 3c 6c 69 3e 20 6c 6f  nixepoch.<li> lo
200f0 63 61 6c 74 69 6d 65 0a 3c 6c 69 3e 20 75 74 63  caltime.<li> utc
20100 20 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 5e 54   .</ol>)^..<p>^T
20110 68 65 20 66 69 72 73 74 20 73 69 78 20 6d 6f 64  he first six mod
20120 69 66 69 65 72 73 20 28 31 20 74 68 72 6f 75 67  ifiers (1 throug
20130 68 20 36 29 20 0a 73 69 6d 70 6c 79 20 61 64 64  h 6) .simply add
20140 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 61   the specified a
20150 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 74 6f  mount of time to
20160 20 74 68 65 20 64 61 74 65 20 61 6e 64 20 74 69   the date and ti
20170 6d 65 20 0a 73 70 65 63 69 66 69 65 64 20 62 79  me .specified by
20180 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74   the preceding t
20190 69 6d 65 73 74 72 69 6e 67 20 61 6e 64 20 6d 6f  imestring and mo
201a0 64 69 66 69 65 72 73 2e 0a 5e 54 68 65 20 27 73  difiers..^The 's
201b0 27 20 63 68 61 72 61 63 74 65 72 20 61 74 20 74  ' character at t
201c0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6d 6f  he end of the mo
201d0 64 69 66 69 65 72 20 6e 61 6d 65 73 20 69 73 20  difier names is 
201e0 6f 70 74 69 6f 6e 61 6c 2e 0a 5e 4e 6f 74 65 20  optional..^Note 
201f0 74 68 61 74 20 22 26 70 6c 75 73 6d 6e 3b 4e 4e  that "&plusmn;NN
20200 4e 20 6d 6f 6e 74 68 73 22 20 77 6f 72 6b 73 20  N months" works 
20210 62 79 20 72 65 6e 64 65 72 69 6e 67 20 74 68 65  by rendering the
20220 20 6f 72 69 67 69 6e 61 6c 20 64 61 74 65 20 69   original date i
20230 6e 74 6f 0a 74 68 65 20 59 59 59 59 2d 4d 4d 2d  nto.the YYYY-MM-
20240 44 44 20 66 6f 72 6d 61 74 2c 20 61 64 64 69 6e  DD format, addin
20250 67 20 74 68 65 20 26 70 6c 75 73 6d 6e 3b 4e 4e  g the &plusmn;NN
20260 4e 20 74 6f 20 74 68 65 20 4d 4d 20 6d 6f 6e 74  N to the MM mont
20270 68 20 76 61 6c 75 65 2c 20 74 68 65 6e 0a 6e 6f  h value, then.no
20280 72 6d 61 6c 69 7a 69 6e 67 20 74 68 65 20 72 65  rmalizing the re
20290 73 75 6c 74 2e 20 20 5e 54 68 75 73 2c 20 66 6f  sult.  ^Thus, fo
202a0 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 64  r example, the d
202b0 61 74 61 20 32 30 30 31 2d 30 33 2d 33 31 20 6d  ata 2001-03-31 m
202c0 6f 64 69 66 69 65 64 0a 62 79 20 27 2b 31 20 6d  odified.by '+1 m
202d0 6f 6e 74 68 27 20 69 6e 69 74 69 61 6c 6c 79 20  onth' initially 
202e0 79 69 65 6c 64 73 20 32 30 30 31 2d 30 34 2d 33  yields 2001-04-3
202f0 31 2c 20 62 75 74 20 41 70 72 69 6c 20 6f 6e 6c  1, but April onl
20300 79 20 68 61 73 20 33 30 20 64 61 79 73 0a 73 6f  y has 30 days.so
20310 20 74 68 65 20 64 61 74 65 20 69 73 20 6e 6f 72   the date is nor
20320 6d 61 6c 69 7a 65 64 20 74 6f 20 32 30 30 31 2d  malized to 2001-
20330 30 35 2d 30 31 2e 20 20 5e 41 20 73 69 6d 69 6c  05-01.  ^A simil
20340 61 72 20 65 66 66 65 63 74 20 6f 63 63 75 72 73  ar effect occurs
20350 20 77 68 65 6e 0a 74 68 65 20 6f 72 69 67 69 6e   when.the origin
20360 61 6c 20 64 61 74 65 20 69 73 20 46 65 62 72 75  al date is Febru
20370 61 72 79 20 32 39 20 6f 66 20 61 20 6c 65 61 70  ary 29 of a leap
20380 79 65 61 72 20 61 6e 64 20 74 68 65 20 6d 6f 64  year and the mod
20390 69 66 69 65 72 20 69 73 0a 26 70 6c 75 73 6d 6e  ifier is.&plusmn
203a0 3b 4e 20 79 65 61 72 73 20 77 68 65 72 65 20 4e  ;N years where N
203b0 20 69 73 20 6e 6f 74 20 61 20 6d 75 6c 74 69 70   is not a multip
203c0 6c 65 20 6f 66 20 66 6f 75 72 2e 3c 2f 70 3e 0a  le of four.</p>.
203d0 0a 3c 70 3e 5e 54 68 65 20 22 73 74 61 72 74 20  .<p>^The "start 
203e0 6f 66 22 20 6d 6f 64 69 66 69 65 72 73 20 28 37  of" modifiers (7
203f0 20 74 68 72 6f 75 67 68 20 39 29 20 73 68 69 66   through 9) shif
20400 74 20 74 68 65 20 64 61 74 65 20 62 61 63 6b 77  t the date backw
20410 61 72 64 73 20 0a 74 6f 20 74 68 65 20 62 65 67  ards .to the beg
20420 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 75  inning of the cu
20430 72 72 65 6e 74 20 6d 6f 6e 74 68 2c 20 79 65 61  rrent month, yea
20440 72 20 6f 72 20 64 61 79 2e 3c 2f 70 3e 0a 0a 3c  r or day.</p>..<
20450 70 3e 5e 54 68 65 20 22 77 65 65 6b 64 61 79 22  p>^The "weekday"
20460 20 6d 6f 64 69 66 69 65 72 20 61 64 76 61 6e 63   modifier advanc
20470 65 73 20 74 68 65 20 64 61 74 65 20 66 6f 72 77  es the date forw
20480 61 72 64 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ard to the next 
20490 64 61 74 65 20 0a 77 68 65 72 65 20 74 68 65 20  date .where the 
204a0 77 65 65 6b 64 61 79 20 6e 75 6d 62 65 72 20 69  weekday number i
204b0 73 20 4e 2e 20 53 75 6e 64 61 79 20 69 73 20 30  s N. Sunday is 0
204c0 2c 20 4d 6f 6e 64 61 79 20 69 73 20 31 2c 20 61  , Monday is 1, a
204d0 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f 70 3e  nd so forth.</p>
204e0 0a 0a 3c 70 3e 5e 54 68 65 20 22 75 6e 69 78 65  ..<p>^The "unixe
204f0 70 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 28  poch" modifier (
20500 31 31 29 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 69  11) only works i
20510 66 20 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  f it immediately
20520 20 66 6f 6c 6c 6f 77 73 20 0a 61 20 74 69 6d 65   follows .a time
20530 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 44 44  string in the DD
20540 44 44 44 44 44 44 44 44 20 66 6f 72 6d 61 74 2e  DDDDDDDD format.
20550 20 0a 5e 54 68 69 73 20 6d 6f 64 69 66 69 65 72   .^This modifier
20560 20 63 61 75 73 65 73 20 74 68 65 20 44 44 44 44   causes the DDDD
20570 44 44 44 44 44 44 20 74 6f 20 62 65 20 69 6e 74  DDDDDD to be int
20580 65 72 70 72 65 74 65 64 20 6e 6f 74 20 0a 61 73  erpreted not .as
20590 20 61 20 4a 75 6c 69 61 6e 20 64 61 79 20 6e 75   a Julian day nu
205a0 6d 62 65 72 20 61 73 20 69 74 20 6e 6f 72 6d 61  mber as it norma
205b0 6c 6c 79 20 77 6f 75 6c 64 20 62 65 2c 20 62 75  lly would be, bu
205c0 74 20 61 73 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e  t as.[http://en.
205d0 77 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69  wikipedia.org/wi
205e0 6b 69 2f 55 6e 69 78 5f 74 69 6d 65 20 7c 20 55  ki/Unix_time | U
205f0 6e 69 78 20 54 69 6d 65 5d 20 2d 20 74 68 65 20  nix Time] - the 
20600 0a 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f 6e  .number of secon
20610 64 73 20 73 69 6e 63 65 20 31 39 37 30 2e 20 20  ds since 1970.  
20620 49 66 20 74 68 65 20 22 75 6e 69 78 65 70 6f 63  If the "unixepoc
20630 68 22 20 6d 6f 64 69 66 69 65 72 20 64 6f 65 73  h" modifier does
20640 20 6e 6f 74 0a 66 6f 6c 6c 6f 77 20 61 20 74 69   not.follow a ti
20650 6d 65 73 74 72 69 6e 67 20 6f 66 20 74 68 65 20  mestring of the 
20660 66 6f 72 6d 20 44 44 44 44 44 44 44 44 44 44 20  form DDDDDDDDDD 
20670 77 68 69 63 68 20 65 78 70 72 65 73 73 65 73 20  which expresses 
20680 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 73 65  the number.of se
20690 63 6f 6e 64 73 20 73 69 6e 63 65 20 31 39 37 30  conds since 1970
206a0 20 6f 72 20 69 66 20 6f 74 68 65 72 20 6d 6f 64   or if other mod
206b0 69 66 69 65 72 73 0a 73 65 70 61 72 61 74 65 20  ifiers.separate 
206c0 74 68 65 20 22 75 6e 69 78 65 70 6f 63 68 22 20  the "unixepoch" 
206d0 6d 6f 64 69 66 69 65 72 20 66 72 6f 6d 20 70 72  modifier from pr
206e0 69 6f 72 20 44 44 44 44 44 44 44 44 44 44 20 74  ior DDDDDDDDDD t
206f0 68 65 6e 20 74 68 65 0a 62 65 68 61 76 69 6f 72  hen the.behavior
20700 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 46   is undefined..F
20710 6f 72 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  or SQLite versio
20720 6e 73 20 62 65 66 6f 72 65 20 33 2e 31 36 2e 30  ns before 3.16.0
20730 20 28 5b 64 61 74 65 6f 66 3a 33 2e 31 36 2e 30   ([dateof:3.16.0
20740 5d 29 2c 20 0a 74 68 65 20 22 75 6e 69 78 65 70  ]), .the "unixep
20750 6f 63 68 22 20 6d 6f 64 69 66 69 65 72 20 6f 6e  och" modifier on
20760 6c 79 20 77 6f 72 6b 73 20 66 6f 72 0a 64 61 74  ly works for.dat
20770 65 73 20 62 65 74 77 65 65 6e 20 30 30 30 30 2d  es between 0000-
20780 30 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 20 61  01-01 00:00:00 a
20790 6e 64 20 35 33 35 32 2d 31 31 2d 30 31 20 31 30  nd 5352-11-01 10
207a0 3a 35 32 3a 34 37 20 28 75 6e 69 78 20 74 69 6d  :52:47 (unix tim
207b0 65 73 0a 6f 66 20 2d 36 32 31 36 37 32 31 39 32  es.of -621672192
207c0 30 30 20 74 68 72 6f 75 67 68 20 31 30 36 37 35  00 through 10675
207d0 31 39 39 31 31 36 37 29 2e 3c 2f 70 3e 0a 0a 3c  1991167).</p>..<
207e0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
207f0 6c 6f 63 61 6c 74 69 6d 65 20 7b 6c 6f 63 61 6c  localtime {local
20800 74 69 6d 65 20 6d 6f 64 69 66 69 65 72 7d 20 7b  time modifier} {
20810 27 75 74 63 27 20 6d 6f 64 69 66 69 65 72 7d 3c  'utc' modifier}<
20820 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 22 6c  /tcl>.<p>^The "l
20830 6f 63 61 6c 74 69 6d 65 22 20 6d 6f 64 69 66 69  ocaltime" modifi
20840 65 72 20 28 31 32 29 20 61 73 73 75 6d 65 73 20  er (12) assumes 
20850 74 68 65 20 74 69 6d 65 20 73 74 72 69 6e 67 20  the time string 
20860 74 6f 20 69 74 73 20 6c 65 66 74 20 69 73 20 69  to its left is i
20870 6e 0a 55 6e 69 76 65 72 73 61 6c 20 43 6f 6f 72  n.Universal Coor
20880 64 69 6e 61 74 65 64 20 54 69 6d 65 20 28 55 54  dinated Time (UT
20890 43 29 20 61 6e 64 20 61 64 6a 75 73 74 73 20 74  C) and adjusts t
208a0 68 65 20 74 69 6d 65 0a 73 74 72 69 6e 67 20 73  he time.string s
208b0 6f 20 74 68 61 74 20 69 74 20 64 69 73 70 6c 61  o that it displa
208c0 79 73 20 6c 6f 63 61 6c 74 69 6d 65 2e 20 20 49  ys localtime.  I
208d0 66 20 22 6c 6f 63 61 6c 74 69 6d 65 22 0a 66 6f  f "localtime".fo
208e0 6c 6c 6f 77 73 20 61 20 74 69 6d 65 20 74 68 61  llows a time tha
208f0 74 20 69 73 20 6e 6f 74 20 55 54 43 2c 20 74 68  t is not UTC, th
20900 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
20910 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 5e 28  is undefined..^(
20920 54 68 65 20 22 75 74 63 22 20 6d 6f 64 69 66 69  The "utc" modifi
20930 65 72 20 69 73 20 74 68 65 20 6f 70 70 6f 73 69  er is the opposi
20940 74 65 20 6f 66 20 22 6c 6f 63 61 6c 74 69 6d 65  te of "localtime
20950 22 2e 20 20 0a 22 75 74 63 22 20 61 73 73 75 6d  ".  ."utc" assum
20960 65 73 20 74 68 61 74 20 74 68 65 20 73 74 72 69  es that the stri
20970 6e 67 0a 74 6f 20 69 74 73 20 6c 65 66 74 20 69  ng.to its left i
20980 73 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 20 74  s in the local t
20990 69 6d 65 7a 6f 6e 65 20 61 6e 64 20 61 64 6a 75  imezone and adju
209a0 73 74 73 20 74 68 61 74 20 73 74 72 69 6e 67 20  sts that string 
209b0 74 6f 20 62 65 20 69 6e 20 55 54 43 2e 29 5e 0a  to be in UTC.)^.
209c0 49 66 20 74 68 65 20 70 72 69 6f 72 20 73 74 72  If the prior str
209d0 69 6e 67 20 69 73 20 6e 6f 74 20 69 6e 20 6c 6f  ing is not in lo
209e0 63 61 6c 74 69 6d 65 2c 20 74 68 65 6e 20 74 68  caltime, then th
209f0 65 20 72 65 73 75 6c 74 20 6f 66 20 22 75 74 63  e result of "utc
20a00 22 20 69 73 0a 75 6e 64 65 66 69 6e 65 64 2e 3c  " is.undefined.<
20a10 2f 70 3e 0a 0a 3c 68 33 3e 45 78 61 6d 70 6c 65  /p>..<h3>Example
20a20 73 3c 2f 68 33 3e 0a 0a 5e 28 3c 70 3e 43 6f 6d  s</h3>..^(<p>Com
20a30 70 75 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  pute the current
20a40 20 64 61 74 65 2e 3c 70 3e 0a 0a 3c 62 6c 6f 63   date.<p>..<bloc
20a50 6b 71 75 6f 74 65 3e 53 45 4c 45 43 54 20 64 61  kquote>SELECT da
20a60 74 65 28 27 6e 6f 77 27 29 3b 3c 2f 62 6c 6f 63  te('now');</bloc
20a70 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
20a80 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 61 73 74  Compute the last
20a90 20 64 61 79 20 6f 66 20 74 68 65 20 63 75 72 72   day of the curr
20aa0 65 6e 74 20 6d 6f 6e 74 68 2e 3c 2f 70 3e 0a 0a  ent month.</p>..
20ab0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 53 45 4c 45  <blockquote>SELE
20ac0 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27 73  CT date('now','s
20ad0 74 61 72 74 20 6f 66 20 6d 6f 6e 74 68 27 2c 27  tart of month','
20ae0 2b 31 20 6d 6f 6e 74 68 27 2c 27 2d 31 20 64 61  +1 month','-1 da
20af0 79 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  y');.</blockquot
20b00 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f 6d 70 75  e>)^..^(<p>Compu
20b10 74 65 20 74 68 65 20 64 61 74 65 20 61 6e 64 20  te the date and 
20b20 74 69 6d 65 20 67 69 76 65 6e 20 61 20 75 6e 69  time given a uni
20b30 78 20 74 69 6d 65 73 74 61 6d 70 20 31 30 39 32  x timestamp 1092
20b40 39 34 31 34 36 36 2e 3c 2f 70 3e 0a 0a 3c 62 6c  941466.</p>..<bl
20b50 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 53 45  ockquote>.    SE
20b60 4c 45 43 54 20 64 61 74 65 74 69 6d 65 28 31 30  LECT datetime(10
20b70 39 32 39 34 31 34 36 36 2c 20 27 75 6e 69 78 65  92941466, 'unixe
20b80 70 6f 63 68 27 29 3b 0a 3c 2f 62 6c 6f 63 6b 71  poch');.</blockq
20b90 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43 6f  uote>)^..^(<p>Co
20ba0 6d 70 75 74 65 20 74 68 65 20 64 61 74 65 20 61  mpute the date a
20bb0 6e 64 20 74 69 6d 65 20 67 69 76 65 6e 20 61 20  nd time given a 
20bc0 75 6e 69 78 20 74 69 6d 65 73 74 61 6d 70 20 31  unix timestamp 1
20bd0 30 39 32 39 34 31 34 36 36 2c 20 61 6e 64 20 0a  092941466, and .
20be0 63 6f 6d 70 65 6e 73 61 74 65 20 66 6f 72 20 79  compensate for y
20bf0 6f 75 72 20 6c 6f 63 61 6c 20 74 69 6d 65 7a 6f  our local timezo
20c00 6e 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ne.</p>..<blockq
20c10 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 64  uote>.  SELECT d
20c20 61 74 65 74 69 6d 65 28 31 30 39 32 39 34 31 34  atetime(10929414
20c30 36 36 2c 20 27 75 6e 69 78 65 70 6f 63 68 27 2c  66, 'unixepoch',
20c40 20 27 6c 6f 63 61 6c 74 69 6d 65 27 29 3b 0a 3c   'localtime');.<
20c50 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
20c60 5e 28 3c 70 3e 43 6f 6d 70 75 74 65 20 74 68 65  ^(<p>Compute the
20c70 20 63 75 72 72 65 6e 74 20 75 6e 69 78 20 74 69   current unix ti
20c80 6d 65 73 74 61 6d 70 2e 3c 2f 70 3e 0a 0a 3c 62  mestamp.</p>..<b
20c90 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
20ca0 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25 73  ECT strftime('%s
20cb0 27 2c 27 6e 6f 77 27 29 3b 0a 3c 2f 62 6c 6f 63  ','now');.</bloc
20cc0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
20cd0 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d 62  Compute the numb
20ce0 65 72 20 6f 66 20 64 61 79 73 20 73 69 6e 63 65  er of days since
20cf0 20 74 68 65 20 73 69 67 6e 69 6e 67 20 6f 66 20   the signing of 
20d00 74 68 65 20 55 53 20 44 65 63 6c 61 72 61 74 69  the US Declarati
20d10 6f 6e 0a 6f 66 20 49 6e 64 65 70 65 6e 64 65 6e  on.of Independen
20d20 63 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ce.</p>..<blockq
20d30 75 6f 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 6a  uote>.  SELECT j
20d40 75 6c 69 61 6e 64 61 79 28 27 6e 6f 77 27 29 20  ulianday('now') 
20d50 2d 20 6a 75 6c 69 61 6e 64 61 79 28 27 31 37 37  - julianday('177
20d60 36 2d 30 37 2d 30 34 27 29 3b 0a 3c 2f 62 6c 6f  6-07-04');.</blo
20d70 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70  ckquote>)^..^(<p
20d80 3e 43 6f 6d 70 75 74 65 20 74 68 65 20 6e 75 6d  >Compute the num
20d90 62 65 72 20 6f 66 20 73 65 63 6f 6e 64 73 20 73  ber of seconds s
20da0 69 6e 63 65 20 61 20 70 61 72 74 69 63 75 6c 61  ince a particula
20db0 72 20 6d 6f 6d 65 6e 74 20 69 6e 20 32 30 30 34  r moment in 2004
20dc0 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
20dd0 74 65 3e 0a 20 20 53 45 4c 45 43 54 20 73 74 72  te>.  SELECT str
20de0 66 74 69 6d 65 28 27 25 73 27 2c 27 6e 6f 77 27  ftime('%s','now'
20df0 29 20 2d 20 73 74 72 66 74 69 6d 65 28 27 25 73  ) - strftime('%s
20e00 27 2c 27 32 30 30 34 2d 30 31 2d 30 31 20 30 32  ','2004-01-01 02
20e10 3a 33 34 3a 35 36 27 29 3b 0a 3c 2f 62 6c 6f 63  :34:56');.</bloc
20e20 6b 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e  kquote>)^..^(<p>
20e30 0a 43 6f 6d 70 75 74 65 20 74 68 65 20 64 61 74  .Compute the dat
20e40 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 54  e of the first T
20e50 75 65 73 64 61 79 20 69 6e 20 4f 63 74 6f 62 65  uesday in Octobe
20e60 72 0a 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  r.for the curren
20e70 74 20 79 65 61 72 2e 0a 3c 2f 70 3e 0a 0a 3c 62  t year..</p>..<b
20e80 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 53 45 4c  lockquote>.  SEL
20e90 45 43 54 20 64 61 74 65 28 27 6e 6f 77 27 2c 27  ECT date('now','
20ea0 73 74 61 72 74 20 6f 66 20 79 65 61 72 27 2c 27  start of year','
20eb0 2b 39 20 6d 6f 6e 74 68 73 27 2c 27 77 65 65 6b  +9 months','week
20ec0 64 61 79 20 32 27 29 3b 0a 3c 2f 62 6c 6f 63 6b  day 2');.</block
20ed0 71 75 6f 74 65 3e 29 5e 0a 0a 5e 28 3c 70 3e 43  quote>)^..^(<p>C
20ee0 6f 6d 70 75 74 65 20 74 68 65 20 74 69 6d 65 20  ompute the time 
20ef0 73 69 6e 63 65 20 74 68 65 20 75 6e 69 78 20 65  since the unix e
20f00 70 6f 63 68 20 69 6e 20 73 65 63 6f 6e 64 73 20  poch in seconds 
20f10 0a 28 6c 69 6b 65 20 73 74 72 66 74 69 6d 65 28  .(like strftime(
20f20 27 25 73 27 2c 27 6e 6f 77 27 29 20 65 78 63 65  '%s','now') exce
20f30 70 74 20 69 6e 63 6c 75 64 65 73 20 66 72 61 63  pt includes frac
20f40 74 69 6f 6e 61 6c 20 70 61 72 74 29 3a 3c 2f 70  tional part):</p
20f50 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  >..<blockquote>.
20f60 20 20 53 45 4c 45 43 54 20 28 6a 75 6c 69 61 6e    SELECT (julian
20f70 64 61 79 28 27 6e 6f 77 27 29 20 2d 20 32 34 34  day('now') - 244
20f80 30 35 38 37 2e 35 29 2a 38 36 34 30 30 2e 30 3b  0587.5)*86400.0;
20f90 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  .</blockquote>)^
20fa0 0a 0a 3c 68 33 3e 43 61 76 65 61 74 73 20 41 6e  ..<h3>Caveats An
20fb0 64 20 42 75 67 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  d Bugs</h3>..<p>
20fc0 54 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20  The computation 
20fd0 6f 66 20 6c 6f 63 61 6c 20 74 69 6d 65 20 64 65  of local time de
20fe0 70 65 6e 64 73 20 68 65 61 76 69 6c 79 20 6f 6e  pends heavily on
20ff0 20 74 68 65 20 77 68 69 6d 20 0a 6f 66 20 70 6f   the whim .of po
21000 6c 69 74 69 63 69 61 6e 73 20 61 6e 64 20 69 73  liticians and is
21010 20 74 68 75 73 20 64 69 66 66 69 63 75 6c 74 20   thus difficult 
21020 74 6f 20 67 65 74 20 63 6f 72 72 65 63 74 20 66  to get correct f
21030 6f 72 20 0a 61 6c 6c 20 6c 6f 63 61 6c 65 73 2e  or .all locales.
21040 20 5e 49 6e 20 74 68 69 73 20 69 6d 70 6c 65 6d   ^In this implem
21050 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65 20 73 74  entation, the st
21060 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
21070 20 0a 66 75 6e 63 74 69 6f 6e 20 6c 6f 63 61 6c   .function local
21080 74 69 6d 65 5f 72 28 29 20 69 73 20 75 73 65 64  time_r() is used
21090 20 74 6f 20 61 73 73 69 73 74 20 69 6e 20 74 68   to assist in th
210a0 65 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20 6f 66  e calculation of
210b0 20 0a 6c 6f 63 61 6c 20 74 69 6d 65 2e 20 20 5e   .local time.  ^
210c0 28 54 68 65 20 0a 6c 6f 63 61 6c 74 69 6d 65 5f  (The .localtime_
210d0 72 28 29 20 43 20 66 75 6e 63 74 69 6f 6e 20 6e  r() C function n
210e0 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79 20 77 6f 72  ormally only wor
210f0 6b 73 20 66 6f 72 20 79 65 61 72 73 0a 62 65 74  ks for years.bet
21100 77 65 65 6e 20 31 39 37 30 20 61 6e 64 20 32 30  ween 1970 and 20
21110 33 37 2e 20 46 6f 72 20 64 61 74 65 73 20 6f 75  37. For dates ou
21120 74 73 69 64 65 20 74 68 69 73 20 72 61 6e 67 65  tside this range
21130 2c 20 53 51 4c 69 74 65 20 0a 61 74 74 65 6d 70  , SQLite .attemp
21140 74 73 20 74 6f 20 6d 61 70 20 74 68 65 20 79 65  ts to map the ye
21150 61 72 20 69 6e 74 6f 20 61 6e 20 65 71 75 69 76  ar into an equiv
21160 61 6c 65 6e 74 20 79 65 61 72 20 77 69 74 68 69  alent year withi
21170 6e 20 0a 74 68 69 73 20 72 61 6e 67 65 2c 20 64  n .this range, d
21180 6f 20 74 68 65 20 63 61 6c 63 75 6c 61 74 69 6f  o the calculatio
21190 6e 2c 20 74 68 65 6e 20 6d 61 70 20 74 68 65 20  n, then map the 
211a0 79 65 61 72 20 62 61 63 6b 2e 29 5e 3c 2f 70 3e  year back.)^</p>
211b0 0a 0a 0a 3c 70 3e 5e 28 54 68 65 73 65 20 66 75  ...<p>^(These fu
211c0 6e 63 74 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72  nctions only wor
211d0 6b 20 66 6f 72 20 64 61 74 65 73 20 62 65 74 77  k for dates betw
211e0 65 65 6e 20 30 30 30 30 2d 30 31 2d 30 31 20 30  een 0000-01-01 0
211f0 30 3a 30 30 3a 30 30 0a 61 6e 64 20 39 39 39 39  0:00:00.and 9999
21200 2d 31 32 2d 33 31 20 32 33 3a 35 39 3a 35 39 20  -12-31 23:59:59 
21210 28 6a 75 6c 69 64 61 6e 20 64 61 79 20 6e 75 6d  (julidan day num
21220 62 65 72 73 20 31 37 32 31 30 35 39 2e 35 20 74  bers 1721059.5 t
21230 68 72 6f 75 67 68 20 35 33 37 33 34 38 34 2e 35  hrough 5373484.5
21240 29 2e 29 5e 0a 46 6f 72 20 64 61 74 65 73 20 6f  ).)^.For dates o
21250 75 74 73 69 64 65 20 74 68 61 74 20 72 61 6e 67  utside that rang
21260 65 2c 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  e, the results o
21270 66 20 74 68 65 73 65 0a 66 75 6e 63 74 69 6f 6e  f these.function
21280 73 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e  s are undefined.
21290 3c 2f 70 3e 0a 0a 3c 70 3e 4e 6f 6e 2d 56 69 73  </p>..<p>Non-Vis
212a0 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74 66  ta Windows platf
212b0 6f 72 6d 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72  orms only suppor
212c0 74 20 6f 6e 65 20 73 65 74 20 6f 66 20 44 53 54  t one set of DST
212d0 20 72 75 6c 65 73 2e 20 0a 56 69 73 74 61 20 6f   rules. .Vista o
212e0 6e 6c 79 20 73 75 70 70 6f 72 74 73 20 74 77 6f  nly supports two
212f0 2e 20 54 68 65 72 65 66 6f 72 65 2c 20 6f 6e 20  . Therefore, on 
21300 74 68 65 73 65 20 70 6c 61 74 66 6f 72 6d 73 2c  these platforms,
21310 20 0a 68 69 73 74 6f 72 69 63 61 6c 20 44 53 54   .historical DST
21320 20 63 61 6c 63 75 6c 61 74 69 6f 6e 73 20 77 69   calculations wi
21330 6c 6c 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e  ll be incorrect.
21340 20 0a 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69   .For example, i
21350 6e 20 74 68 65 20 55 53 2c 20 69 6e 20 32 30 30  n the US, in 200
21360 37 20 74 68 65 20 44 53 54 20 72 75 6c 65 73 20  7 the DST rules 
21370 63 68 61 6e 67 65 64 2e 20 0a 4e 6f 6e 2d 56 69  changed. .Non-Vi
21380 73 74 61 20 57 69 6e 64 6f 77 73 20 70 6c 61 74  sta Windows plat
21390 66 6f 72 6d 73 20 61 70 70 6c 79 20 74 68 65 20  forms apply the 
213a0 6e 65 77 20 32 30 30 37 20 44 53 54 20 72 75 6c  new 2007 DST rul
213b0 65 73 20 0a 74 6f 20 61 6c 6c 20 70 72 65 76 69  es .to all previ
213c0 6f 75 73 20 79 65 61 72 73 20 61 73 20 77 65 6c  ous years as wel
213d0 6c 2e 20 56 69 73 74 61 20 64 6f 65 73 20 73 6f  l. Vista does so
213e0 6d 65 77 68 61 74 20 62 65 74 74 65 72 0a 67 65  mewhat better.ge
213f0 74 74 69 6e 67 20 72 65 73 75 6c 74 73 20 63 6f  tting results co
21400 72 72 65 63 74 20 62 61 63 6b 20 74 6f 20 31 39  rrect back to 19
21410 38 36 2c 20 77 68 65 6e 20 74 68 65 20 72 75 6c  86, when the rul
21420 65 73 20 77 65 72 65 20 61 6c 73 6f 20 63 68 61  es were also cha
21430 6e 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c  nged.</p>..<p>Al
21440 6c 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6d 70 75  l internal compu
21450 74 61 74 69 6f 6e 73 20 61 73 73 75 6d 65 20 74  tations assume t
21460 68 65 20 0a 5b 68 74 74 70 3a 2f 2f 65 6e 2e 77  he .[http://en.w
21470 69 6b 69 70 65 64 69 61 2e 6f 72 67 2f 77 69 6b  ikipedia.org/wik
21480 69 2f 47 72 65 67 6f 72 69 61 6e 5f 63 61 6c 65  i/Gregorian_cale
21490 6e 64 61 72 20 7c 20 47 72 65 67 6f 72 69 61 6e  ndar | Gregorian
214a0 20 63 61 6c 65 6e 64 61 72 5d 0a 73 79 73 74 65   calendar].syste
214b0 6d 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20 61  m.  It is also a
214c0 73 73 75 6d 65 64 20 74 68 61 74 20 65 76 65 72  ssumed that ever
214d0 79 0a 64 61 79 20 69 73 20 65 78 61 63 74 6c 79  y.day is exactly
214e0 20 38 36 34 30 30 20 73 65 63 6f 6e 64 73 20 69   86400 seconds i
214f0 6e 20 64 75 72 61 74 69 6f 6e 2e 3c 2f 70 3e 0a  n duration.</p>.
21500 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23  .<tcl>.#########
21510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21550 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 7b 41  #####.Section {A
21560 67 67 72 65 67 61 74 65 20 46 75 6e 63 74 69 6f  ggregate Functio
21570 6e 73 7d 20 61 67 67 66 75 6e 63 20 7b 2a 61 67  ns} aggfunc {*ag
21580 67 66 75 6e 63 7d 0a 75 6e 73 65 74 20 2d 6e 6f  gfunc}.unset -no
21590 63 6f 6d 70 6c 61 69 6e 20 63 6f 72 65 66 75 6e  complain corefun
215a0 63 73 65 74 0a 0a 66 75 6e 63 64 65 66 20 7b 61  cset..funcdef {a
215b0 76 67 28 58 29 7d 20 7b 2a 61 76 67 20 7b 61 76  vg(X)} {*avg {av
215c0 67 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  g() aggregate fu
215d0 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68  nction}} {.  ^Th
215e0 65 20 61 76 67 28 29 20 66 75 6e 63 74 69 6f 6e  e avg() function
215f0 0a 20 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  .  returns the a
21600 76 65 72 61 67 65 20 76 61 6c 75 65 20 6f 66 20  verage value of 
21610 61 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 3c 69 3e  all non-NULL <i>
21620 58 3c 2f 69 3e 20 77 69 74 68 69 6e 20 61 0a 20  X</i> within a. 
21630 20 67 72 6f 75 70 2e 20 20 5e 53 74 72 69 6e 67   group.  ^String
21640 20 61 6e 64 20 42 4c 4f 42 20 76 61 6c 75 65 73   and BLOB values
21650 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 6c 6f 6f   that do not loo
21660 6b 20 6c 69 6b 65 20 6e 75 6d 62 65 72 73 20 61  k like numbers a
21670 72 65 0a 20 20 69 6e 74 65 72 70 72 65 74 65 64  re.  interpreted
21680 20 61 73 20 30 2e 0a 20 20 5e 54 68 65 20 72 65   as 0..  ^The re
21690 73 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73  sult of avg() is
216a0 20 61 6c 77 61 79 73 20 61 20 66 6c 6f 61 74 69   always a floati
216b0 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 20 61  ng point value a
216c0 73 20 6c 6f 6e 67 20 61 73 0a 20 20 61 74 20 74  s long as.  at t
216d0 68 65 72 65 20 69 73 20 61 74 20 6c 65 61 73 74  here is at least
216e0 20 6f 6e 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e   one non-NULL in
216f0 70 75 74 20 65 76 65 6e 20 69 66 20 61 6c 6c 0a  put even if all.
21700 20 20 69 6e 70 75 74 73 20 61 72 65 20 69 6e 74    inputs are int
21710 65 67 65 72 73 2e 20 20 5e 54 68 65 20 72 65 73  egers.  ^The res
21720 75 6c 74 20 6f 66 20 61 76 67 28 29 20 69 73 20  ult of avg() is 
21730 4e 55 4c 4c 20 69 66 20 61 6e 64 20 6f 6e 6c 79  NULL if and only
21740 20 69 66 0a 20 20 74 68 65 72 65 20 61 72 65 20   if.  there are 
21750 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75  no non-NULL inpu
21760 74 73 2e 20 20 0a 7d 0a 0a 66 75 6e 63 64 65 66  ts.  .}..funcdef
21770 20 7b 63 6f 75 6e 74 28 58 29 20 63 6f 75 6e 74   {count(X) count
21780 28 2a 29 7d 20 7b 2a 63 6f 75 6e 74 20 7b 63 6f  (*)} {*count {co
21790 75 6e 74 28 29 20 61 67 67 72 65 67 61 74 65 20  unt() aggregate 
217a0 66 75 6e 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e  function}} {.  ^
217b0 54 68 65 20 63 6f 75 6e 74 28 58 29 20 66 75 6e  The count(X) fun
217c0 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 0a 20 20  ction returns.  
217d0 61 20 63 6f 75 6e 74 20 6f 66 20 74 68 65 20 6e  a count of the n
217e0 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 0a 20  umber of times. 
217f0 20 74 68 61 74 20 3c 69 3e 58 3c 2f 69 3e 20 69   that <i>X</i> i
21800 73 20 6e 6f 74 20 4e 55 4c 4c 20 69 6e 20 61 20  s not NULL in a 
21810 67 72 6f 75 70 2e 20 20 5e 54 68 65 20 63 6f 75  group.  ^The cou
21820 6e 74 28 2a 29 20 66 75 6e 63 74 69 6f 6e 0a 20  nt(*) function. 
21830 20 28 77 69 74 68 20 6e 6f 20 61 72 67 75 6d 65   (with no argume
21840 6e 74 73 29 20 72 65 74 75 72 6e 73 20 74 68 65  nts) returns the
21850 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
21860 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f   rows in the gro
21870 75 70 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b  up..}..funcdef {
21880 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 29 20  group_concat(X) 
21890 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 58 2c 59  group_concat(X,Y
218a0 29 7d 20 7b 0a 20 20 2a 67 72 6f 75 70 5f 63 6f  )} {.  *group_co
218b0 6e 63 61 74 20 7b 67 72 6f 75 70 5f 63 6f 6e 63  ncat {group_conc
218c0 61 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66  at() aggregate f
218d0 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20 20 5e  unction}.} {.  ^
218e0 54 68 65 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74  The group_concat
218f0 28 29 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  () function retu
21900 72 6e 73 0a 20 20 61 20 73 74 72 69 6e 67 20 77  rns.  a string w
21910 68 69 63 68 20 69 73 20 74 68 65 20 63 6f 6e 63  hich is the conc
21920 61 74 65 6e 61 74 69 6f 6e 20 6f 66 0a 20 20 61  atenation of.  a
21930 6c 6c 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  ll non-NULL valu
21940 65 73 20 6f 66 20 3c 69 3e 58 3c 2f 69 3e 2e 20  es of <i>X</i>. 
21950 20 5e 49 66 20 70 61 72 61 6d 65 74 65 72 20 3c   ^If parameter <
21960 69 3e 59 3c 2f 69 3e 20 69 73 20 70 72 65 73 65  i>Y</i> is prese
21970 6e 74 20 74 68 65 6e 0a 20 20 69 74 20 69 73 20  nt then.  it is 
21980 75 73 65 64 20 61 73 20 74 68 65 20 73 65 70 61  used as the sepa
21990 72 61 74 6f 72 0a 20 20 62 65 74 77 65 65 6e 20  rator.  between 
219a0 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 3c 69 3e  instances of <i>
219b0 58 3c 2f 69 3e 2e 20 20 5e 41 20 63 6f 6d 6d 61  X</i>.  ^A comma
219c0 20 28 22 2c 22 29 20 69 73 20 75 73 65 64 20 61   (",") is used a
219d0 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 0a  s the separator.
219e0 20 20 69 66 20 3c 69 3e 59 3c 2f 69 3e 20 69 73    if <i>Y</i> is
219f0 20 6f 6d 69 74 74 65 64 2e 20 20 54 68 65 20 6f   omitted.  The o
21a00 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6e 63  rder of the conc
21a10 61 74 65 6e 61 74 65 64 20 65 6c 65 6d 65 6e 74  atenated element
21a20 73 20 69 73 0a 20 20 61 72 62 69 74 72 61 72 79  s is.  arbitrary
21a30 2e 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 61  ..}..funcdef {ma
21a40 78 28 58 29 7d 20 7b 2a 6d 61 78 41 67 67 46 75  x(X)} {*maxAggFu
21a50 6e 63 20 2a 61 67 67 5f 6d 61 78 20 7b 6d 61 78  nc *agg_max {max
21a60 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  () aggregate fun
21a70 63 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65  ction}} {.  ^The
21a80 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
21a90 20 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75   function.  retu
21aa0 72 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  rns the maximum 
21ab0 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 76 61 6c  value of all val
21ac0 75 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70  ues in the group
21ad0 2e 0a 20 20 5e 54 68 65 20 6d 61 78 69 6d 75 6d  ..  ^The maximum
21ae0 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 76 61   value is the va
21af0 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20 62  lue that would b
21b00 65 20 72 65 74 75 72 6e 65 64 20 6c 61 73 74 20  e returned last 
21b10 69 6e 20 61 6e 0a 20 20 4f 52 44 45 52 20 42 59  in an.  ORDER BY
21b20 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 63 6f 6c   on the same col
21b30 75 6d 6e 2e 20 20 5e 41 67 67 72 65 67 61 74 65  umn.  ^Aggregate
21b40 20 6d 61 78 28 29 20 72 65 74 75 72 6e 73 20 4e   max() returns N
21b50 55 4c 4c 20 0a 20 20 69 66 20 61 6e 64 20 6f 6e  ULL .  if and on
21b60 6c 79 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ly if there are 
21b70 6e 6f 20 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75  no non-NULL valu
21b80 65 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 2e  es in the group.
21b90 0a 7d 0a 0a 66 75 6e 63 64 65 66 20 7b 6d 69 6e  .}..funcdef {min
21ba0 28 58 29 7d 20 7b 2a 6d 69 6e 41 67 67 46 75 6e  (X)} {*minAggFun
21bb0 63 20 2a 61 67 67 5f 6d 69 6e 20 7b 6d 69 6e 28  c *agg_min {min(
21bc0 29 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ) aggregate func
21bd0 74 69 6f 6e 7d 7d 20 7b 0a 20 20 5e 54 68 65 20  tion}} {.  ^The 
21be0 6d 69 6e 28 29 20 61 67 67 72 65 67 61 74 65 20  min() aggregate 
21bf0 66 75 6e 63 74 69 6f 6e 0a 20 20 72 65 74 75 72  function.  retur
21c00 6e 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6e  ns the minimum n
21c10 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 6f 66  on-NULL value of
21c20 20 61 6c 6c 20 76 61 6c 75 65 73 20 69 6e 20 74   all values in t
21c30 68 65 20 67 72 6f 75 70 2e 0a 20 20 5e 54 68 65  he group..  ^The
21c40 20 6d 69 6e 69 6d 75 6d 20 76 61 6c 75 65 20 69   minimum value i
21c50 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d  s the first non-
21c60 4e 55 4c 4c 20 76 61 6c 75 65 20 74 68 61 74 20  NULL value that 
21c70 77 6f 75 6c 64 20 61 70 70 65 61 72 0a 20 20 69  would appear.  i
21c80 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f 66  n an ORDER BY of
21c90 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 20 20 5e   the column..  ^
21ca0 41 67 67 72 65 67 61 74 65 20 6d 69 6e 28 29 20  Aggregate min() 
21cb0 72 65 74 75 72 6e 73 20 4e 55 4c 4c 20 69 66 20  returns NULL if 
21cc0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 72  and only if ther
21cd0 65 20 61 72 65 20 6e 6f 20 6e 6f 6e 2d 4e 55 4c  e are no non-NUL
21ce0 4c 0a 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68  L.  values in th
21cf0 65 20 67 72 6f 75 70 2e 0a 7d 0a 0a 66 75 6e 63  e group..}..func
21d00 64 65 66 20 7b 73 75 6d 28 58 29 20 74 6f 74 61  def {sum(X) tota
21d10 6c 28 58 29 7d 20 7b 0a 20 20 2a 73 75 6d 46 75  l(X)} {.  *sumFu
21d20 6e 63 20 2a 73 75 6d 20 2a 74 6f 74 61 6c 0a 20  nc *sum *total. 
21d30 20 7b 73 75 6d 28 29 20 61 67 67 72 65 67 61 74   {sum() aggregat
21d40 65 20 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 7b 74  e function}.  {t
21d50 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74 65  otal() aggregate
21d60 20 66 75 6e 63 74 69 6f 6e 7d 0a 7d 20 7b 0a 20   function}.} {. 
21d70 20 5e 54 68 65 20 73 75 6d 28 29 20 61 6e 64 20   ^The sum() and 
21d80 74 6f 74 61 6c 28 29 20 61 67 67 72 65 67 61 74  total() aggregat
21d90 65 20 66 75 6e 63 74 69 6f 6e 73 0a 20 20 72 65  e functions.  re
21da0 74 75 72 6e 20 73 75 6d 20 6f 66 20 61 6c 6c 20  turn sum of all 
21db0 6e 6f 6e 2d 4e 55 4c 4c 20 76 61 6c 75 65 73 20  non-NULL values 
21dc0 69 6e 20 74 68 65 20 67 72 6f 75 70 2e 0a 20 20  in the group..  
21dd0 5e 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f  ^If there are no
21de0 20 6e 6f 6e 2d 4e 55 4c 4c 20 69 6e 70 75 74 20   non-NULL input 
21df0 72 6f 77 73 20 74 68 65 6e 20 73 75 6d 28 29 20  rows then sum() 
21e00 72 65 74 75 72 6e 73 0a 20 20 4e 55 4c 4c 20 62  returns.  NULL b
21e10 75 74 20 74 6f 74 61 6c 28 29 20 72 65 74 75 72  ut total() retur
21e20 6e 73 20 30 2e 30 2e 0a 20 20 4e 55 4c 4c 20 69  ns 0.0..  NULL i
21e30 73 20 6e 6f 74 20 6e 6f 72 6d 61 6c 6c 79 20 61  s not normally a
21e40 20 68 65 6c 70 66 75 6c 20 72 65 73 75 6c 74 20   helpful result 
21e50 66 6f 72 20 74 68 65 20 73 75 6d 20 6f 66 20 6e  for the sum of n
21e60 6f 20 72 6f 77 73 0a 20 20 62 75 74 20 74 68 65  o rows.  but the
21e70 20 53 51 4c 20 73 74 61 6e 64 61 72 64 20 72 65   SQL standard re
21e80 71 75 69 72 65 73 20 69 74 20 61 6e 64 20 6d 6f  quires it and mo
21e90 73 74 20 6f 74 68 65 72 0a 20 20 53 51 4c 20 64  st other.  SQL d
21ea0 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 20  atabase engines 
21eb0 69 6d 70 6c 65 6d 65 6e 74 20 73 75 6d 28 29 20  implement sum() 
21ec0 74 68 61 74 20 77 61 79 20 73 6f 20 53 51 4c 69  that way so SQLi
21ed0 74 65 20 64 6f 65 73 20 69 74 20 69 6e 20 74 68  te does it in th
21ee0 65 0a 20 20 73 61 6d 65 20 77 61 79 20 69 6e 20  e.  same way in 
21ef0 6f 72 64 65 72 20 74 6f 20 62 65 20 63 6f 6d 70  order to be comp
21f00 61 74 69 62 6c 65 2e 20 20 20 54 68 65 20 6e 6f  atible.   The no
21f10 6e 2d 73 74 61 6e 64 61 72 64 20 74 6f 74 61 6c  n-standard total
21f20 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 69 73  () function.  is
21f30 20 70 72 6f 76 69 64 65 64 20 61 73 20 61 20 63   provided as a c
21f40 6f 6e 76 65 6e 69 65 6e 74 20 77 61 79 20 74 6f  onvenient way to
21f50 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 74 68 69   work around thi
21f60 73 20 64 65 73 69 67 6e 20 70 72 6f 62 6c 65 6d  s design problem
21f70 0a 20 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61  .  in the SQL la
21f80 6e 67 75 61 67 65 2e 3c 2f 70 3e 0a 0a 20 20 3c  nguage.</p>..  <
21f90 70 3e 5e 54 68 65 20 72 65 73 75 6c 74 20 6f 66  p>^The result of
21fa0 20 74 6f 74 61 6c 28 29 20 69 73 20 61 6c 77 61   total() is alwa
21fb0 79 73 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f  ys a floating po
21fc0 69 6e 74 20 76 61 6c 75 65 2e 0a 20 20 5e 54 68  int value..  ^Th
21fd0 65 20 72 65 73 75 6c 74 20 6f 66 20 73 75 6d 28  e result of sum(
21fe0 29 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  ) is an integer 
21ff0 76 61 6c 75 65 20 69 66 20 61 6c 6c 20 6e 6f 6e  value if all non
22000 2d 4e 55 4c 4c 20 69 6e 70 75 74 73 20 61 72 65  -NULL inputs are
22010 20 69 6e 74 65 67 65 72 73 2e 0a 20 20 5e 49 66   integers..  ^If
22020 20 61 6e 79 20 69 6e 70 75 74 20 74 6f 20 73 75   any input to su
22030 6d 28 29 20 69 73 20 6e 65 69 74 68 65 72 20 61  m() is neither a
22040 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 61 20 4e  n integer or a N
22050 55 4c 4c 0a 20 20 74 68 65 6e 20 73 75 6d 28 29  ULL.  then sum()
22060 20 72 65 74 75 72 6e 73 20 61 20 66 6c 6f 61 74   returns a float
22070 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 0a  ing point value.
22080 20 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65    which might be
22090 20 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 69 6f   an approximatio
220a0 6e 20 74 6f 20 74 68 65 20 74 72 75 65 20 73 75  n to the true su
220b0 6d 2e 3c 2f 70 3e 0a 0a 20 20 3c 70 3e 5e 53 75  m.</p>..  <p>^Su
220c0 6d 28 29 20 77 69 6c 6c 20 74 68 72 6f 77 20 61  m() will throw a
220d0 6e 20 22 69 6e 74 65 67 65 72 20 6f 76 65 72 66  n "integer overf
220e0 6c 6f 77 22 20 65 78 63 65 70 74 69 6f 6e 20 69  low" exception i
220f0 66 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 61  f all inputs.  a
22100 72 65 20 69 6e 74 65 67 65 72 73 20 6f 72 20 4e  re integers or N
22110 55 4c 4c 0a 20 20 61 6e 64 20 61 6e 20 69 6e 74  ULL.  and an int
22120 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 6f 63  eger overflow oc
22130 63 75 72 73 20 61 74 20 61 6e 79 20 70 6f 69 6e  curs at any poin
22140 74 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6d  t during the com
22150 70 75 74 61 74 69 6f 6e 2e 0a 20 20 5e 54 6f 74  putation..  ^Tot
22160 61 6c 28 29 20 6e 65 76 65 72 20 74 68 72 6f 77  al() never throw
22170 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 76 65  s an integer ove
22180 72 66 6c 6f 77 2e 0a 7d 0a 3c 2f 74 63 6c 3e 0a  rflow..}.</tcl>.
22190 0a 0a 3c 70 3e 0a 54 68 65 20 61 67 67 72 65 67  ..<p>.The aggreg
221a0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 68  ate functions sh
221b0 6f 77 6e 20 62 65 6c 6f 77 20 61 72 65 20 61 76  own below are av
221c0 61 69 6c 61 62 6c 65 20 62 79 20 64 65 66 61 75  ailable by defau
221d0 6c 74 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  lt.  Additional.
221e0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
221f0 6f 6e 73 20 77 72 69 74 74 65 6e 20 69 6e 20 43  ons written in C
22200 20 6d 61 79 20 62 65 20 61 64 64 65 64 20 75 73   may be added us
22210 69 6e 67 20 74 68 65 20 0a 5b 73 71 6c 69 74 65  ing the .[sqlite
22220 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
22230 6e 28 29 5d 3c 2f 61 3e 0a 41 50 49 2e 3c 2f 70  n()]</a>.API.</p
22240 3e 0a 0a 3c 70 3e 0a 5e 49 6e 20 61 6e 79 20 61  >..<p>.^In any a
22250 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
22260 6e 20 74 68 61 74 20 74 61 6b 65 73 20 61 20 73  n that takes a s
22270 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 2c 20  ingle argument, 
22280 74 68 61 74 20 61 72 67 75 6d 65 6e 74 0a 63 61  that argument.ca
22290 6e 20 62 65 20 70 72 65 63 65 64 65 64 20 62 79  n be preceded by
222a0 20 74 68 65 20 6b 65 79 77 6f 72 64 20 44 49 53   the keyword DIS
222b0 54 49 4e 43 54 2e 20 20 5e 49 6e 20 73 75 63 68  TINCT.  ^In such
222c0 20 63 61 73 65 73 2c 20 64 75 70 6c 69 63 61 74   cases, duplicat
222d0 65 0a 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 66  e.elements are f
222e0 69 6c 74 65 72 65 64 20 62 65 66 6f 72 65 20 62  iltered before b
222f0 65 69 6e 67 20 70 61 73 73 65 64 20 69 6e 74 6f  eing passed into
22300 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 66   the aggregate f
22310 75 6e 63 74 69 6f 6e 2e 0a 5e 46 6f 72 20 65 78  unction..^For ex
22320 61 6d 70 6c 65 2c 20 74 68 65 20 66 75 6e 63 74  ample, the funct
22330 69 6f 6e 20 22 63 6f 75 6e 74 28 64 69 73 74 69  ion "count(disti
22340 6e 63 74 20 58 29 22 20 77 69 6c 6c 20 72 65 74  nct X)" will ret
22350 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  urn the number.o
22360 66 20 64 69 73 74 69 6e 63 74 20 76 61 6c 75 65  f distinct value
22370 73 20 6f 66 20 63 6f 6c 75 6d 6e 20 58 20 69 6e  s of column X in
22380 73 74 65 61 64 20 6f 66 20 74 68 65 20 74 6f 74  stead of the tot
22390 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  al number of non
223a0 2d 6e 75 6c 6c 0a 76 61 6c 75 65 73 20 69 6e 20  -null.values in 
223b0 63 6f 6c 75 6d 6e 20 58 2e 0a 3c 2f 70 3e 0a 0a  column X..</p>..
223c0 3c 74 63 6c 3e 0a 73 65 74 20 6c 78 20 7b 7d 0a  <tcl>.set lx {}.
223d0 66 6f 72 65 61 63 68 20 62 61 73 65 73 79 6e 74  foreach basesynt
223e0 61 78 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20  ax [array names 
223f0 63 6f 72 65 66 75 6e 63 73 65 74 5d 20 7b 0a 20  corefuncset] {. 
22400 20 66 6f 72 65 61 63 68 20 7b 73 79 6e 74 61 78   foreach {syntax
22410 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20   keywords desc} 
22420 24 63 6f 72 65 66 75 6e 63 73 65 74 28 24 62 61  $corefuncset($ba
22430 73 65 73 79 6e 74 61 78 29 20 62 72 65 61 6b 0a  sesyntax) break.
22440 20 20 72 65 67 65 78 70 20 7b 5e 5b 61 2d 7a 5f    regexp {^[a-z_
22450 5d 2b 7d 20 24 62 61 73 65 73 79 6e 74 61 78 20  ]+} $basesyntax 
22460 66 72 61 67 6d 65 6e 74 0a 20 20 66 6f 72 65 61  fragment.  forea
22470 63 68 20 63 6f 72 65 73 79 6e 74 61 78 20 24 73  ch coresyntax $s
22480 79 6e 74 61 78 20 7b 0a 20 20 20 20 6c 61 70 70  yntax {.    lapp
22490 65 6e 64 20 6c 78 20 5b 6c 69 73 74 20 24 66 72  end lx [list $fr
224a0 61 67 6d 65 6e 74 20 24 63 6f 72 65 73 79 6e 74  agment $coresynt
224b0 61 78 20 30 5d 0a 20 20 7d 0a 7d 0a 68 64 5f 6c  ax 0].  }.}.hd_l
224c0 69 73 74 5f 6f 66 5f 6c 69 6e 6b 73 20 7b 7d 20  ist_of_links {} 
224d0 32 32 35 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65  225 [lsort -inde
224e0 78 20 31 20 24 6c 78 5d 0a 0a 68 64 5f 70 75 74  x 1 $lx]..hd_put
224f0 73 6e 6c 20 22 3c 68 72 20 63 6c 61 73 73 3d 27  snl "<hr class='
22500 78 68 72 27 3e 22 0a 68 64 5f 70 75 74 73 6e 6c  xhr'>".hd_putsnl
22510 20 22 3c 64 6c 3e 22 0a 66 6f 72 65 61 63 68 20   "<dl>".foreach 
22520 62 61 73 65 73 79 6e 74 61 78 20 5b 6c 73 6f 72  basesyntax [lsor
22530 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 63  t [array names c
22540 6f 72 65 66 75 6e 63 73 65 74 5d 5d 20 7b 0a 20  orefuncset]] {. 
22550 20 66 6f 72 65 61 63 68 20 7b 73 79 6e 74 61 78   foreach {syntax
22560 20 6b 65 79 77 6f 72 64 73 20 64 65 73 63 7d 20   keywords desc} 
22570 24 63 6f 72 65 66 75 6e 63 73 65 74 28 24 62 61  $corefuncset($ba
22580 73 65 73 79 6e 74 61 78 29 20 62 72 65 61 6b 0a  sesyntax) break.
22590 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c    regsub -all {\
225a0 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  s+} [string trim
225b0 20 24 73 79 6e 74 61 78 5d 20 7b 3c 62 72 20 2f   $syntax] {<br /
225c0 3e 7d 20 73 79 6e 74 61 78 0a 20 20 72 65 67 73  >} syntax.  regs
225d0 75 62 20 2d 61 6c 6c 20 7b 5c 28 28 5b 5e 2a 29  ub -all {\(([^*)
225e0 5d 2b 29 5c 29 7d 20 24 73 79 6e 74 61 78 20 7b  ]+)\)} $syntax {
225f0 28 3c 69 3e 5c 31 3c 2f 69 3e 29 7d 20 73 79 6e  (<i>\1</i>)} syn
22600 74 61 78 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  tax.  regsub -al
22610 6c 20 7b 2c 7d 20 24 73 79 6e 74 61 78 20 7b 3c  l {,} $syntax {<
22620 2f 69 3e 2c 3c 69 3e 7d 20 73 79 6e 74 61 78 0a  /i>,<i>} syntax.
22630 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c    regsub -all {<
22640 69 3e 5c 2e 5c 2e 5c 2e 3c 2f 69 3e 7d 20 24 73  i>\.\.\.</i>} $s
22650 79 6e 74 61 78 20 7b 2e 2e 2e 7d 20 73 79 6e 74  yntax {...} synt
22660 61 78 0a 20 20 72 65 67 65 78 70 20 7b 5e 5b 61  ax.  regexp {^[a
22670 2d 7a 5d 2b 7d 20 24 62 61 73 65 73 79 6e 74 61  -z]+} $basesynta
22680 78 20 66 72 61 67 6d 65 6e 74 0a 20 20 69 66 20  x fragment.  if 
22690 7b 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f  {[llength $keywo
226a0 72 64 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 72  rds]==0} {.    r
226b0 65 67 65 78 70 20 7b 5b 61 2d 7a 5f 5d 2b 7d 20  egexp {[a-z_]+} 
226c0 24 73 79 6e 74 61 78 20 6e 61 6d 65 0a 20 20 20  $syntax name.   
226d0 20 68 64 5f 66 72 61 67 6d 65 6e 74 20 24 6e 61   hd_fragment $na
226e0 6d 65 20 2a 24 6e 61 6d 65 20 22 24 7b 6e 61 6d  me *$name "${nam
226f0 65 7d 28 29 20 53 51 4c 20 66 75 6e 63 74 69 6f  e}() SQL functio
22700 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  n".  } else {.  
22710 20 20 73 65 74 20 66 72 61 67 6e 61 6d 65 20 5b    set fragname [
22720 6c 69 6e 64 65 78 20 24 6b 65 79 77 6f 72 64 73  lindex $keywords
22730 20 30 5d 0a 20 20 20 20 72 65 67 73 75 62 20 2d   0].    regsub -
22740 61 6c 6c 20 7b 5b 5e 61 2d 7a 5d 7d 20 24 66 72  all {[^a-z]} $fr
22750 61 67 6e 61 6d 65 20 7b 7d 20 66 72 61 67 6e 61  agname {} fragna
22760 6d 65 0a 20 20 20 20 68 64 5f 66 72 61 67 6d 65  me.    hd_fragme
22770 6e 74 20 24 66 72 61 67 6e 61 6d 65 0a 20 20 20  nt $fragname.   
22780 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64   eval hd_keyword
22790 73 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 5c  s [string map {\
227a0 6e 20 7b 20 7d 7d 20 24 6b 65 79 77 6f 72 64 73  n { }} $keywords
227b0 5d 0a 20 20 7d 0a 20 20 68 64 5f 70 75 74 73 20  ].  }.  hd_puts 
227c0 22 3c 64 74 3e 3c 70 3e 3c 62 3e 24 73 79 6e 74  "<dt><p><b>$synt
227d0 61 78 3c 2f 62 3e 3c 2f 64 74 3e 22 0a 20 20 68  ax</b></dt>".  h
227e0 64 5f 72 65 73 6f 6c 76 65 20 22 3c 64 64 3e 3c  d_resolve "<dd><
227f0 70 3e 24 64 65 73 63 3c 2f 64 64 3e 5c 6e 22 0a  p>$desc</dd>\n".
22800 7d 0a 68 64 5f 70 75 74 73 6e 6c 20 22 3c 2f 64  }.hd_putsnl "</d
22810 6c 3e 22 0a 0a 23 23 23 23 23 23 23 23 23 23 23  l>"..###########
22820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22860 23 23 23 0a 53 65 63 74 69 6f 6e 20 49 4e 53 45  ###.Section INSE
22870 52 54 20 69 6e 73 65 72 74 20 7b 49 4e 53 45 52  RT insert {INSER
22880 54 20 2a 49 4e 53 45 52 54 73 7d 0a 0a 52 65 63  T *INSERTs}..Rec
22890 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
228a0 72 61 6d 20 69 6e 73 65 72 74 2d 73 74 6d 74 0a  ram insert-stmt.
228b0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 49  </tcl>..<p>The I
228c0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
228d0 63 6f 6d 65 73 20 69 6e 20 74 68 72 65 65 20 62  comes in three b
228e0 61 73 69 63 20 66 6f 72 6d 73 2e 20 20 0a 3c 6f  asic forms.  .<o
228f0 6c 3e 0a 3c 6c 69 3e 3c 70 3e 3c 62 3e 49 4e 53  l>.<li><p><b>INS
22900 45 52 54 20 49 4e 54 4f 20 3c 2f 62 3e 3c 69 3e  ERT INTO </b><i>
22910 74 61 62 6c 65 3c 2f 69 3e 3c 62 3e 20 56 41 4c  table</i><b> VAL
22920 55 45 53 28 2e 2e 2e 29 3b 3c 2f 62 3e 0a 3c 70  UES(...);</b>.<p
22930 3e 5e 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  >^The first form
22940 20 28 77 69 74 68 20 74 68 65 20 22 56 41 4c 55   (with the "VALU
22950 45 53 22 20 6b 65 79 77 6f 72 64 29 20 63 72 65  ES" keyword) cre
22960 61 74 65 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ates one or more
22970 0a 6e 65 77 20 72 6f 77 73 20 69 6e 0a 61 6e 20  .new rows in.an 
22980 65 78 69 73 74 69 6e 67 20 74 61 62 6c 65 2e 20  existing table. 
22990 5e 49 66 20 74 68 65 20 3c 79 79 74 65 72 6d 3e  ^If the <yyterm>
229a0 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f 79 79 74  column-name</yyt
229b0 65 72 6d 3e 20 6c 69 73 74 20 61 66 74 65 72 0a  erm> list after.
229c0 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61  <yyterm>table-na
229d0 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 69 73 20 6f  me</yyterm> is o
229e0 6d 69 74 74 65 64 20 74 68 65 6e 20 74 68 65 20  mitted then the 
229f0 6e 75 6d 62 65 72 0a 6f 66 20 76 61 6c 75 65 73  number.of values
22a00 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 65   inserted into e
22a10 61 63 68 20 72 6f 77 0a 6d 75 73 74 20 62 65 20  ach row.must be 
22a20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
22a30 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
22a40 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
22a50 5e 49 6e 20 74 68 69 73 20 63 61 73 65 0a 74 68  ^In this case.th
22a60 65 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c  e result of eval
22a70 75 61 74 69 6e 67 20 74 68 65 20 6c 65 66 74 2d  uating the left-
22a80 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f 6e 20  most expression 
22a90 66 72 6f 6d 20 65 61 63 68 20 74 65 72 6d 20 6f  from each term o
22aa0 66 0a 74 68 65 20 56 41 4c 55 45 53 20 6c 69 73  f.the VALUES lis
22ab0 74 20 69 73 20 69 6e 73 65 72 74 65 64 20 69 6e  t is inserted in
22ac0 74 6f 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  to the left-most
22ad0 20 63 6f 6c 75 6d 6e 20 6f 66 20 65 61 63 68 20   column of each 
22ae0 6e 65 77 20 72 6f 77 2c 0a 61 6e 64 20 73 6f 20  new row,.and so 
22af0 66 6f 72 74 68 20 66 6f 72 20 65 61 63 68 20 73  forth for each s
22b00 75 62 73 65 71 75 65 6e 74 20 65 78 70 72 65 73  ubsequent expres
22b10 73 69 6f 6e 2e 20 5e 49 66 20 61 20 3c 79 79 74  sion. ^If a <yyt
22b20 65 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c  erm>column-name<
22b30 2f 79 79 74 65 72 6d 3e 0a 6c 69 73 74 20 69 73  /yyterm>.list is
22b40 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 65 6e   specified, then
22b50 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76   the number of v
22b60 61 6c 75 65 73 20 69 6e 20 65 61 63 68 20 74 65  alues in each te
22b70 72 6d 20 6f 66 20 74 68 65 0a 56 41 4c 55 45 20  rm of the.VALUE 
22b80 6c 69 73 74 20 6d 75 73 74 20 6d 61 74 63 68 20  list must match 
22b90 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 73 70  the number of.sp
22ba0 65 63 69 66 69 65 64 20 63 6f 6c 75 6d 6e 73 2e  ecified columns.
22bb0 20 5e 45 61 63 68 20 6f 66 20 74 68 65 20 6e 61   ^Each of the na
22bc0 6d 65 64 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  med columns of t
22bd0 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20 70 6f  he new row is po
22be0 70 75 6c 61 74 65 64 0a 77 69 74 68 20 74 68 65  pulated.with the
22bf0 20 72 65 73 75 6c 74 73 20 6f 66 20 65 76 61 6c   results of eval
22c00 75 61 74 69 6e 67 20 74 68 65 20 63 6f 72 72 65  uating the corre
22c10 73 70 6f 6e 64 69 6e 67 20 56 41 4c 55 45 53 20  sponding VALUES 
22c20 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 54 61 62  expression. ^Tab
22c30 6c 65 0a 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  le.columns that 
22c40 64 6f 20 6e 6f 74 20 61 70 70 65 61 72 20 69 6e  do not appear in
22c50 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 73 74   the column list
22c60 20 61 72 65 20 70 6f 70 75 6c 61 74 65 64 20 77   are populated w
22c70 69 74 68 20 74 68 65 20 0a 5b 64 65 66 61 75 6c  ith the .[defaul
22c80 74 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 5d 20  t column value] 
22c90 28 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61  (specified as pa
22ca0 72 74 20 6f 66 20 74 68 65 20 5b 43 52 45 41 54  rt of the [CREAT
22cb0 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
22cc0 6e 74 29 2c 20 6f 72 0a 77 69 74 68 20 4e 55 4c  nt), or.with NUL
22cd0 4c 20 69 66 20 6e 6f 20 5b 64 65 66 61 75 6c 74  L if no [default
22ce0 20 76 61 6c 75 65 5d 20 69 73 20 73 70 65 63 69   value] is speci
22cf0 66 69 65 64 2e 0a 0a 3c 6c 69 3e 3c 70 3e 3c 62  fied...<li><p><b
22d00 3e 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 2f 62  >INSERT INTO </b
22d10 3e 3c 69 3e 74 61 62 6c 65 3c 2f 69 3e 3c 62 3e  ><i>table</i><b>
22d20 20 53 45 4c 45 43 54 20 2e 2e 2e 3b 3c 2f 62 3e   SELECT ...;</b>
22d30 0a 3c 70 3e 54 68 65 20 73 65 63 6f 6e 64 20 66  .<p>The second f
22d40 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45 52  orm of the INSER
22d50 54 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 74  T statement cont
22d60 61 69 6e 73 20 61 20 5b 53 45 4c 45 43 54 5d 20  ains a [SELECT] 
22d70 73 74 61 74 65 6d 65 6e 74 0a 69 6e 73 74 65 61  statement.instea
22d80 64 20 6f 66 20 61 20 56 41 4c 55 45 53 20 63 6c  d of a VALUES cl
22d90 61 75 73 65 2e 20 5e 41 20 6e 65 77 20 65 6e 74  ause. ^A new ent
22da0 72 79 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  ry is inserted i
22db0 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 66 6f  nto the table fo
22dc0 72 20 65 61 63 68 0a 72 6f 77 20 6f 66 20 64 61  r each.row of da
22dd0 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  ta returned by e
22de0 78 65 63 75 74 69 6e 67 20 74 68 65 20 53 45 4c  xecuting the SEL
22df0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 5e  ECT statement. ^
22e00 49 66 20 61 20 63 6f 6c 75 6d 6e 2d 6c 69 73 74  If a column-list
22e10 20 69 73 0a 73 70 65 63 69 66 69 65 64 2c 20 74   is.specified, t
22e20 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
22e30 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
22e40 6c 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  lt of the SELECT
22e50 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
22e60 65 0a 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20  e.as the number 
22e70 6f 66 20 69 74 65 6d 73 20 69 6e 20 74 68 65 20  of items in the 
22e80 63 6f 6c 75 6d 6e 2d 6c 69 73 74 2e 20 5e 4f 74  column-list. ^Ot
22e90 68 65 72 77 69 73 65 2c 20 69 66 20 6e 6f 20 63  herwise, if no c
22ea0 6f 6c 75 6d 6e 2d 6c 69 73 74 20 69 73 0a 73 70  olumn-list is.sp
22eb0 65 63 69 66 69 65 64 2c 20 74 68 65 20 6e 75 6d  ecified, the num
22ec0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
22ed0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
22ee0 74 68 65 20 53 45 4c 45 43 54 20 6d 75 73 74 20  the SELECT must 
22ef0 62 65 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74  be the same.as t
22f00 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
22f10 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
22f20 65 2e 20 5e 41 6e 79 20 53 45 4c 45 43 54 20 73  e. ^Any SELECT s
22f30 74 61 74 65 6d 65 6e 74 2c 20 69 6e 63 6c 75 64  tatement, includ
22f40 69 6e 67 0a 5b 63 6f 6d 70 6f 75 6e 64 20 53 45  ing.[compound SE
22f50 4c 45 43 54 73 5d 20 61 6e 64 20 53 45 4c 45 43  LECTs] and SELEC
22f60 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  T statements wit
22f70 68 20 5b 4f 52 44 45 52 20 42 59 5d 20 61 6e 64  h [ORDER BY] and
22f80 2f 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75  /or [LIMIT] clau
22f90 73 65 73 2c 20 0a 6d 61 79 20 62 65 20 75 73 65  ses, .may be use
22fa0 64 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  d in an INSERT s
22fb0 74 61 74 65 6d 65 6e 74 20 6f 66 20 74 68 69 73  tatement of this
22fc0 20 66 6f 72 6d 2e 0a 0a 3c 70 3e 54 6f 20 61 76   form...<p>To av
22fd0 6f 69 64 20 61 20 70 61 72 73 69 6e 67 20 61 6d  oid a parsing am
22fe0 62 69 67 75 69 74 79 2c 20 74 68 65 20 53 45 4c  biguity, the SEL
22ff0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73 68  ECT statement sh
23000 6f 75 6c 64 20 61 6c 77 61 79 73 0a 63 6f 6e 74  ould always.cont
23010 61 69 6e 20 61 20 57 48 45 52 45 20 63 6c 61 75  ain a WHERE clau
23020 73 65 2c 20 65 76 65 6e 20 69 66 20 74 68 61 74  se, even if that
23030 20 63 6c 61 75 73 65 20 69 73 20 73 69 6d 70 6c   clause is simpl
23040 79 20 22 57 48 45 52 45 20 74 72 75 65 22 2c 0a  y "WHERE true",.
23050 69 66 20 74 68 65 20 5b 75 70 73 65 72 74 2d 63  if the [upsert-c
23060 6c 61 75 73 65 5d 20 69 73 20 70 72 65 73 65 6e  lause] is presen
23070 74 2e 20 20 57 69 74 68 6f 75 74 20 74 68 65 20  t.  Without the 
23080 57 48 45 52 45 20 63 6c 61 75 73 65 2c 20 74 68  WHERE clause, th
23090 65 0a 70 61 72 73 65 72 20 64 6f 65 73 20 6e 6f  e.parser does no
230a0 74 20 6b 6e 6f 77 20 69 66 20 74 68 65 20 74 6f  t know if the to
230b0 6b 65 6e 20 22 4f 4e 22 20 69 73 20 70 61 72 74  ken "ON" is part
230c0 20 6f 66 20 61 20 6a 6f 69 6e 20 63 6f 6e 73 74   of a join const
230d0 72 61 69 6e 74 0a 6f 6e 20 74 68 65 20 53 45 4c  raint.on the SEL
230e0 45 43 54 2c 20 6f 72 20 74 68 65 20 62 65 67 69  ECT, or the begi
230f0 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 5b 75 70  nning of the [up
23100 73 65 72 74 2d 63 6c 61 75 73 65 5d 2e 0a 0a 3c  sert-clause]...<
23110 6c 69 3e 3c 70 3e 3c 62 3e 49 4e 53 45 52 54 20  li><p><b>INSERT 
23120 49 4e 54 4f 20 3c 2f 62 3e 3c 69 3e 74 61 62 6c  INTO </b><i>tabl
23130 65 3c 2f 69 3e 3c 62 3e 20 44 45 46 41 55 4c 54  e</i><b> DEFAULT
23140 20 56 41 4c 55 45 53 3b 3c 2f 62 3e 0a 3c 70 3e   VALUES;</b>.<p>
23150 54 68 65 20 74 68 69 72 64 20 66 6f 72 6d 20 6f  The third form o
23160 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  f an INSERT stat
23170 65 6d 65 6e 74 20 69 73 20 77 69 74 68 20 44 45  ement is with DE
23180 46 41 55 4c 54 20 56 41 4c 55 45 53 2e 0a 5e 28  FAULT VALUES..^(
23190 54 68 65 20 49 4e 53 45 52 54 20 2e 2e 2e 20 44  The INSERT ... D
231a0 45 46 41 55 4c 54 20 56 41 4c 55 45 53 20 73 74  EFAULT VALUES st
231b0 61 74 65 6d 65 6e 74 20 69 6e 73 65 72 74 73 20  atement inserts 
231c0 61 20 73 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77  a single new row
231d0 20 69 6e 74 6f 20 74 68 65 0a 6e 61 6d 65 64 20   into the.named 
231e0 74 61 62 6c 65 2e 29 5e 20 5e 45 61 63 68 20 63  table.)^ ^Each c
231f0 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 65 77  olumn of the new
23200 20 72 6f 77 20 69 73 20 70 6f 70 75 6c 61 74 65   row is populate
23210 64 20 77 69 74 68 20 69 74 73 20 0a 5b 64 65 66  d with its .[def
23220 61 75 6c 74 20 76 61 6c 75 65 5d 2c 20 6f 72 20  ault value], or 
23230 77 69 74 68 20 61 20 4e 55 4c 4c 20 69 66 20 6e  with a NULL if n
23240 6f 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  o default value 
23250 69 73 20 73 70 65 63 69 66 69 65 64 20 0a 61 73  is specified .as
23260 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 6f 6c   part of the col
23270 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  umn definition i
23280 6e 20 74 68 65 20 5b 43 52 45 41 54 45 20 54 41  n the [CREATE TA
23290 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a  BLE] statement..
232a0 54 68 65 20 5b 75 70 73 65 72 74 2d 63 6c 61 75  The [upsert-clau
232b0 73 65 5d 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  se] is not suppo
232c0 72 74 65 64 20 61 66 74 65 72 20 44 45 46 41 55  rted after DEFAU
232d0 4c 54 20 56 41 4c 55 45 53 2e 0a 0a 3c 2f 6f 6c  LT VALUES...</ol
232e0 3e 0a 0a 3c 70 3e 0a 5e 54 68 65 20 69 6e 69 74  >..<p>.^The init
232f0 69 61 6c 20 22 49 4e 53 45 52 54 22 20 6b 65 79  ial "INSERT" key
23300 77 6f 72 64 20 63 61 6e 20 62 65 20 72 65 70 6c  word can be repl
23310 61 63 65 64 20 62 79 0a 22 52 45 50 4c 41 43 45  aced by."REPLACE
23320 22 20 6f 72 20 22 49 4e 53 45 52 54 20 4f 52 20  " or "INSERT OR 
23330 3c 69 3e 61 63 74 69 6f 6e 3c 2f 69 3e 22 20 74  <i>action</i>" t
23340 6f 20 73 70 65 63 69 66 79 20 61 6e 20 61 6c 74  o specify an alt
23350 65 72 6e 61 74 69 76 65 0a 63 6f 6e 73 74 72 61  ernative.constra
23360 69 6e 74 20 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  int [ON CONFLICT
23370 7c 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75  |conflict resolu
23380 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 5d 20  tion algorithm] 
23390 74 6f 20 75 73 65 20 64 75 72 69 6e 67 20 0a 74  to use during .t
233a0 68 61 74 20 6f 6e 65 20 49 4e 53 45 52 54 20 63  hat one INSERT c
233b0 6f 6d 6d 61 6e 64 2e 0a 46 6f 72 20 63 6f 6d 70  ommand..For comp
233c0 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 4d  atibility with M
233d0 79 53 51 4c 2c 20 5e 74 68 65 20 70 61 72 73 65  ySQL, ^the parse
233e0 72 20 61 6c 6c 6f 77 73 20 74 68 65 20 75 73 65  r allows the use
233f0 20 6f 66 20 74 68 65 0a 73 69 6e 67 6c 65 20 6b   of the.single k
23400 65 79 77 6f 72 64 20 3c 61 20 68 72 65 66 3d 22  eyword <a href="
23410 6c 61 6e 67 5f 72 65 70 6c 61 63 65 2e 68 74 6d  lang_replace.htm
23420 6c 22 3e 52 45 50 4c 41 43 45 3c 2f 61 3e 20 61  l">REPLACE</a> a
23430 73 20 61 6e 20 0a 61 6c 69 61 73 20 66 6f 72 20  s an .alias for 
23440 22 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41  "INSERT OR REPLA
23450 43 45 22 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 6f  CE"...<p>^(The o
23460 70 74 69 6f 6e 61 6c 20 22 3c 69 3e 73 63 68 65  ptional "<i>sche
23470 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62 3e 2e 3c  ma-name</i><b>.<
23480 2f 62 3e 22 20 70 72 65 66 69 78 20 6f 6e 20 74  /b>" prefix on t
23490 68 65 20 0a 3c 79 79 74 65 72 6d 3e 74 61 62 6c  he .<yyterm>tabl
234a0 65 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 0a  e-name</yyterm>.
234b0 69 73 20 73 75 70 70 6f 72 74 65 64 20 66 6f 72  is supported for
234c0 20 74 6f 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52   top-level INSER
234d0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c  T statements onl
234e0 79 2e 29 5e 20 20 5e 54 68 65 20 74 61 62 6c 65  y.)^  ^The table
234f0 20 6e 61 6d 65 20 6d 75 73 74 20 62 65 0a 75 6e   name must be.un
23500 71 75 61 6c 69 66 69 65 64 20 66 6f 72 20 49 4e  qualified for IN
23510 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 73 20  SERT statements 
23520 74 68 61 74 20 6f 63 63 75 72 20 77 69 74 68 69  that occur withi
23530 6e 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  n [CREATE TRIGGE
23540 52 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 5e  R] statements..^
23550 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 22  Similarly, the "
23560 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20  DEFAULT VALUES" 
23570 66 6f 72 6d 20 6f 66 20 74 68 65 20 49 4e 53 45  form of the INSE
23580 52 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  RT statement is 
23590 73 75 70 70 6f 72 74 65 64 20 66 6f 72 0a 74 6f  supported for.to
235a0 70 2d 6c 65 76 65 6c 20 49 4e 53 45 52 54 20 73  p-level INSERT s
235b0 74 61 74 65 6d 65 6e 74 73 20 6f 6e 6c 79 20 61  tatements only a
235c0 6e 64 20 6e 6f 74 20 66 6f 72 20 49 4e 53 45 52  nd not for INSER
235d0 54 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  T statements wit
235e0 68 69 6e 0a 74 72 69 67 67 65 72 73 2e 0a 3c 70  hin.triggers..<p
235f0 3e 0a 0a 3c 70 3e 54 68 65 20 6f 70 74 69 6f 6e  >..<p>The option
23600 61 6c 20 22 41 53 20 3c 79 79 74 65 72 6d 3e 61  al "AS <yyterm>a
23610 6c 69 61 73 3c 2f 79 79 74 65 72 6d 3e 22 20 70  lias</yyterm>" p
23620 68 72 61 73 65 20 70 72 6f 76 69 64 65 73 20 61  hrase provides a
23630 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 0a 6e 61  n alternative.na
23640 6d 65 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  me for the table
23650 20 69 6e 74 6f 20 77 68 69 63 68 20 63 6f 6e 74   into which cont
23660 65 6e 74 20 69 73 20 62 65 69 6e 67 20 69 6e 73  ent is being ins
23670 65 72 74 65 64 2e 20 20 54 68 65 20 61 6c 69 61  erted.  The alia
23680 73 20 6e 61 6d 65 0a 63 61 6e 20 62 65 20 75 73  s name.can be us
23690 65 64 20 77 69 74 68 69 6e 20 57 48 45 52 45 20  ed within WHERE 
236a0 61 6e 64 20 53 45 54 20 63 6c 61 75 73 65 73 20  and SET clauses 
236b0 6f 66 20 74 68 65 20 5b 55 50 53 45 52 54 5d 2e  of the [UPSERT].
236c0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f    If there is no
236d0 0a 5b 75 70 73 65 72 74 2d 63 6c 61 75 73 65 5d  .[upsert-clause]
236e0 2c 20 74 68 65 6e 20 74 68 65 20 3c 79 79 74 65  , then the <yyte
236f0 72 6d 3e 61 6c 69 61 73 3c 2f 79 79 74 65 72 6d  rm>alias</yyterm
23700 3e 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 2c 20  > is pointless, 
23710 62 75 74 20 61 6c 73 6f 0a 68 61 72 6d 6c 65 73  but also.harmles
23720 73 2e 0a 0a 3c 70 3e 53 65 65 20 74 68 65 20 73  s...<p>See the s
23730 65 70 61 72 61 74 65 20 5b 55 50 53 45 52 54 5d  eparate [UPSERT]
23740 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
23750 6f 72 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61  or the additiona
23760 6c 20 74 72 61 69 6c 69 6e 67 0a 73 79 6e 74 61  l trailing.synta
23770 78 20 74 68 61 74 20 63 61 6e 20 63 61 75 73 65  x that can cause
23780 20 61 6e 20 49 4e 53 45 52 54 20 74 6f 20 62 65   an INSERT to be
23790 68 61 76 65 20 61 73 20 61 6e 20 55 50 44 41 54  have as an UPDAT
237a0 45 20 69 66 20 74 68 65 20 49 4e 53 45 52 54 20  E if the INSERT 
237b0 77 6f 75 6c 64 0a 6f 74 68 65 72 77 69 73 65 20  would.otherwise 
237c0 76 69 6f 6c 61 74 65 20 61 20 75 6e 69 71 75 65  violate a unique
237d0 6e 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  ness constraint.
237e0 20 20 54 68 65 20 5b 75 70 73 65 72 74 20 63 6c    The [upsert cl
237f0 61 75 73 65 5d 20 69 73 20 6e 6f 74 0a 61 6c 6c  ause] is not.all
23800 6f 77 65 64 20 6f 6e 20 61 6e 20 22 49 4e 53 45  owed on an "INSE
23810 52 54 20 2e 2e 2e 20 44 45 46 41 55 4c 54 20 56  RT ... DEFAULT V
23820 41 4c 55 45 53 22 2e 0a 0a 0a 3c 74 63 6c 3e 0a  ALUES"....<tcl>.
23830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
23880 65 63 74 69 6f 6e 20 75 70 73 65 72 74 20 55 50  ection upsert UP
23890 53 45 52 54 20 7b 55 50 53 45 52 54 20 7b 75 70  SERT {UPSERT {up
238a0 73 65 72 74 20 63 6c 61 75 73 65 7d 7d 0a 0a 52  sert clause}}..R
238b0 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
238c0 61 67 72 61 6d 20 75 70 73 65 72 74 2d 63 6c 61  agram upsert-cla
238d0 75 73 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 55  use.</tcl>..<p>U
238e0 50 53 45 52 54 20 69 73 20 61 20 73 70 65 63 69  PSERT is a speci
238f0 61 6c 20 73 79 6e 74 61 78 20 61 64 64 69 74 69  al syntax additi
23900 6f 6e 20 74 6f 20 5b 49 4e 53 45 52 54 5d 20 74  on to [INSERT] t
23910 68 61 74 20 63 61 75 73 65 73 20 74 68 65 0a 49  hat causes the.I
23920 4e 53 45 52 54 20 74 6f 20 62 65 68 61 76 65 20  NSERT to behave 
23930 61 73 20 61 6e 20 5b 55 50 44 41 54 45 5d 20 6f  as an [UPDATE] o
23940 72 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  r a no-op if the
23950 20 49 4e 53 45 52 54 20 77 6f 75 6c 64 20 76 69   INSERT would vi
23960 6f 6c 61 74 65 0a 61 20 75 6e 69 71 75 65 6e 65  olate.a uniquene
23970 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 55  ss constraint..U
23980 50 53 45 52 54 20 69 73 20 6e 6f 74 20 73 74 61  PSERT is not sta
23990 6e 64 61 72 64 20 53 51 4c 2e 20 20 55 50 53 45  ndard SQL.  UPSE
239a0 52 54 20 69 6e 20 53 51 4c 69 74 65 20 66 6f 6c  RT in SQLite fol
239b0 6c 6f 77 73 20 74 68 65 0a 73 79 6e 74 61 78 20  lows the.syntax 
239c0 65 73 74 61 62 6c 69 73 68 65 64 20 62 79 20 50  established by P
239d0 6f 73 74 67 72 65 53 51 4c 2e 0a 55 50 53 45 52  ostgreSQL..UPSER
239e0 54 20 73 79 6e 74 61 78 20 77 61 73 20 61 64 64  T syntax was add
239f0 65 64 20 74 6f 20 53 51 4c 69 74 65 20 77 69 74  ed to SQLite wit
23a00 68 20 76 65 72 73 69 6f 6e 20 33 2e 32 34 2e 30  h version 3.24.0
23a10 20 28 5b 64 61 74 65 6f 66 3a 33 2e 32 34 2e 30   ([dateof:3.24.0
23a20 5d 29 2e 0a 0a 3c 70 3e 41 6e 20 55 50 53 45 52  ])...<p>An UPSER
23a30 54 20 69 73 20 61 6e 20 6f 72 64 69 6e 61 72 79  T is an ordinary
23a40 20 5b 49 4e 53 45 52 54 5d 20 73 74 61 74 65 6d   [INSERT] statem
23a50 65 6e 74 20 74 68 61 74 20 69 73 20 66 6f 6c 6c  ent that is foll
23a60 6f 77 65 64 20 62 79 0a 74 68 65 20 73 70 65 63  owed by.the spec
23a70 69 61 6c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ial ON CONFLICT 
23a80 63 6c 61 75 73 65 20 73 68 6f 77 6e 20 61 62 6f  clause shown abo
23a90 76 65 2e 0a 0a 3c 70 3e 54 68 65 20 73 79 6e 74  ve...<p>The synt
23aa0 61 78 20 74 68 61 74 20 6f 63 63 75 72 73 20 69  ax that occurs i
23ab0 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 22 4f  n between the "O
23ac0 4e 20 43 4f 4e 46 4c 49 43 54 22 20 61 6e 64 20  N CONFLICT" and 
23ad0 22 44 4f 22 20 6b 65 79 77 6f 72 64 73 0a 69 73  "DO" keywords.is
23ae0 20 63 61 6c 6c 65 64 20 74 68 65 20 22 63 6f 6e   called the "con
23af0 66 6c 69 63 74 20 74 61 72 67 65 74 22 2e 20 20  flict target".  
23b00 54 68 65 20 63 6f 6e 66 6c 69 63 74 20 74 61 72  The conflict tar
23b10 67 65 74 20 73 70 65 63 69 66 69 65 73 20 61 20  get specifies a 
23b20 73 70 65 63 69 66 69 63 0a 75 6e 69 71 75 65 6e  specific.uniquen
23b30 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 74  ess constraint t
23b40 68 61 74 20 77 69 6c 6c 20 74 72 69 67 67 65 72  hat will trigger
23b50 20 74 68 65 20 75 70 73 65 72 74 2e 20 20 54 68   the upsert.  Th
23b60 65 20 63 6f 6e 66 6c 69 63 74 20 74 61 72 67 65  e conflict targe
23b70 74 0a 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  t.is required fo
23b80 72 20 44 4f 20 55 50 44 41 54 45 20 75 70 73 65  r DO UPDATE upse
23b90 72 74 73 2c 20 62 75 74 20 69 73 20 6f 70 74 69  rts, but is opti
23ba0 6f 6e 61 6c 20 66 6f 72 20 44 4f 20 4e 4f 54 48  onal for DO NOTH
23bb0 49 4e 47 2e 0a 41 20 44 4f 20 4e 4f 54 48 49 4e  ING..A DO NOTHIN
23bc0 47 20 75 70 73 65 72 74 20 77 69 74 68 6f 75 74  G upsert without
23bd0 20 61 20 63 6f 6e 66 6c 69 63 74 20 74 61 72 67   a conflict targ
23be0 65 74 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  et works the sam
23bf0 65 20 61 73 20 61 6e 0a 5b 4f 4e 20 43 4f 4e 46  e as an.[ON CONF
23c00 4c 49 43 54 7c 49 4e 53 45 52 54 20 4f 52 20 49  LICT|INSERT OR I
23c10 47 4e 4f 52 45 5d 2e 0a 0a 3c 70 3e 49 66 20 74  GNORE]...<p>If t
23c20 68 65 20 69 6e 73 65 72 74 20 6f 70 65 72 61 74  he insert operat
23c30 69 6f 6e 20 77 6f 75 6c 64 20 63 61 75 73 65 20  ion would cause 
23c40 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73 20 63  the uniqueness c
23c50 6f 6e 73 74 72 61 69 6e 74 20 69 64 65 6e 74 69  onstraint identi
23c60 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f 6e 66  fied.by the conf
23c70 6c 69 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75  lict-target clau
23c80 73 65 20 74 6f 20 66 61 69 6c 2c 20 74 68 65 6e  se to fail, then
23c90 20 74 68 65 20 69 6e 73 65 72 74 20 69 73 20 6f   the insert is o
23ca0 6d 69 74 74 65 64 20 61 6e 64 0a 65 69 74 68 65  mitted and.eithe
23cb0 72 20 74 68 65 20 44 4f 20 4e 4f 54 48 49 4e 47  r the DO NOTHING
23cc0 20 6f 72 20 44 4f 20 55 50 44 41 54 45 20 6f 70   or DO UPDATE op
23cd0 65 72 61 74 69 6f 6e 20 69 73 20 70 65 72 66 6f  eration is perfo
23ce0 72 6d 65 64 20 69 6e 73 74 65 61 64 2e 0a 49 6e  rmed instead..In
23cf0 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 6d   the case of a m
23d00 75 6c 74 69 2d 72 6f 77 20 69 6e 73 65 72 74 2c  ulti-row insert,
23d10 20 74 68 69 73 20 64 65 63 69 73 69 6f 6e 20 69   this decision i
23d20 73 20 6d 61 64 65 20 73 65 70 61 72 61 74 65 6c  s made separatel
23d30 79 0a 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  y.for each row o
23d40 66 20 74 68 65 20 69 6e 73 65 72 74 2e 0a 0a 3c  f the insert...<
23d50 70 3e 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 69  p>Column names i
23d60 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
23d70 73 20 6f 66 20 61 20 44 4f 20 55 50 44 41 54 45  s of a DO UPDATE
23d80 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6f 72   refer to the or
23d90 69 67 69 6e 61 6c 0a 75 6e 63 68 61 6e 67 65 64  iginal.unchanged
23da0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
23db0 6c 75 6d 6e 2c 20 62 65 66 6f 72 65 20 74 68 65  lumn, before the
23dc0 20 61 74 74 65 6d 70 74 65 64 20 49 4e 53 45 52   attempted INSER
23dd0 54 2e 20 20 54 6f 20 75 73 65 20 74 68 65 0a 76  T.  To use the.v
23de0 61 6c 75 65 20 74 68 61 74 20 77 6f 75 6c 64 20  alue that would 
23df0 68 61 76 65 20 62 65 65 6e 20 69 6e 73 65 72 74  have been insert
23e00 65 64 20 68 61 64 20 74 68 65 20 63 6f 6e 73 74  ed had the const
23e10 72 61 69 6e 74 20 6e 6f 74 20 66 61 69 6c 65 64  raint not failed
23e20 2c 0a 61 64 64 20 74 68 65 20 73 70 65 63 69 61  ,.add the specia
23e30 6c 20 22 65 78 63 6c 75 64 65 64 2e 22 20 74 61  l "excluded." ta
23e40 62 6c 65 20 71 75 61 6c 69 66 69 65 72 20 74 6f  ble qualifier to
23e50 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   the column name
23e60 2e 0a 0a 3c 70 3e 53 6f 6d 65 20 65 78 61 6d 70  ...<p>Some examp
23e70 6c 65 73 20 77 69 6c 6c 20 68 65 6c 70 20 69 6c  les will help il
23e80 6c 75 73 74 72 61 74 65 20 74 68 65 20 64 69 66  lustrate the dif
23e90 66 65 72 65 6e 63 65 3a 0a 0a 3c 62 6c 6f 63 6b  ference:..<block
23ea0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
23eb0 54 45 20 54 41 42 4c 45 20 76 6f 63 61 62 75 6c  TE TABLE vocabul
23ec0 61 72 79 28 77 6f 72 64 20 54 45 58 54 20 50 52  ary(word TEXT PR
23ed0 49 4d 41 52 59 20 4b 45 59 2c 20 63 6f 75 6e 74  IMARY KEY, count
23ee0 20 49 4e 54 20 44 45 46 41 55 4c 54 20 31 29 3b   INT DEFAULT 1);
23ef0 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 76 6f 63  .INSERT INTO voc
23f00 61 62 75 6c 61 72 79 28 77 6f 72 64 29 20 56 41  abulary(word) VA
23f10 4c 55 45 53 28 27 6a 6f 76 69 61 6c 27 29 0a 20  LUES('jovial'). 
23f20 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 77 6f 72   ON CONFLICT(wor
23f30 64 29 20 44 4f 20 55 50 44 41 54 45 20 53 45 54  d) DO UPDATE SET
23f40 20 63 6f 75 6e 74 3d 63 6f 75 6e 74 2b 31 3b 0a   count=count+1;.
23f50 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
23f60 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 75 70 73 65  te>..<p>The upse
23f70 72 74 20 61 62 6f 76 65 20 69 6e 73 65 72 74 73  rt above inserts
23f80 20 74 68 65 20 6e 65 77 20 76 6f 63 61 62 75 6c   the new vocabul
23f90 61 72 79 20 77 6f 72 64 20 22 6a 6f 76 69 61 6c  ary word "jovial
23fa0 22 20 69 66 20 74 68 61 74 0a 77 6f 72 64 20 69  " if that.word i
23fb0 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 69 6e  s not already in
23fc0 20 74 68 65 20 64 69 63 74 69 6f 6e 61 72 79 2c   the dictionary,
23fd0 20 6f 72 20 69 66 20 69 74 20 69 73 20 61 6c 72   or if it is alr
23fe0 65 61 64 79 20 69 6e 20 74 68 65 0a 64 69 63 74  eady in the.dict
23ff0 69 6f 6e 61 72 79 2c 20 69 74 20 69 6e 63 72 65  ionary, it incre
24000 6d 65 6e 74 73 20 74 68 65 20 63 6f 75 6e 74 65  ments the counte
24010 72 2e 20 20 54 68 65 20 22 63 6f 75 6e 74 2b 31  r.  The "count+1
24020 22 20 65 78 70 72 65 73 73 69 6f 6e 0a 63 6f 75  " expression.cou
24030 6c 64 20 61 6c 73 6f 20 62 65 20 77 72 69 74 74  ld also be writt
24040 65 6e 20 61 73 20 22 76 6f 63 61 62 75 6c 61 72  en as "vocabular
24050 79 2e 63 6f 75 6e 74 22 2e 20 20 50 6f 73 74 67  y.count".  Postg
24060 72 65 53 51 4c 20 72 65 71 75 69 72 65 73 20 74  reSQL requires t
24070 68 65 0a 73 65 63 6f 6e 64 20 66 6f 72 6d 2c 20  he.second form, 
24080 62 75 74 20 53 51 4c 69 74 65 20 61 63 63 65 70  but SQLite accep
24090 74 73 20 65 69 74 68 65 72 2e 0a 0a 3c 62 6c 6f  ts either...<blo
240a0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
240b0 45 41 54 45 20 54 41 42 4c 45 20 70 68 6f 6e 65  EATE TABLE phone
240c0 62 6f 6f 6b 28 6e 61 6d 65 20 54 45 58 54 20 50  book(name TEXT P
240d0 52 49 4d 41 52 59 20 4b 45 59 2c 20 70 68 6f 6e  RIMARY KEY, phon
240e0 65 6e 75 6d 62 65 72 20 54 45 58 54 29 3b 0a 49  enumber TEXT);.I
240f0 4e 53 45 52 54 20 49 4e 54 4f 20 70 68 6f 6e 65  NSERT INTO phone
24100 62 6f 6f 6b 28 6e 61 6d 65 2c 70 68 6f 6e 65 6e  book(name,phonen
24110 75 6d 62 65 72 29 20 56 41 4c 55 45 53 28 27 41  umber) VALUES('A
24120 6c 69 63 65 27 2c 27 37 30 34 2d 35 35 35 2d 31  lice','704-555-1
24130 32 31 32 27 29 0a 20 20 4f 4e 20 43 4f 4e 46 4c  212').  ON CONFL
24140 49 43 54 28 6e 61 6d 65 29 20 44 4f 20 55 50 44  ICT(name) DO UPD
24150 41 54 45 20 53 45 54 20 70 68 6f 6e 65 6e 75 6d  ATE SET phonenum
24160 62 65 72 3d 65 78 63 6c 75 64 65 64 2e 70 68 6f  ber=excluded.pho
24170 6e 65 6e 75 6d 62 65 72 3b 0a 3c 2f 70 72 65 3e  nenumber;.</pre>
24180 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
24190 70 3e 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  p>In the second 
241a0 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 65 78 70  example, the exp
241b0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 44  ression in the D
241c0 4f 20 55 50 44 41 54 45 20 63 6c 61 75 73 65 20  O UPDATE clause 
241d0 69 73 0a 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  is.of the form "
241e0 65 78 63 6c 75 64 65 64 2e 70 68 6f 6e 65 6e 75  excluded.phonenu
241f0 6d 62 65 72 22 2e 20 20 54 68 65 20 22 65 78 63  mber".  The "exc
24200 6c 75 64 65 64 2e 22 20 70 72 65 66 69 78 20 63  luded." prefix c
24210 61 75 73 65 73 20 74 68 65 0a 22 70 68 6f 6e 65  auses the."phone
24220 6e 75 6d 62 65 72 22 20 74 6f 20 72 65 66 65 72  number" to refer
24230 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 66 6f   to the value fo
24240 72 20 70 68 6f 6e 65 6e 75 6d 62 65 72 20 74 68  r phonenumber th
24250 61 74 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  at would have be
24260 65 6e 0a 69 6e 73 65 72 74 65 64 20 68 61 64 20  en.inserted had 
24270 74 68 65 72 65 20 62 65 65 6e 20 6e 6f 20 63 6f  there been no co
24280 6e 66 6c 69 63 74 2e 20 20 48 65 6e 63 65 2c 20  nflict.  Hence, 
24290 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 74 68  the effect of th
242a0 65 20 75 70 73 65 72 74 0a 69 73 20 74 6f 20 69  e upsert.is to i
242b0 6e 73 65 72 74 20 61 20 70 68 6f 6e 65 6e 75 6d  nsert a phonenum
242c0 62 65 72 20 6f 66 20 41 6c 69 63 65 20 69 66 20  ber of Alice if 
242d0 6e 6f 6e 65 20 65 78 69 73 74 73 2c 20 6f 72 20  none exists, or 
242e0 74 6f 20 6f 76 65 72 77 72 69 74 65 0a 61 6e 79  to overwrite.any
242f0 20 70 72 69 6f 72 20 70 68 6f 6e 65 6e 75 6d 62   prior phonenumb
24300 65 72 20 66 6f 72 20 41 6c 69 63 65 20 77 69 74  er for Alice wit
24310 68 20 74 68 65 20 6e 65 77 20 6f 6e 65 2e 0a 0a  h the new one...
24320 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 74 68 65  <p>Note that the
24330 20 44 4f 20 55 50 44 41 54 45 20 63 6c 61 75 73   DO UPDATE claus
24340 65 20 61 63 74 73 20 6f 6e 6c 79 20 6f 6e 20 74  e acts only on t
24350 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 0a 74 68  he single row.th
24360 61 74 20 65 78 70 65 72 69 65 6e 63 65 64 20 74  at experienced t
24370 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 65 72  he constraint er
24380 72 6f 72 20 64 75 72 69 6e 67 20 49 4e 53 45 52  ror during INSER
24390 54 2e 20 20 49 74 20 69 73 20 6e 6f 74 0a 6e 65  T.  It is not.ne
243a0 63 65 73 73 61 72 79 20 74 6f 20 69 6e 63 6c 75  cessary to inclu
243b0 64 65 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  de a WHERE claus
243c0 65 20 74 68 61 74 20 72 65 73 74 72 69 63 74 69  e that restricti
243d0 6f 6e 73 20 74 68 65 20 61 63 74 69 6f 6e 0a 74  ons the action.t
243e0 6f 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 2e 20  o that one row. 
243f0 20 54 68 65 20 6f 6e 6c 79 20 75 73 65 20 66 6f   The only use fo
24400 72 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  r the WHERE clau
24410 73 65 20 61 74 0a 74 68 65 20 65 6e 64 20 6f 66  se at.the end of
24420 20 74 68 65 20 44 4f 20 55 50 44 41 54 45 20 69   the DO UPDATE i
24430 73 20 74 6f 20 6f 70 74 69 6f 6e 61 6c 6c 79 20  s to optionally 
24440 63 68 61 6e 67 65 20 74 68 65 20 44 4f 20 55 50  change the DO UP
24450 44 41 54 45 0a 69 6e 74 6f 20 61 20 6e 6f 2d 6f  DATE.into a no-o
24460 70 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  p depending on t
24470 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 2f  he original and/
24480 6f 72 20 6e 65 77 20 76 61 6c 75 65 73 2e 0a 46  or new values..F
24490 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c  or example:..<bl
244a0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
244b0 52 45 41 54 45 20 54 41 42 4c 45 20 70 68 6f 6e  REATE TABLE phon
244c0 65 62 6f 6f 6b 32 28 0a 20 20 6e 61 6d 65 20 54  ebook2(.  name T
244d0 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  EXT PRIMARY KEY,
244e0 0a 20 20 70 68 6f 6e 65 6e 75 6d 62 65 72 20 54  .  phonenumber T
244f0 45 58 54 2c 0a 20 20 76 61 6c 69 64 44 61 74 65  EXT,.  validDate
24500 20 44 41 54 45 0a 29 3b 0a 49 4e 53 45 52 54 20   DATE.);.INSERT 
24510 49 4e 54 4f 20 70 68 6f 6e 65 62 6f 6f 6b 32 28  INTO phonebook2(
24520 6e 61 6d 65 2c 70 68 6f 6e 65 6e 75 6d 62 65 72  name,phonenumber
24530 2c 76 61 6c 69 64 44 61 74 65 29 0a 20 20 56 41  ,validDate).  VA
24540 4c 55 45 53 28 27 41 6c 69 63 65 27 2c 27 37 30  LUES('Alice','70
24550 34 2d 35 35 35 2d 31 32 31 32 27 2c 27 32 30 31  4-555-1212','201
24560 38 2d 30 35 2d 30 38 27 29 0a 20 20 4f 4e 20 43  8-05-08').  ON C
24570 4f 4e 46 4c 49 43 54 28 6e 61 6d 65 29 20 44 4f  ONFLICT(name) DO
24580 20 55 50 44 41 54 45 20 53 45 54 0a 20 20 20 20   UPDATE SET.    
24590 70 68 6f 6e 65 6e 75 6d 62 65 72 3d 65 78 63 6c  phonenumber=excl
245a0 75 64 65 64 2e 70 68 6f 6e 65 6e 75 6d 62 65 72  uded.phonenumber
245b0 2c 0a 20 20 20 20 76 61 6c 69 64 44 61 74 65 3d  ,.    validDate=
245c0 65 78 63 6c 75 64 65 64 2e 76 61 6c 69 64 44 61  excluded.validDa
245d0 74 65 0a 20 20 57 48 45 52 45 20 65 78 63 6c 75  te.  WHERE exclu
245e0 64 65 64 2e 76 61 6c 69 64 44 61 74 65 3e 70 68  ded.validDate>ph
245f0 6f 6e 65 62 6f 6f 6b 32 2e 76 61 6c 69 64 44 61  onebook2.validDa
24600 74 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  te;.</pre></bloc
24610 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e 20 74  kquote>..<p>In t
24620 68 69 73 20 6c 61 73 74 20 65 78 61 6d 70 6c 65  his last example
24630 2c 20 74 68 65 20 70 68 6f 6e 65 62 6f 6f 6b 32  , the phonebook2
24640 20 65 6e 74 72 79 20 69 73 20 6f 6e 6c 79 0a 75   entry is only.u
24650 70 64 61 74 65 64 20 69 66 20 74 68 65 20 76 61  pdated if the va
24660 6c 69 64 44 61 74 65 20 66 6f 72 20 74 68 65 20  lidDate for the 
24670 6e 65 77 6c 79 20 69 6e 73 65 72 74 65 64 20 76  newly inserted v
24680 61 6c 75 65 20 69 73 0a 6e 65 77 65 72 20 74 68  alue is.newer th
24690 61 6e 20 74 68 65 20 65 6e 74 72 79 20 61 6c 72  an the entry alr
246a0 65 61 64 79 20 69 6e 20 74 68 65 20 74 61 62 6c  eady in the tabl
246b0 65 2e 20 20 49 66 20 74 68 65 20 74 61 62 6c 65  e.  If the table
246c0 20 61 6c 72 65 61 64 79 0a 63 6f 6e 74 61 69 6e   already.contain
246d0 73 20 61 6e 20 65 6e 74 72 79 20 77 69 74 68 20  s an entry with 
246e0 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6e  the same name an
246f0 64 20 61 20 63 75 72 72 65 6e 74 20 76 61 6c 69  d a current vali
24700 64 44 61 74 65 2c 0a 74 68 65 6e 20 74 68 65 20  dDate,.then the 
24710 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 61 75  WHERE clause cau
24720 73 65 73 20 74 68 65 20 44 4f 20 55 50 44 41 54  ses the DO UPDAT
24730 45 20 74 6f 20 62 65 63 6f 6d 65 20 61 20 6e 6f  E to become a no
24740 2d 6f 70 2e 0a 0a 3c 68 33 3e 4c 69 6d 69 74 61  -op...<h3>Limita
24750 74 69 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 55  tions</h3>..<p>U
24760 50 53 45 52 54 20 64 6f 65 73 20 6e 6f 74 20 63  PSERT does not c
24770 75 72 72 65 6e 74 6c 79 20 77 6f 72 6b 20 66 6f  urrently work fo
24780 72 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65  r [virtual table
24790 73 5d 2e 0a 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23  s]....<tcl>.####
247a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
247b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
247c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
247d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
247e0 23 23 23 23 23 23 23 23 23 23 0a 53 65 63 74 69  ##########.Secti
247f0 6f 6e 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  on {ON CONFLICT 
24800 63 6c 61 75 73 65 7d 20 63 6f 6e 66 6c 69 63 74  clause} conflict
24810 20 7b 7b 63 6f 6e 66 6c 69 63 74 20 63 6c 61 75   {{conflict clau
24820 73 65 7d 20 7b 4f 4e 20 43 4f 4e 46 4c 49 43 54  se} {ON CONFLICT
24830 7d 7d 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  }}..RecursiveBub
24840 62 6c 65 44 69 61 67 72 61 6d 20 63 6f 6e 66 6c  bleDiagram confl
24850 69 63 74 2d 63 6c 61 75 73 65 0a 3c 2f 74 63 6c  ict-clause.</tcl
24860 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e  >..<p>The ON CON
24870 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 73 20  FLICT clause is 
24880 61 0a 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 65  a.non-standard e
24890 78 74 65 6e 73 69 6f 6e 20 73 70 65 63 69 66 69  xtension specifi
248a0 63 20 74 6f 20 53 51 4c 69 74 65 20 0a 74 68 61  c to SQLite .tha
248b0 74 20 63 61 6e 20 61 70 70 65 61 72 20 69 6e 20  t can appear in 
248c0 6d 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 63  many other SQL c
248d0 6f 6d 6d 61 6e 64 73 2e 0a 49 74 20 69 73 20 67  ommands..It is g
248e0 69 76 65 6e 20 69 74 73 20 6f 77 6e 20 73 65 63  iven its own sec
248f0 74 69 6f 6e 20 69 6e 20 74 68 69 73 20 64 6f 63  tion in this doc
24900 75 6d 65 6e 74 20 62 65 63 61 75 73 65 20 69 74  ument because it
24910 20 69 73 20 6e 6f 74 0a 70 61 72 74 20 6f 66 20   is not.part of 
24920 73 74 61 6e 64 61 72 64 20 53 51 4c 20 61 6e 64  standard SQL and
24930 20 74 68 65 72 65 66 6f 72 65 20 6d 69 67 68 74   therefore might
24940 20 6e 6f 74 20 62 65 20 66 61 6d 69 6c 69 61 72   not be familiar
24950 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 4f 4e  .</p>..<p>The ON
24960 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65   CONFLICT clause
24970 20 64 65 73 63 72 69 62 65 64 20 68 65 72 65 20   described here 
24980 68 61 73 20 62 65 65 6e 20 61 20 70 61 72 74 20  has been a part 
24990 6f 66 0a 53 51 4c 69 74 65 20 73 69 6e 63 65 20  of.SQLite since 
249a0 62 65 66 6f 72 65 20 76 65 72 73 69 6f 6e 20 33  before version 3
249b0 2e 30 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e  .0.0 ([dateof:3.
249c0 30 2e 30 5d 29 2e 20 20 54 68 65 20 70 68 72 61  0.0]).  The phra
249d0 73 65 0a 22 4f 4e 26 6e 62 73 70 3b 43 4f 4e 46  se."ON&nbsp;CONF
249e0 4c 49 43 54 22 20 69 73 20 61 6c 73 6f 20 70 61  LICT" is also pa
249f0 72 74 20 6f 66 20 5b 55 50 53 45 52 54 5d 2c 20  rt of [UPSERT], 
24a00 77 68 69 63 68 20 69 73 20 61 6e 20 65 78 74 65  which is an exte
24a10 6e 73 69 6f 6e 0a 74 6f 20 5b 49 4e 53 45 52 54  nsion.to [INSERT
24a20 5d 20 61 64 64 65 64 20 69 6e 20 76 65 72 73 69  ] added in versi
24a30 6f 6e 20 33 2e 32 34 2e 30 20 28 5b 64 61 74 65  on 3.24.0 ([date
24a40 6f 66 3a 33 2e 32 34 2e 30 5d 29 2e 20 20 44 6f  of:3.24.0]).  Do
24a50 20 6e 6f 74 0a 63 6f 6e 66 75 73 65 20 74 68 65   not.confuse the
24a60 73 65 20 74 77 6f 20 73 65 70 61 72 61 74 65 20  se two separate 
24a70 75 73 65 73 20 6f 66 20 74 68 65 20 22 4f 4e 26  uses of the "ON&
24a80 6e 62 73 70 3b 43 4f 4e 46 4c 49 43 54 22 20 70  nbsp;CONFLICT" p
24a90 68 72 61 73 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20  hrase...<p>^The 
24aa0 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 4f  syntax for the O
24ab0 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
24ac0 65 20 69 73 20 61 73 20 73 68 6f 77 6e 20 61 62  e is as shown ab
24ad0 6f 76 65 20 66 6f 72 0a 74 68 65 20 43 52 45 41  ove for.the CREA
24ae0 54 45 20 54 41 42 4c 45 20 63 6f 6d 6d 61 6e 64  TE TABLE command
24af0 2e 20 20 5e 46 6f 72 20 74 68 65 20 49 4e 53 45  .  ^For the INSE
24b00 52 54 20 61 6e 64 0a 55 50 44 41 54 45 20 63 6f  RT and.UPDATE co
24b10 6d 6d 61 6e 64 73 2c 20 74 68 65 20 6b 65 79 77  mmands, the keyw
24b20 6f 72 64 73 20 22 4f 4e 20 43 4f 4e 46 4c 49 43  ords "ON CONFLIC
24b30 54 22 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  T" are replaced 
24b40 62 79 20 22 4f 52 22 20 73 6f 20 74 68 61 74 0a  by "OR" so that.
24b50 74 68 65 20 73 79 6e 74 61 78 20 72 65 61 64 73  the syntax reads
24b60 20 6d 6f 72 65 20 6e 61 74 75 72 61 6c 6c 79 2e   more naturally.
24b70 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69    For example, i
24b80 6e 73 74 65 61 64 20 6f 66 0a 22 49 4e 53 45 52  nstead of."INSER
24b90 54 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47  T ON CONFLICT IG
24ba0 4e 4f 52 45 22 20 77 65 20 68 61 76 65 20 22 49  NORE" we have "I
24bb0 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 22  NSERT OR IGNORE"
24bc0 2e 0a 54 68 65 20 6b 65 79 77 6f 72 64 73 20 63  ..The keywords c
24bd0 68 61 6e 67 65 20 62 75 74 20 74 68 65 20 6d 65  hange but the me
24be0 61 6e 69 6e 67 20 6f 66 20 74 68 65 20 63 6c 61  aning of the cla
24bf0 75 73 65 20 69 73 20 74 68 65 20 73 61 6d 65 0a  use is the same.
24c00 65 69 74 68 65 72 20 77 61 79 2e 3c 2f 70 3e 0a  either way.</p>.
24c10 0a 3c 70 3e 54 68 65 20 4f 4e 20 43 4f 4e 46 4c  .<p>The ON CONFL
24c20 49 43 54 20 63 6c 61 75 73 65 20 61 70 70 6c 69  ICT clause appli
24c30 65 73 20 74 6f 20 5b 55 4e 49 51 55 45 5d 2c 20  es to [UNIQUE], 
24c40 5b 4e 4f 54 20 4e 55 4c 4c 5d 2c 0a 5b 43 48 45  [NOT NULL],.[CHE
24c50 43 4b 5d 2c 20 61 6e 64 20 5b 50 52 49 4d 41 52  CK], and [PRIMAR
24c60 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e  Y KEY] constrain
24c70 74 73 2e 0a 54 68 65 20 4f 4e 20 43 4f 4e 46 4c  ts..The ON CONFL
24c80 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 20 64 6f  ICT algorithm do
24c90 65 73 20 6e 6f 74 0a 61 70 70 6c 79 20 74 6f 20  es not.apply to 
24ca0 5b 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e  [FOREIGN KEY con
24cb0 73 74 72 61 69 6e 74 73 5d 2e 0a 54 68 65 72 65  straints]..There
24cc0 20 61 72 65 20 66 69 76 65 20 63 6f 6e 66 6c 69   are five confli
24cd0 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
24ce0 67 6f 72 69 74 68 6d 20 63 68 6f 69 63 65 73 3a  gorithm choices:
24cf0 0a 52 4f 4c 4c 42 41 43 4b 2c 20 41 42 4f 52 54  .ROLLBACK, ABORT
24d00 2c 20 46 41 49 4c 2c 20 49 47 4e 4f 52 45 2c 20  , FAIL, IGNORE, 
24d10 61 6e 64 20 52 45 50 4c 41 43 45 2e 0a 5e 54 68  and REPLACE..^Th
24d20 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 66 6c 69  e default confli
24d30 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c  ct resolution al
24d40 67 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54  gorithm is ABORT
24d50 2e 20 20 54 68 69 73 0a 69 73 20 77 68 61 74 20  .  This.is what 
24d60 74 68 65 79 20 6d 65 61 6e 3a 3c 2f 70 3e 0a 0a  they mean:</p>..
24d70 3c 64 6c 3e 0a 3c 64 74 3e 3c 62 3e 52 4f 4c 4c  <dl>.<dt><b>ROLL
24d80 42 41 43 4b 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  BACK</b></dt>.<d
24d90 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61  d><p> ^When an a
24da0 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72  pplicable constr
24db0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
24dc0 63 63 75 72 73 2c 20 74 68 65 20 52 4f 4c 4c 42  ccurs, the ROLLB
24dd0 41 43 4b 0a 72 65 73 6f 6c 75 74 69 6f 6e 20 61  ACK.resolution a
24de0 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74 73 20  lgorithm aborts 
24df0 74 68 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20  the current SQL 
24e00 73 74 61 74 65 6d 65 6e 74 20 77 69 74 68 0a 61  statement with.a
24e10 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  n SQLITE_CONSTRA
24e20 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20 72 6f  INT error and ro
24e30 6c 6c 73 20 62 61 63 6b 20 74 68 65 20 63 75 72  lls back the cur
24e40 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
24e50 2e 0a 5e 49 66 20 6e 6f 20 74 72 61 6e 73 61 63  ..^If no transac
24e60 74 69 6f 6e 20 69 73 0a 61 63 74 69 76 65 20 28  tion is.active (
24e70 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 69  other than the i
24e80 6d 70 6c 69 65 64 20 74 72 61 6e 73 61 63 74 69  mplied transacti
24e90 6f 6e 20 74 68 61 74 20 69 73 20 63 72 65 61 74  on that is creat
24ea0 65 64 20 6f 6e 20 65 76 65 72 79 0a 63 6f 6d 6d  ed on every.comm
24eb0 61 6e 64 29 20 74 68 65 6e 20 74 68 65 20 52 4f  and) then the RO
24ec0 4c 4c 42 41 43 4b 20 72 65 73 6f 6c 75 74 69 6f  LLBACK resolutio
24ed0 6e 20 61 6c 67 6f 72 69 74 68 6d 20 77 6f 72 6b  n algorithm work
24ee0 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
24ef0 65 0a 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68  e.ABORT algorith
24f00 6d 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  m.</p></dd>..<dt
24f10 3e 3c 62 3e 41 42 4f 52 54 3c 2f 62 3e 3c 2f 64  ><b>ABORT</b></d
24f20 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68 65 6e  t>.<dd><p> ^When
24f30 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65 20 63   an applicable c
24f40 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
24f50 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20  ion occurs, the 
24f60 41 42 4f 52 54 0a 72 65 73 6f 6c 75 74 69 6f 6e  ABORT.resolution
24f70 20 61 6c 67 6f 72 69 74 68 6d 20 61 62 6f 72 74   algorithm abort
24f80 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 53 51  s the current SQ
24f90 4c 20 73 74 61 74 65 6d 65 6e 74 0a 77 69 74 68  L statement.with
24fa0 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54   an SQLITE_CONST
24fb0 52 41 49 4e 54 20 65 72 72 6f 72 20 61 6e 64 20  RAINT error and 
24fc0 62 61 63 6b 73 20 6f 75 74 20 61 6e 79 20 63 68  backs out any ch
24fd0 61 6e 67 65 73 0a 6d 61 64 65 20 62 79 20 74 68  anges.made by th
24fe0 65 20 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74  e current SQL st
24ff0 61 74 65 6d 65 6e 74 3b 20 62 75 74 20 63 68 61  atement; but cha
25000 6e 67 65 73 20 63 61 75 73 65 64 0a 62 79 20 70  nges caused.by p
25010 72 69 6f 72 20 53 51 4c 20 73 74 61 74 65 6d 65  rior SQL stateme
25020 6e 74 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  nts within the s
25030 61 6d 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ame transaction 
25040 61 72 65 20 70 72 65 73 65 72 76 65 64 20 61 6e  are preserved an
25050 64 20 74 68 65 0a 74 72 61 6e 73 61 63 74 69 6f  d the.transactio
25060 6e 20 72 65 6d 61 69 6e 73 20 61 63 74 69 76 65  n remains active
25070 2e 0a 54 68 69 73 20 69 73 20 74 68 65 20 64 65  ..This is the de
25080 66 61 75 6c 74 20 62 65 68 61 76 69 6f 72 20 61  fault behavior a
25090 6e 64 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  nd the behavior 
250a0 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
250b0 20 53 51 4c 0a 73 74 61 6e 64 61 72 64 2e 3c 2f   SQL.standard.</
250c0 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e  p></dd>..<dt><b>
250d0 46 41 49 4c 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64  FAIL</b></dt>.<d
250e0 64 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 6e 20 61  d><p> ^When an a
250f0 70 70 6c 69 63 61 62 6c 65 20 63 6f 6e 73 74 72  pplicable constr
25100 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f  aint violation o
25110 63 63 75 72 73 2c 20 74 68 65 20 46 41 49 4c 0a  ccurs, the FAIL.
25120 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
25130 69 74 68 6d 20 61 62 6f 72 74 73 20 74 68 65 20  ithm aborts the 
25140 63 75 72 72 65 6e 74 20 53 51 4c 20 73 74 61 74  current SQL stat
25150 65 6d 65 6e 74 20 77 69 74 68 20 61 6e 0a 53 51  ement with an.SQ
25160 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
25170 65 72 72 6f 72 2e 20 20 5e 42 75 74 20 74 68 65  error.  ^But the
25180 20 46 41 49 4c 20 72 65 73 6f 6c 75 74 69 6f 6e   FAIL resolution
25190 20 64 6f 65 73 20 6e 6f 74 0a 62 61 63 6b 20 6f   does not.back o
251a0 75 74 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ut prior changes
251b0 20 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74   of the SQL stat
251c0 65 6d 65 6e 74 20 74 68 61 74 20 66 61 69 6c 65  ement that faile
251d0 64 20 6e 6f 72 20 64 6f 65 73 0a 69 74 20 65 6e  d nor does.it en
251e0 64 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  d the transactio
251f0 6e 2e 0a 5e 46 6f 72 20 65 78 61 6d 70 6c 65 2c  n..^For example,
25200 20 69 66 20 61 6e 20 55 50 44 41 54 45 0a 73 74   if an UPDATE.st
25210 61 74 65 6d 65 6e 74 20 65 6e 63 6f 75 6e 74 65  atement encounte
25220 72 65 64 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  red a constraint
25230 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 6e 20 74 68   violation on th
25240 65 20 31 30 30 74 68 20 72 6f 77 20 74 68 61 74  e 100th row that
25250 0a 69 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  .it attempts to 
25260 75 70 64 61 74 65 2c 20 74 68 65 6e 20 74 68 65  update, then the
25270 20 66 69 72 73 74 20 39 39 20 72 6f 77 20 63 68   first 99 row ch
25280 61 6e 67 65 73 20 61 72 65 20 70 72 65 73 65 72  anges are preser
25290 76 65 64 0a 62 75 74 20 63 68 61 6e 67 65 73 20  ved.but changes 
252a0 74 6f 20 72 6f 77 73 20 31 30 30 20 61 6e 64 20  to rows 100 and 
252b0 62 65 79 6f 6e 64 20 6e 65 76 65 72 20 6f 63 63  beyond never occ
252c0 75 72 2e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ur.</p></dd>..<d
252d0 74 3e 3c 62 3e 49 47 4e 4f 52 45 3c 2f 62 3e 3c  t><b>IGNORE</b><
252e0 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 20 5e 57 68  /dt>.<dd><p> ^Wh
252f0 65 6e 20 61 6e 20 61 70 70 6c 69 63 61 62 6c 65  en an applicable
25300 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
25310 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 0a 74  ation occurs, .t
25320 68 65 20 49 47 4e 4f 52 45 20 72 65 73 6f 6c 75  he IGNORE resolu
25330 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d 20 73  tion algorithm s
25340 6b 69 70 73 20 74 68 65 20 6f 6e 65 20 72 6f 77  kips the one row
25350 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 0a 74   that contains.t
25360 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  he constraint vi
25370 6f 6c 61 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74  olation and cont
25380 69 6e 75 65 73 20 70 72 6f 63 65 73 73 69 6e 67  inues processing
25390 20 73 75 62 73 65 71 75 65 6e 74 20 72 6f 77 73   subsequent rows
253a0 0a 6f 66 20 74 68 65 20 53 51 4c 20 73 74 61 74  .of the SQL stat
253b0 65 6d 65 6e 74 20 61 73 20 69 66 20 6e 6f 74 68  ement as if noth
253c0 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67 2e 0a  ing went wrong..
253d0 4f 74 68 65 72 20 72 6f 77 73 20 62 65 66 6f 72  Other rows befor
253e0 65 20 61 6e 64 20 61 66 74 65 72 20 74 68 65 20  e and after the 
253f0 72 6f 77 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e  row that.contain
25400 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
25410 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
25420 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64 61  inserted or upda
25430 74 65 64 0a 6e 6f 72 6d 61 6c 6c 79 2e 20 5e 4e  ted.normally. ^N
25440 6f 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  o error is retur
25450 6e 65 64 20 77 68 65 6e 20 74 68 65 20 49 47 4e  ned when the IGN
25460 4f 52 45 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ORE conflict res
25470 6f 6c 75 74 69 6f 6e 0a 61 6c 67 6f 72 69 74 68  olution.algorith
25480 6d 20 69 73 20 75 73 65 64 2e 3c 2f 70 3e 3c 2f  m is used.</p></
25490 64 64 3e 0a 0a 3c 64 74 3e 3c 62 3e 52 45 50 4c  dd>..<dt><b>REPL
254a0 41 43 45 3c 2f 62 3e 3c 2f 64 74 3e 0a 3c 64 64  ACE</b></dt>.<dd
254b0 3e 3c 70 3e 20 5e 57 68 65 6e 20 61 20 5b 55 4e  ><p> ^When a [UN
254c0 49 51 55 45 5d 20 6f 72 20 5b 50 52 49 4d 41 52  IQUE] or [PRIMAR
254d0 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e  Y KEY] constrain
254e0 74 20 76 69 6f 6c 61 74 69 6f 6e 20 6f 63 63 75  t violation occu
254f0 72 73 2c 20 0a 74 68 65 20 52 45 50 4c 41 43 45  rs, .the REPLACE
25500 20 61 6c 67 6f 72 69 74 68 6d 0a 64 65 6c 65 74   algorithm.delet
25510 65 73 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  es pre-existing 
25520 72 6f 77 73 20 74 68 61 74 20 61 72 65 20 63 61  rows that are ca
25530 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 73 74 72  using the constr
25540 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 70  aint violation.p
25550 72 69 6f 72 20 74 6f 20 69 6e 73 65 72 74 69 6e  rior to insertin
25560 67 20 6f 72 20 75 70 64 61 74 69 6e 67 20 74 68  g or updating th
25570 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 6e  e current row an
25580 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 63 6f  d the command co
25590 6e 74 69 6e 75 65 73 20 0a 65 78 65 63 75 74 69  ntinues .executi
255a0 6e 67 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 5e 49 66  ng normally..^If
255b0 20 61 20 5b 4e 4f 54 20 4e 55 4c 4c 5d 20 63 6f   a [NOT NULL] co
255c0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
255d0 6f 6e 20 6f 63 63 75 72 73 2c 20 74 68 65 20 52  on occurs, the R
255e0 45 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 0a  EPLACE conflict.
255f0 72 65 73 6f 6c 75 74 69 6f 6e 20 72 65 70 6c 61  resolution repla
25600 63 65 73 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c  ces the NULL val
25610 75 65 20 77 69 74 68 0a 74 68 65 20 64 65 66 61  ue with.the defa
25620 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ult value for th
25630 61 74 20 63 6f 6c 75 6d 6e 2c 20 6f 72 20 69 66  at column, or if
25640 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 61 73 20   the column has 
25650 6e 6f 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65  no default.value
25660 2c 20 74 68 65 6e 20 74 68 65 20 41 42 4f 52 54  , then the ABORT
25670 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 75 73   algorithm is us
25680 65 64 2e 0a 5e 49 66 20 61 20 5b 43 48 45 43 4b  ed..^If a [CHECK
25690 5d 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  ] constraint vio
256a0 6c 61 74 69 6f 6e 20 6f 63 63 75 72 73 2c 20 74  lation occurs, t
256b0 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66 6c  he REPLACE confl
256c0 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 61  ict resolution.a
256d0 6c 67 6f 72 69 74 68 6d 20 61 6c 77 61 79 73 20  lgorithm always 
256e0 77 6f 72 6b 73 20 6c 69 6b 65 20 41 42 4f 52 54  works like ABORT
256f0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20  .</p>..<p>^When 
25700 74 68 65 20 52 45 50 4c 41 43 45 20 63 6f 6e 66  the REPLACE conf
25710 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20  lict resolution 
25720 73 74 72 61 74 65 67 79 20 64 65 6c 65 74 65 73  strategy deletes
25730 20 72 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74   rows in order t
25740 6f 0a 73 61 74 69 73 66 79 20 61 20 63 6f 6e 73  o.satisfy a cons
25750 74 72 61 69 6e 74 2c 20 5b 43 52 45 41 54 45 20  traint, [CREATE 
25760 54 52 49 47 47 45 52 20 7c 20 64 65 6c 65 74 65  TRIGGER | delete
25770 20 74 72 69 67 67 65 72 73 5d 20 66 69 72 65 20   triggers] fire 
25780 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 5b  if and only if.[
25790 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65  recursive_trigge
257a0 72 73 20 70 72 61 67 6d 61 20 7c 20 72 65 63 75  rs pragma | recu
257b0 72 73 69 76 65 20 74 72 69 67 67 65 72 73 5d 20  rsive triggers] 
257c0 61 72 65 20 65 6e 61 62 6c 65 64 2e 3c 2f 70 3e  are enabled.</p>
257d0 0a 0a 3c 70 3e 5e 54 68 65 20 5b 73 71 6c 69 74  ..<p>^The [sqlit
257e0 65 33 5f 75 70 64 61 74 65 5f 68 6f 6f 6b 20 7c  e3_update_hook |
257f0 20 75 70 64 61 74 65 20 68 6f 6f 6b 5d 20 69 73   update hook] is
25800 20 6e 6f 74 20 69 6e 76 6f 6b 65 64 20 66 6f 72   not invoked for
25810 20 72 6f 77 73 20 74 68 61 74 0a 61 72 65 20 64   rows that.are d
25820 65 6c 65 74 65 64 20 62 79 20 74 68 65 20 52 45  eleted by the RE
25830 50 4c 41 43 45 20 63 6f 6e 66 6c 69 63 74 20 72  PLACE conflict r
25840 65 73 6f 6c 75 74 69 6f 6e 20 73 74 72 61 74 65  esolution strate
25850 67 79 2e 20 20 5e 4e 6f 72 20 64 6f 65 73 0a 52  gy.  ^Nor does.R
25860 45 50 4c 41 43 45 20 69 6e 63 72 65 6d 65 6e 74  EPLACE increment
25870 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 68   the [sqlite3_ch
25880 61 6e 67 65 73 20 7c 20 63 68 61 6e 67 65 20 63  anges | change c
25890 6f 75 6e 74 65 72 5d 2e 0a 54 68 65 20 65 78 63  ounter]..The exc
258a0 65 70 74 69 6f 6e 61 6c 20 62 65 68 61 76 69 6f  eptional behavio
258b0 72 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68  rs defined in th
258c0 69 73 20 70 61 72 61 67 72 61 70 68 20 6d 69 67  is paragraph mig
258d0 68 74 20 63 68 61 6e 67 65 20 0a 69 6e 20 61 20  ht change .in a 
258e0 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 2e 3c  future release.<
258f0 2f 70 3e 0a 3c 2f 64 6c 3e 0a 0a 3c 70 3e 5e 54  /p>.</dl>..<p>^T
25900 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 70 65  he algorithm spe
25910 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 4f 52  cified in the OR
25920 20 63 6c 61 75 73 65 20 6f 66 20 61 6e 20 49 4e   clause of an IN
25930 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 0a 6f  SERT or UPDATE.o
25940 76 65 72 72 69 64 65 73 20 61 6e 79 20 61 6c 67  verrides any alg
25950 6f 72 69 74 68 6d 20 73 70 65 63 69 66 69 65 64  orithm specified
25960 20 69 6e 20 61 20 43 52 45 41 54 45 20 54 41 42   in a CREATE TAB
25970 4c 45 2e 0a 5e 49 66 20 6e 6f 20 61 6c 67 6f 72  LE..^If no algor
25980 69 74 68 6d 20 69 73 20 73 70 65 63 69 66 69 65  ithm is specifie
25990 64 20 61 6e 79 77 68 65 72 65 2c 20 74 68 65 20  d anywhere, the 
259a0 41 42 4f 52 54 20 61 6c 67 6f 72 69 74 68 6d 20  ABORT algorithm 
259b0 69 73 20 75 73 65 64 2e 3c 2f 70 3e 0a 0a 3c 74  is used.</p>..<t
259c0 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23 23  cl>.############
259d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
259e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
259f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25a00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25a10 23 23 0a 53 65 63 74 69 6f 6e 20 52 45 49 4e 44  ##.Section REIND
25a20 45 58 20 72 65 69 6e 64 65 78 20 52 45 49 4e 44  EX reindex REIND
25a30 45 58 0a 0a 52 65 63 75 72 73 69 76 65 42 75 62  EX..RecursiveBub
25a40 62 6c 65 44 69 61 67 72 61 6d 20 72 65 69 6e 64  bleDiagram reind
25a50 65 78 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ex-stmt.</tcl>..
25a60 3c 70 3e 5e 54 68 65 20 52 45 49 4e 44 45 58 20  <p>^The REINDEX 
25a70 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20  command is used 
25a80 74 6f 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65  to delete and re
25a90 63 72 65 61 74 65 20 69 6e 64 69 63 65 73 20 66  create indices f
25aa0 72 6f 6d 20 73 63 72 61 74 63 68 2e 0a 54 68 69  rom scratch..Thi
25ab0 73 20 69 73 20 75 73 65 66 75 6c 20 77 68 65 6e  s is useful when
25ac0 20 74 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20   the definition 
25ad0 6f 66 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  of a collation s
25ae0 65 71 75 65 6e 63 65 20 68 61 73 20 63 68 61 6e  equence has chan
25af0 67 65 64 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ged..</p>..<p>^I
25b00 66 20 74 68 65 20 52 45 49 4e 44 45 58 20 6b 65  f the REINDEX ke
25b10 79 77 6f 72 64 20 69 73 20 6e 6f 74 20 66 6f 6c  yword is not fol
25b20 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6c 6c 61  lowed by a colla
25b30 74 69 6f 6e 2d 73 65 71 75 65 6e 63 65 20 6f 72  tion-sequence or
25b40 20 64 61 74 61 62 61 73 65 20 0a 6f 62 6a 65 63   database .objec
25b50 74 20 69 64 65 6e 74 69 66 69 65 72 2c 20 74 68  t identifier, th
25b60 65 6e 20 61 6c 6c 20 69 6e 64 69 63 65 73 20 69  en all indices i
25b70 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
25b80 61 74 61 62 61 73 65 73 20 61 72 65 20 72 65 62  atabases are reb
25b90 75 69 6c 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  uilt...<p>^If th
25ba0 65 20 52 45 49 4e 44 45 58 20 6b 65 79 77 6f 72  e REINDEX keywor
25bb0 64 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  d is followed by
25bc0 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 2d 73 65 71   a collation-seq
25bd0 75 65 6e 63 65 20 6e 61 6d 65 2c 20 74 68 65 6e  uence name, then
25be0 0a 61 6c 6c 20 69 6e 64 69 63 65 73 20 69 6e 20  .all indices in 
25bf0 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
25c00 61 62 61 73 65 73 20 74 68 61 74 20 75 73 65 20  abases that use 
25c10 74 68 65 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74  the named collat
25c20 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 0a 61 72  ion sequences.ar
25c30 65 20 72 65 63 72 65 61 74 65 64 2e 20 0a 0a 3c  e recreated. ..<
25c40 70 3e 5e 4f 72 2c 20 69 66 20 74 68 65 20 61 72  p>^Or, if the ar
25c50 67 75 6d 65 6e 74 20 61 74 74 61 63 68 65 64 20  gument attached 
25c60 74 6f 20 74 68 65 20 52 45 49 4e 44 45 58 20 69  to the REINDEX i
25c70 64 65 6e 74 69 66 69 65 73 20 61 20 73 70 65 63  dentifies a spec
25c80 69 66 69 63 20 0a 64 61 74 61 62 61 73 65 20 74  ific .database t
25c90 61 62 6c 65 2c 20 74 68 65 6e 20 61 6c 6c 20 69  able, then all i
25ca0 6e 64 69 63 65 73 20 61 74 74 61 63 68 65 64 20  ndices attached 
25cb0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
25cc0 74 61 62 6c 65 20 61 72 65 20 72 65 62 75 69 6c  table are rebuil
25cd0 74 2e 20 0a 5e 49 66 20 69 74 20 69 64 65 6e 74  t. .^If it ident
25ce0 69 66 69 65 73 20 61 20 73 70 65 63 69 66 69 63  ifies a specific
25cf0 20 64 61 74 61 62 61 73 65 20 69 6e 64 65 78 2c   database index,
25d00 20 74 68 65 6e 20 6a 75 73 74 20 74 68 61 74 20   then just that 
25d10 69 6e 64 65 78 20 69 73 20 72 65 63 72 65 61 74  index is recreat
25d20 65 64 2e 0a 0a 3c 70 3e 5e 46 6f 72 20 61 20 63  ed...<p>^For a c
25d30 6f 6d 6d 61 6e 64 20 6f 66 20 74 68 65 20 66 6f  ommand of the fo
25d40 72 6d 20 22 52 45 49 4e 44 45 58 20 3c 69 3e 6e  rm "REINDEX <i>n
25d50 61 6d 65 3c 2f 69 3e 22 2c 20 61 20 6d 61 74 63  ame</i>", a matc
25d60 68 0a 61 67 61 69 6e 73 74 20 3c 79 79 74 65 72  h.against <yyter
25d70 6d 3e 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65  m>collation-name
25d80 3c 2f 79 79 74 65 72 6d 3e 20 74 61 6b 65 73 20  </yyterm> takes 
25d90 70 72 65 63 65 64 65 6e 63 65 20 6f 76 65 72 20  precedence over 
25da0 61 20 6d 61 74 63 68 0a 61 67 61 69 6e 73 74 20  a match.against 
25db0 3c 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d 6e 61  <yyterm>index-na
25dc0 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 6f 72 20 3c  me</yyterm> or <
25dd0 79 79 74 65 72 6d 3e 74 61 62 6c 65 2d 6e 61 6d  yyterm>table-nam
25de0 65 3c 2f 79 79 74 65 72 6d 3e 2e 0a 54 68 69 73  e</yyterm>..This
25df0 20 61 6d 62 69 67 75 69 74 79 20 69 6e 20 74 68   ambiguity in th
25e00 65 20 73 79 6e 74 61 78 20 6d 61 79 20 62 65 20  e syntax may be 
25e10 61 76 6f 69 64 65 64 20 62 79 20 61 6c 77 61 79  avoided by alway
25e20 73 20 73 70 65 63 69 66 79 69 6e 67 20 61 0a 3c  s specifying a.<
25e30 79 79 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61  yyterm>schema-na
25e40 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 77 68 65 6e  me</yyterm> when
25e50 20 72 65 69 6e 64 65 78 69 6e 67 20 61 20 73 70   reindexing a sp
25e60 65 63 69 66 69 63 20 74 61 62 6c 65 20 6f 72 20  ecific table or 
25e70 69 6e 64 65 78 2e 0a 0a 3c 74 63 6c 3e 0a 23 23  index...<tcl>.##
25e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25e90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53 65  #############.Se
25ed0 63 74 69 6f 6e 20 52 45 50 4c 41 43 45 20 72 65  ction REPLACE re
25ee0 70 6c 61 63 65 20 52 45 50 4c 41 43 45 0a 0a 3c  place REPLACE..<
25ef0 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 54 68 65 20 52  /tcl>..<p>^The R
25f00 45 50 4c 41 43 45 20 63 6f 6d 6d 61 6e 64 20 69  EPLACE command i
25f10 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
25f20 68 65 20 22 5b 4f 4e 20 43 4f 4e 46 4c 49 43 54  he "[ON CONFLICT
25f30 20 7c 20 49 4e 53 45 52 54 20 4f 52 20 52 45 50   | INSERT OR REP
25f40 4c 41 43 45 5d 22 0a 76 61 72 69 61 6e 74 20 6f  LACE]".variant o
25f50 66 20 74 68 65 20 5b 49 4e 53 45 52 54 5d 20 63  f the [INSERT] c
25f60 6f 6d 6d 61 6e 64 2e 20 20 0a 54 68 69 73 20 61  ommand.  .This a
25f70 6c 69 61 73 20 69 73 20 70 72 6f 76 69 64 65 64  lias is provided
25f80 20 66 6f 72 20 63 6f 6d 70 61 74 69 62 69 6c 69   for compatibili
25f90 74 79 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  ty other SQL dat
25fa0 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 20 20  abase engines.  
25fb0 53 65 65 20 74 68 65 20 0a 5b 49 4e 53 45 52 54  See the .[INSERT
25fc0 5d 20 63 6f 6d 6d 61 6e 64 20 64 6f 63 75 6d 65  ] command docume
25fd0 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69  ntation for addi
25fe0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
25ff0 6f 6e 2e 3c 2f 70 3e 20 20 0a 0a 3c 74 63 6c 3e  on.</p>  ..<tcl>
26000 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
26010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26050 0a 53 65 63 74 69 6f 6e 20 7b 57 49 54 48 20 63  .Section {WITH c
26060 6c 61 75 73 65 7d 20 77 69 74 68 20 7b 7b 63 6f  lause} with {{co
26070 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
26080 73 73 69 6f 6e 73 7d 20 57 49 54 48 7d 0a 0a 52  ssions} WITH}..R
26090 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
260a0 61 67 72 61 6d 20 77 69 74 68 2d 63 6c 61 75 73  agram with-claus
260b0 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 6f 6d  e.</tcl>..<p>Com
260c0 6d 6f 6e 20 54 61 62 6c 65 20 45 78 70 72 65 73  mon Table Expres
260d0 73 69 6f 6e 73 20 6f 72 20 43 54 45 73 20 61 63  sions or CTEs ac
260e0 74 20 6c 69 6b 65 20 74 65 6d 70 6f 72 61 72 79  t like temporary
260f0 20 5b 76 69 65 77 73 5d 20 74 68 61 74 20 65 78   [views] that ex
26100 69 73 74 0a 6f 6e 6c 79 20 66 6f 72 20 74 68 65  ist.only for the
26110 20 64 75 72 61 74 69 6f 6e 20 6f 66 20 61 20 73   duration of a s
26120 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
26130 65 6e 74 2e 20 20 54 68 65 72 65 20 61 72 65 20  ent.  There are 
26140 74 77 6f 20 6b 69 6e 64 73 20 6f 66 0a 63 6f 6d  two kinds of.com
26150 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
26160 73 69 6f 6e 73 3a 20 22 6f 72 64 69 6e 61 72 79  sions: "ordinary
26170 22 20 61 6e 64 20 22 72 65 63 75 72 73 69 76 65  " and "recursive
26180 22 2e 20 4f 72 64 69 6e 61 72 79 20 0a 63 6f 6d  ". Ordinary .com
26190 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
261a0 73 69 6f 6e 73 20 61 72 65 20 68 65 6c 70 66 75  sions are helpfu
261b0 6c 20 66 6f 72 20 6d 61 6b 69 6e 67 0a 71 75 65  l for making.que
261c0 72 69 65 73 20 65 61 73 69 65 72 20 74 6f 20 75  ries easier to u
261d0 6e 64 65 72 73 74 61 6e 64 20 62 79 20 66 61 63  nderstand by fac
261e0 74 6f 72 69 6e 67 0a 73 75 62 71 75 65 72 69 65  toring.subquerie
261f0 73 20 6f 75 74 20 6f 66 20 74 68 65 20 6d 61 69  s out of the mai
26200 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  n SQL statement.
26210 0a 52 65 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f  .Recursive commo
26220 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
26230 6f 6e 73 0a 70 72 6f 76 69 64 65 20 74 68 65 20  ons.provide the 
26240 61 62 69 6c 69 74 79 20 74 6f 20 64 6f 20 68 69  ability to do hi
26250 65 72 61 72 63 68 69 63 61 6c 20 6f 72 0a 72 65  erarchical or.re
26260 63 75 72 73 69 76 65 20 71 75 65 72 69 65 73 20  cursive queries 
26270 6f 66 20 74 72 65 65 73 20 61 6e 64 20 67 72 61  of trees and gra
26280 70 68 73 2c 20 61 20 63 61 70 61 62 69 6c 69 74  phs, a capabilit
26290 79 0a 74 68 61 74 20 69 73 20 6e 6f 74 20 6f 74  y.that is not ot
262a0 68 65 72 77 69 73 65 20 61 76 61 69 6c 61 62 6c  herwise availabl
262b0 65 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e  e in the SQL lan
262c0 67 75 61 67 65 2e 0a 0a 3c 70 3e 41 6c 6c 20 63  guage...<p>All c
262d0 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
262e0 65 73 73 69 6f 6e 73 20 28 6f 72 64 69 6e 61 72  essions (ordinar
262f0 79 20 61 6e 64 20 72 65 63 75 72 73 69 76 65 29  y and recursive)
26300 20 61 72 65 20 0a 63 72 65 61 74 65 64 20 62 79   are .created by
26310 20 70 72 65 70 65 6e 64 69 6e 67 20 61 20 57 49   prepending a WI
26320 54 48 20 63 6c 61 75 73 65 20 69 6e 20 66 72 6f  TH clause in fro
26330 6e 74 20 6f 66 20 61 20 5b 53 45 4c 45 43 54 5d  nt of a [SELECT]
26340 2c 20 5b 49 4e 53 45 52 54 5d 2c 20 5b 44 45 4c  , [INSERT], [DEL
26350 45 54 45 5d 2c 0a 6f 72 20 5b 55 50 44 41 54 45  ETE],.or [UPDATE
26360 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 20  ] statement.  A 
26370 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75  single WITH clau
26380 73 65 20 63 61 6e 20 73 70 65 63 69 66 79 20 6f  se can specify o
26390 6e 65 20 6f 72 20 6d 6f 72 65 0a 63 6f 6d 6d 6f  ne or more.commo
263a0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
263b0 6f 6e 73 2c 20 73 6f 6d 65 20 6f 66 20 77 68 69  ons, some of whi
263c0 63 68 20 61 72 65 20 6f 72 64 69 6e 61 72 79 20  ch are ordinary 
263d0 61 6e 64 20 73 6f 6d 65 20 6f 66 20 77 68 69 63  and some of whic
263e0 68 0a 61 72 65 20 72 65 63 75 72 73 69 76 65 2e  h.are recursive.
263f0 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
26400 6e 74 20 6f 72 64 69 6e 61 72 79 63 74 65 20 7b  nt ordinarycte {
26410 6f 72 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20  ordinary common 
26420 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e  table expression
26430 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 4f 72 64  s}</tcl>.<h3>Ord
26440 69 6e 61 72 79 20 43 6f 6d 6d 6f 6e 20 54 61 62  inary Common Tab
26450 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73 3c 2f  le Expressions</
26460 68 33 3e 0a 0a 3c 70 3e 41 6e 20 6f 72 64 69 6e  h3>..<p>An ordin
26470 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ary common table
26480 20 65 78 70 72 65 73 73 69 6f 6e 20 77 6f 72 6b   expression work
26490 73 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20  s as if it were 
264a0 61 20 5b 76 69 65 77 5d 20 74 68 61 74 0a 65 78  a [view] that.ex
264b0 69 73 74 73 20 66 6f 72 20 74 68 65 20 64 75 72  ists for the dur
264c0 61 74 69 6f 6e 20 6f 66 20 61 20 73 69 6e 67 6c  ation of a singl
264d0 65 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 4f 72  e statement.  Or
264e0 64 69 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61  dinary common ta
264f0 62 6c 65 0a 65 78 70 72 65 73 73 69 6f 6e 73 20  ble.expressions 
26500 61 72 65 20 75 73 65 66 75 6c 20 66 6f 72 20 66  are useful for f
26510 61 63 74 6f 72 69 6e 67 20 6f 75 74 20 73 75 62  actoring out sub
26520 71 75 65 72 69 65 73 20 61 6e 64 20 6d 61 6b 69  queries and maki
26530 6e 67 20 74 68 65 20 6f 76 65 72 61 6c 6c 0a 53  ng the overall.S
26540 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 65 61 73  QL statement eas
26550 69 65 72 20 74 6f 20 72 65 61 64 20 61 6e 64 20  ier to read and 
26560 75 6e 64 65 72 73 74 61 6e 64 2e 0a 0a 3c 70 3e  understand...<p>
26570 41 20 57 49 54 48 20 63 6c 61 75 73 65 20 63 61  A WITH clause ca
26580 6e 20 63 6f 6e 74 61 69 6e 20 6f 72 64 69 6e 61  n contain ordina
26590 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ry common table 
265a0 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 65 6e  expressions even
265b0 20 69 66 0a 69 74 20 69 6e 63 6c 75 64 65 73 20   if.it includes 
265c0 74 68 65 20 52 45 43 55 52 53 49 56 45 20 6b 65  the RECURSIVE ke
265d0 79 77 6f 72 64 2e 20 20 54 68 65 20 75 73 65 20  yword.  The use 
265e0 6f 66 20 52 45 43 55 52 53 49 56 45 20 64 6f 65  of RECURSIVE doe
265f0 73 20 6e 6f 74 20 66 6f 72 63 65 0a 63 6f 6d 6d  s not force.comm
26600 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
26610 69 6f 6e 73 20 74 6f 20 62 65 20 72 65 63 75 72  ions to be recur
26620 73 69 76 65 2e 0a 0a 3c 74 63 6c 3e 0a 68 64 5f  sive...<tcl>.hd_
26630 66 72 61 67 6d 65 6e 74 20 72 65 63 75 72 73 69  fragment recursi
26640 76 65 63 74 65 20 7b 72 65 63 75 72 73 69 76 65  vecte {recursive
26650 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78   common table ex
26660 70 72 65 73 73 69 6f 6e 73 7d 20 5c 0a 7b 72 65  pressions} \.{re
26670 63 75 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74  cursive common t
26680 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 7d  able expression}
26690 20 7b 72 65 63 75 72 73 69 76 65 20 71 75 65 72   {recursive quer
266a0 79 7d 0a 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 52 65  y}.</tcl>.<h3>Re
266b0 63 75 72 73 69 76 65 20 43 6f 6d 6d 6f 6e 20 54  cursive Common T
266c0 61 62 6c 65 20 45 78 70 72 65 73 73 69 6f 6e 73  able Expressions
266d0 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 72 65 63 75  </h3>..<p>A recu
266e0 72 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62  rsive common tab
266f0 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61  le expression ca
26700 6e 20 62 65 20 75 73 65 64 20 74 6f 20 77 72 69  n be used to wri
26710 74 65 20 61 20 71 75 65 72 79 20 74 68 61 74 0a  te a query that.
26720 77 61 6c 6b 73 20 61 20 74 72 65 65 20 6f 72 20  walks a tree or 
26730 67 72 61 70 68 2e 20 20 41 20 72 65 63 75 72 73  graph.  A recurs
26740 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65  ive common table
26750 20 65 78 70 72 65 73 73 69 6f 6e 20 68 61 73 20   expression has 
26760 74 68 65 20 73 61 6d 65 0a 62 61 73 69 63 20 73  the same.basic s
26770 79 6e 74 61 78 20 61 73 20 61 6e 20 6f 72 64 69  yntax as an ordi
26780 6e 61 72 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  nary common tabl
26790 65 20 65 78 70 72 65 73 73 69 6f 6e 2c 20 62 75  e expression, bu
267a0 74 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f  t with the follo
267b0 77 69 6e 67 0a 61 64 64 69 74 69 6f 6e 61 6c 20  wing.additional 
267c0 66 65 61 74 75 72 65 73 3a 0a 0a 3c 6f 6c 3e 0a  features:..<ol>.
267d0 3c 6c 69 3e 20 54 68 65 20 22 5b 73 65 6c 65 63  <li> The "[selec
267e0 74 2d 73 74 6d 74 5d 22 0a 20 20 20 20 20 6d 75  t-stmt]".     mu
267f0 73 74 20 62 65 20 61 20 5b 63 6f 6d 70 6f 75 6e  st be a [compoun
26800 64 20 73 65 6c 65 63 74 5d 20 77 68 65 72 65 20  d select] where 
26810 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 5b  the right-most [
26820 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f  compound-operato
26830 72 5d 20 69 73 0a 20 20 20 20 20 65 69 74 68 65  r] is.     eithe
26840 72 20 55 4e 49 4f 4e 20 6f 72 20 55 4e 49 4f 4e  r UNION or UNION
26850 20 41 4c 4c 2e 0a 3c 6c 69 3e 20 54 68 65 20 74   ALL..<li> The t
26860 61 62 6c 65 20 6e 61 6d 65 64 20 6f 6e 20 74 68  able named on th
26870 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65  e left-hand side
26880 20 6f 66 20 74 68 65 20 41 53 20 6b 65 79 77 6f   of the AS keywo
26890 72 64 20 6d 75 73 74 20 61 70 70 65 61 72 0a 20  rd must appear. 
268a0 20 20 20 20 65 78 61 63 74 6c 79 20 6f 6e 63 65      exactly once
268b0 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
268c0 75 73 65 20 6f 66 20 74 68 65 20 72 69 67 68 74  use of the right
268d0 2d 6d 6f 73 74 20 53 45 4c 45 43 54 20 73 74 61  -most SELECT sta
268e0 74 65 6d 65 6e 74 0a 20 20 20 20 20 6f 66 20 74  tement.     of t
268f0 68 65 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65  he compound sele
26900 63 74 2c 20 61 6e 64 20 6e 6f 77 68 65 72 65 20  ct, and nowhere 
26910 65 6c 73 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  else..</ol>..<p>
26920 54 6f 20 70 75 74 20 69 74 20 61 6e 6f 74 68 65  To put it anothe
26930 72 20 77 61 79 2c 20 61 20 72 65 63 75 72 73 69  r way, a recursi
26940 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  ve common table 
26950 65 78 70 72 65 73 73 69 6f 6e 20 6d 75 73 74 0a  expression must.
26960 6c 6f 6f 6b 20 6c 69 6b 65 20 74 68 65 20 66 6f  look like the fo
26970 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 74 63 6c 3e 52  llowing:..<tcl>R
26980 65 63 75 72 73 69 76 65 42 75 62 62 6c 65 44 69  ecursiveBubbleDi
26990 61 67 72 61 6d 20 72 65 63 75 72 73 69 76 65 2d  agram recursive-
269a0 63 74 65 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 43 61  cte</tcl>..<p>Ca
269b0 6c 6c 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ll the table nam
269c0 65 64 20 62 79 20 74 68 65 20 5b 63 74 65 2d 74  ed by the [cte-t
269d0 61 62 6c 65 2d 6e 61 6d 65 5d 20 69 6e 20 61 20  able-name] in a 
269e0 72 65 63 75 72 73 69 76 65 0a 63 6f 6d 6d 6f 6e  recursive.common
269f0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
26a00 6e 20 74 68 65 20 22 72 65 63 75 72 73 69 76 65  n the "recursive
26a10 20 74 61 62 6c 65 22 2e 0a 49 6e 20 74 68 65 20   table"..In the 
26a20 5b 72 65 63 75 72 73 69 76 65 2d 63 74 65 5d 20  [recursive-cte] 
26a30 62 75 62 62 6c 65 20 64 69 61 67 72 61 6d 20 61  bubble diagram a
26a40 62 6f 76 65 2c 20 74 68 65 20 72 65 63 75 72 73  bove, the recurs
26a50 69 76 65 0a 74 61 62 6c 65 20 6d 75 73 74 20 61  ive.table must a
26a60 70 70 65 61 72 20 65 78 61 63 74 6c 79 20 6f 6e  ppear exactly on
26a70 63 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ce in the FROM c
26a80 6c 61 75 73 65 20 6f 66 20 74 68 65 20 0a 3c 79  lause of the .<y
26a90 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d  yterm>recursive-
26aa0 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 0a  select</yyterm>.
26ab0 61 6e 64 20 6d 75 73 74 20 6e 6f 74 20 61 70 70  and must not app
26ac0 65 61 72 20 61 6e 79 77 68 65 72 65 20 65 6c 73  ear anywhere els
26ad0 65 20 69 6e 20 65 69 74 68 65 72 20 74 68 65 0a  e in either the.
26ae0 3c 79 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d  <yyterm>initial-
26af0 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20  select</yyterm> 
26b00 6f 72 20 74 68 65 0a 3c 79 79 74 65 72 6d 3e 72  or the.<yyterm>r
26b10 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 3c  ecursive-select<
26b20 2f 79 79 74 65 72 6d 3e 2c 20 69 6e 63 6c 75 64  /yyterm>, includ
26b30 69 6e 67 20 73 75 62 71 75 65 72 69 65 73 2e 0a  ing subqueries..
26b40 54 68 65 20 3c 79 79 74 65 72 6d 3e 69 6e 69 74  The <yyterm>init
26b50 69 61 6c 2d 73 65 6c 65 63 74 3c 2f 79 79 74 65  ial-select</yyte
26b60 72 6d 3e 20 6d 61 79 20 62 65 0a 61 20 5b 63 6f  rm> may be.a [co
26b70 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2c 20  mpound select], 
26b80 62 75 74 20 69 74 20 6d 61 79 20 6e 6f 74 20 69  but it may not i
26b90 6e 63 6c 75 64 65 20 61 6e 20 4f 52 44 45 52 20  nclude an ORDER 
26ba0 42 59 2c 20 4c 49 4d 49 54 2c 20 6f 72 20 4f 46  BY, LIMIT, or OF
26bb0 46 53 45 54 2e 0a 54 68 65 20 72 65 63 75 72 73  FSET..The recurs
26bc0 69 76 65 2d 73 65 6c 65 63 74 20 6d 75 73 74 20  ive-select must 
26bd0 62 65 20 61 20 73 69 6d 70 6c 65 20 73 65 6c 65  be a simple sele
26be0 63 74 2c 20 6e 6f 74 20 61 20 63 6f 6d 70 6f 75  ct, not a compou
26bf0 6e 64 2e 20 20 54 68 65 0a 72 65 63 75 72 73 69  nd.  The.recursi
26c00 76 65 2d 73 65 6c 65 63 74 20 69 73 20 61 6c 6c  ve-select is all
26c10 6f 77 65 64 20 74 6f 20 69 6e 63 6c 75 64 65 20  owed to include 
26c20 61 6e 20 4f 52 44 45 52 20 42 59 2c 20 4c 49 4d  an ORDER BY, LIM
26c30 49 54 2c 20 61 6e 64 2f 6f 72 20 4f 46 46 53 45  IT, and/or OFFSE
26c40 54 2e 0a 0a 3c 70 3e 54 68 65 20 62 61 73 69 63  T...<p>The basic
26c50 20 61 6c 67 6f 72 69 74 68 6d 20 66 6f 72 20 63   algorithm for c
26c60 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 63 6f 6e  omputing the con
26c70 74 65 6e 74 20 6f 66 20 74 68 65 20 72 65 63 75  tent of the recu
26c80 72 73 69 76 65 20 74 61 62 6c 65 0a 69 73 20 61  rsive table.is a
26c90 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e  s follows:..<ol>
26ca0 0a 3c 6c 69 3e 20 52 75 6e 20 74 68 65 20 3c 79  .<li> Run the <y
26cb0 79 74 65 72 6d 3e 69 6e 69 74 69 61 6c 2d 73 65  yterm>initial-se
26cc0 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20 61 6e  lect</yyterm> an
26cd0 64 20 61 64 64 20 74 68 65 20 72 65 73 75 6c 74  d add the result
26ce0 73 20 74 6f 20 61 20 71 75 65 75 65 2e 0a 3c 6c  s to a queue..<l
26cf0 69 3e 20 57 68 69 6c 65 20 74 68 65 20 71 75 65  i> While the que
26d00 75 65 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 3a  ue is not empty:
26d10 0a 3c 6f 6c 20 74 79 70 65 3d 22 61 22 3e 0a 3c  .<ol type="a">.<
26d20 6c 69 3e 20 45 78 74 72 61 63 74 20 61 20 73 69  li> Extract a si
26d30 6e 67 6c 65 20 72 6f 77 20 66 72 6f 6d 20 74 68  ngle row from th
26d40 65 20 71 75 65 75 65 2e 0a 3c 6c 69 3e 20 49 6e  e queue..<li> In
26d50 73 65 72 74 20 74 68 61 74 20 73 69 6e 67 6c 65  sert that single
26d60 20 72 6f 77 20 69 6e 74 6f 20 74 68 65 20 72 65   row into the re
26d70 63 75 72 73 69 76 65 20 74 61 62 6c 65 0a 3c 6c  cursive table.<l
26d80 69 3e 20 50 72 65 74 65 6e 64 20 74 68 61 74 20  i> Pretend that 
26d90 74 68 65 20 73 69 6e 67 6c 65 20 72 6f 77 20 6a  the single row j
26da0 75 73 74 20 65 78 74 72 61 63 74 65 64 20 69 73  ust extracted is
26db0 20 74 68 65 20 6f 6e 6c 79 0a 20 20 20 20 20 72   the only.     r
26dc0 6f 77 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ow in the recurs
26dd0 69 76 65 20 74 61 62 6c 65 20 61 6e 64 20 72 75  ive table and ru
26de0 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  n the recursive-
26df0 73 65 6c 65 63 74 2c 0a 20 20 20 20 20 61 64 64  select,.     add
26e00 69 6e 67 20 61 6c 6c 20 72 65 73 75 6c 74 73 20  ing all results 
26e10 74 6f 20 74 68 65 20 71 75 65 75 65 2e 0a 3c 2f  to the queue..</
26e20 6f 6c 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68  ol>.</ol>..<p>Th
26e30 65 20 62 61 73 69 63 20 70 72 6f 63 65 64 75 72  e basic procedur
26e40 65 20 61 62 6f 76 65 20 6d 61 79 20 6d 6f 64 69  e above may modi
26e50 66 69 65 64 20 62 79 20 74 68 65 20 66 6f 6c 6c  fied by the foll
26e60 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61 6c  owing additional
26e70 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c   rules:..<ul>.<l
26e80 69 3e 3c 70 3e 0a 20 20 49 66 20 61 20 55 4e 49  i><p>.  If a UNI
26e90 4f 4e 20 6f 70 65 72 61 74 6f 72 20 63 6f 6e 6e  ON operator conn
26ea0 65 63 74 73 20 74 68 65 20 3c 79 79 74 65 72 6d  ects the <yyterm
26eb0 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74 3c  >initial-select<
26ec0 2f 79 79 74 65 72 6d 3e 20 77 69 74 68 20 74 68  /yyterm> with th
26ed0 65 0a 20 20 3c 79 79 74 65 72 6d 3e 72 65 63 75  e.  <yyterm>recu
26ee0 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79  rsive-select</yy
26ef0 74 65 72 6d 3e 2c 20 74 68 65 6e 20 6f 6e 6c 79  term>, then only
26f00 20 61 64 64 20 72 6f 77 73 20 74 6f 20 74 68 65   add rows to the
26f10 20 71 75 65 75 65 20 69 66 20 0a 20 20 6e 6f 20   queue if .  no 
26f20 69 64 65 6e 74 69 63 61 6c 20 72 6f 77 20 68 61  identical row ha
26f30 73 0a 20 20 62 65 65 6e 20 70 72 65 76 69 6f 75  s.  been previou
26f40 73 6c 79 20 61 64 64 65 64 20 74 6f 20 74 68 65  sly added to the
26f50 20 71 75 65 75 65 2e 20 20 52 65 70 65 61 74 65   queue.  Repeate
26f60 64 20 72 6f 77 73 20 61 72 65 20 64 69 73 63 61  d rows are disca
26f70 72 64 65 64 20 62 65 66 6f 72 65 20 62 65 69 6e  rded before bein
26f80 67 0a 20 20 61 64 64 65 64 20 74 6f 20 74 68 65  g.  added to the
26f90 20 71 75 65 75 65 20 65 76 65 6e 20 69 66 20 74   queue even if t
26fa0 68 65 20 72 65 70 65 61 74 65 64 20 72 6f 77 73  he repeated rows
26fb0 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 62 65   have already be
26fc0 65 6e 20 65 78 74 72 61 63 74 65 64 0a 20 20 66  en extracted.  f
26fd0 72 6f 6d 20 74 68 65 20 71 75 65 75 65 20 62 79  rom the queue by
26fe0 20 74 68 65 20 72 65 63 75 72 73 69 6f 6e 20 73   the recursion s
26ff0 74 65 70 2e 20 20 49 66 20 74 68 65 20 6f 70 65  tep.  If the ope
27000 72 61 74 6f 72 20 69 73 20 55 4e 49 4f 4e 20 41  rator is UNION A
27010 4c 4c 2c 0a 20 20 74 68 65 6e 20 61 6c 6c 20 72  LL,.  then all r
27020 6f 77 73 20 67 65 6e 65 72 61 74 65 64 20 62 79  ows generated by
27030 20 62 6f 74 68 20 74 68 65 20 3c 79 79 74 65 72   both the <yyter
27040 6d 3e 69 6e 69 74 69 61 6c 2d 73 65 6c 65 63 74  m>initial-select
27050 3c 2f 79 79 74 65 72 6d 3e 20 61 6e 64 20 74 68  </yyterm> and th
27060 65 0a 20 20 3c 79 79 74 65 72 6d 3e 72 65 63 75  e.  <yyterm>recu
27070 72 73 69 76 65 2d 73 65 6c 65 63 74 3c 2f 79 79  rsive-select</yy
27080 74 65 72 6d 3e 20 61 72 65 20 61 6c 77 61 79 73  term> are always
27090 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 71 75   added to the qu
270a0 65 75 65 20 65 76 65 6e 20 69 66 0a 20 20 74 68  eue even if.  th
270b0 65 79 20 61 72 65 20 72 65 70 65 61 74 73 2e 0a  ey are repeats..
270c0 20 20 57 68 65 6e 20 64 65 74 65 72 6d 69 6e 69    When determini
270d0 6e 67 20 69 66 20 61 20 72 6f 77 20 69 73 20 72  ng if a row is r
270e0 65 70 65 61 74 65 64 2c 20 4e 55 4c 4c 20 76 61  epeated, NULL va
270f0 6c 75 65 73 20 63 6f 6d 70 61 72 65 0a 20 20 65  lues compare.  e
27100 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74  qual to one anot
27110 68 65 72 20 61 6e 64 20 6e 6f 74 20 65 71 75 61  her and not equa
27120 6c 20 74 6f 20 61 6e 79 20 6f 74 68 65 72 20 76  l to any other v
27130 61 6c 75 65 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20 20  alue..<li><p>.  
27140 54 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  The LIMIT clause
27150 2c 20 69 66 20 70 72 65 73 65 6e 74 2c 20 64 65  , if present, de
27160 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6d 61 78  termines the max
27170 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72  imum number of r
27180 6f 77 73 20 74 68 61 74 0a 20 20 77 69 6c 6c 20  ows that.  will 
27190 65 76 65 72 20 62 65 20 61 64 64 65 64 20 74 6f  ever be added to
271a0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 74   the recursive t
271b0 61 62 6c 65 20 69 6e 20 73 74 65 70 20 32 62 2e  able in step 2b.
271c0 0a 20 20 4f 6e 63 65 20 74 68 65 20 6c 69 6d 69  .  Once the limi
271d0 74 20 69 73 20 72 65 61 63 68 65 64 2c 20 74 68  t is reached, th
271e0 65 20 72 65 63 75 72 73 69 6f 6e 20 73 74 6f 70  e recursion stop
271f0 73 2e 0a 20 20 41 20 6c 69 6d 69 74 20 6f 66 20  s..  A limit of 
27200 7a 65 72 6f 20 6d 65 61 6e 73 20 74 68 61 74 20  zero means that 
27210 6e 6f 20 72 6f 77 73 20 61 72 65 20 65 76 65 72  no rows are ever
27220 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a 20 20   added to the.  
27230 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 2c  recursive table,
27240 20 61 6e 64 20 61 20 6e 65 67 61 74 69 76 65 20   and a negative 
27250 6c 69 6d 69 74 20 6d 65 61 6e 73 20 61 6e 20 75  limit means an u
27260 6e 6c 69 6d 69 74 65 64 20 6e 75 6d 62 65 72 20  nlimited number 
27270 6f 66 20 72 6f 77 73 0a 20 20 6d 61 79 20 62 65  of rows.  may be
27280 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65   added to the re
27290 63 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 3c  cursive table..<
272a0 6c 69 3e 3c 70 3e 0a 20 20 54 68 65 20 4f 46 46  li><p>.  The OFF
272b0 53 45 54 20 63 6c 61 75 73 65 2c 20 69 66 20 69  SET clause, if i
272c0 74 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64  t is present and
272d0 20 68 61 73 20 61 20 70 6f 73 69 74 69 76 65 20   has a positive 
272e0 76 61 6c 75 65 20 4e 2c 20 70 72 65 76 65 6e 74  value N, prevent
272f0 73 20 74 68 65 0a 20 20 66 69 72 73 74 20 4e 20  s the.  first N 
27300 72 6f 77 73 20 66 72 6f 6d 20 62 65 69 6e 67 20  rows from being 
27310 61 64 64 65 64 20 74 6f 20 74 68 65 20 72 65 63  added to the rec
27320 75 72 73 69 76 65 20 74 61 62 6c 65 2e 0a 20 20  ursive table..  
27330 54 68 65 20 66 69 72 73 74 20 4e 20 72 6f 77 73  The first N rows
27340 20 61 72 65 20 73 74 69 6c 6c 20 70 72 6f 63 65   are still proce
27350 73 73 65 64 0a 20 20 62 79 20 74 68 65 20 3c 79  ssed.  by the <y
27360 79 74 65 72 6d 3e 72 65 63 75 72 73 69 76 65 2d  yterm>recursive-
27370 73 65 6c 65 63 74 3c 2f 79 79 74 65 72 6d 3e 20  select</yyterm> 
27380 26 6d 64 61 73 68 3b 20 74 68 65 79 0a 20 20 6a  &mdash; they.  j
27390 75 73 74 20 61 72 65 20 6e 6f 74 20 61 64 64 65  ust are not adde
273a0 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
273b0 76 65 20 74 61 62 6c 65 2e 20 20 52 6f 77 73 20  ve table.  Rows 
273c0 61 72 65 20 6e 6f 74 20 63 6f 75 6e 74 65 64 20  are not counted 
273d0 74 6f 77 61 72 64 0a 20 20 66 75 6c 66 69 6c 6c  toward.  fulfill
273e0 69 6e 67 20 74 68 65 20 4c 49 4d 49 54 20 75 6e  ing the LIMIT un
273f0 74 69 6c 20 61 6c 6c 20 4f 46 46 53 45 54 20 72  til all OFFSET r
27400 6f 77 73 20 68 61 76 65 20 62 65 65 6e 20 73 6b  ows have been sk
27410 69 70 70 65 64 2e 0a 3c 6c 69 3e 3c 70 3e 0a 20  ipped..<li><p>. 
27420 20 49 66 20 61 6e 20 4f 52 44 45 52 20 42 59 20   If an ORDER BY 
27430 63 6c 61 75 73 65 20 69 73 20 70 72 65 73 65 6e  clause is presen
27440 74 2c 20 69 74 20 64 65 74 65 72 6d 69 6e 65 73  t, it determines
27450 20 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68   the order in wh
27460 69 63 68 20 72 6f 77 73 0a 20 20 61 72 65 20 65  ich rows.  are e
27470 78 74 72 61 63 74 65 64 20 66 72 6f 6d 20 74 68  xtracted from th
27480 65 20 71 75 65 75 65 20 69 6e 20 73 74 65 70 20  e queue in step 
27490 32 61 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  2a.  If there is
274a0 20 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61   no ORDER BY cla
274b0 75 73 65 2c 0a 20 20 74 68 65 6e 20 74 68 65 20  use,.  then the 
274c0 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 72  order in which r
274d0 6f 77 73 20 61 72 65 20 65 78 74 72 61 63 74 65  ows are extracte
274e0 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  d is undefined. 
274f0 20 28 49 6e 20 74 68 65 20 63 75 72 72 65 6e 74   (In the current
27500 0a 20 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  .  implementatio
27510 6e 2c 20 74 68 65 20 71 75 65 75 65 20 62 65 63  n, the queue bec
27520 6f 6d 65 73 20 61 20 46 49 46 4f 20 69 66 20 74  omes a FIFO if t
27530 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
27540 73 65 20 69 73 20 6f 6d 69 74 74 65 64 2c 0a 20  se is omitted,. 
27550 20 62 75 74 20 61 70 70 6c 69 63 61 74 69 6f 6e   but application
27560 73 20 73 68 6f 75 6c 64 20 6e 6f 74 20 64 65 70  s should not dep
27570 65 6e 64 20 6f 6e 20 74 68 61 74 20 66 61 63 74  end on that fact
27580 20 73 69 6e 63 65 20 69 74 20 6d 69 67 68 74 20   since it might 
27590 63 68 61 6e 67 65 2e 29 0a 3c 2f 75 6c 3e 0a 0a  change.).</ul>..
275a0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
275b0 20 72 63 65 78 31 3c 2f 74 63 6c 3e 0a 3c 68 34   rcex1</tcl>.<h4
275c0 3e 52 65 63 75 72 73 69 76 65 20 51 75 65 72 79  >Recursive Query
275d0 20 45 78 61 6d 70 6c 65 73 3c 2f 68 34 3e 0a 0a   Examples</h4>..
275e0 3c 70 3e 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  <p>The following
275f0 20 71 75 65 72 79 20 72 65 74 75 72 6e 73 20 61   query returns a
27600 6c 6c 20 69 6e 74 65 67 65 72 73 20 62 65 74 77  ll integers betw
27610 65 65 6e 20 31 20 61 6e 64 20 31 30 30 30 30 30  een 1 and 100000
27620 30 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  0:..<blockquote>
27630 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52  <pre>.WITH RECUR
27640 53 49 56 45 0a 20 20 63 6e 74 28 78 29 20 41 53  SIVE.  cnt(x) AS
27650 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e 49 4f   (VALUES(1) UNIO
27660 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 78 2b 31  N ALL SELECT x+1
27670 20 46 52 4f 4d 20 63 6e 74 20 57 48 45 52 45 20   FROM cnt WHERE 
27680 78 3c 31 30 30 30 30 30 30 29 0a 53 45 4c 45 43  x<1000000).SELEC
27690 54 20 78 20 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f  T x FROM cnt;.</
276a0 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
276b0 3e 0a 0a 3c 70 3e 43 6f 6e 73 69 64 65 72 20 68  >..<p>Consider h
276c0 6f 77 20 74 68 69 73 20 71 75 65 72 79 20 77 6f  ow this query wo
276d0 72 6b 73 2e 20 20 54 68 65 20 69 6e 69 74 69 61  rks.  The initia
276e0 6c 2d 73 65 6c 65 63 74 0a 72 75 6e 73 20 66 69  l-select.runs fi
276f0 72 73 74 20 61 6e 64 20 72 65 74 75 72 6e 73 20  rst and returns 
27700 61 20 73 69 6e 67 6c 65 20 72 6f 77 0a 77 69 74  a single row.wit
27710 68 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  h a single colum
27720 6e 20 22 31 22 2e 20 20 54 68 69 73 20 6f 6e 65  n "1".  This one
27730 20 72 6f 77 20 69 73 20 61 64 64 65 64 20 74 6f   row is added to
27740 20 74 68 65 20 71 75 65 75 65 2e 20 20 49 6e 0a   the queue.  In.
27750 73 74 65 70 20 32 61 2c 20 74 68 61 74 20 6f 6e  step 2a, that on
27760 65 20 72 6f 77 20 69 73 20 65 78 74 72 61 63 74  e row is extract
27770 65 64 20 66 72 6f 6d 20 74 68 65 20 71 75 65 75  ed from the queu
27780 65 20 61 6e 64 20 61 64 64 65 64 20 74 6f 20 22  e and added to "
27790 63 6e 74 22 2e 0a 54 68 65 6e 20 74 68 65 20 72  cnt"..Then the r
277a0 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
277b0 69 73 20 72 75 6e 20 69 6e 20 61 63 63 6f 72 64  is run in accord
277c0 61 6e 63 65 20 77 69 74 68 20 73 74 65 70 20 32  ance with step 2
277d0 63 20 67 65 6e 65 72 61 74 69 6e 67 0a 61 20 73  c generating.a s
277e0 69 6e 67 6c 65 20 6e 65 77 20 72 6f 77 20 77 69  ingle new row wi
277f0 74 68 20 76 61 6c 75 65 20 22 32 22 20 74 6f 20  th value "2" to 
27800 61 64 64 20 74 6f 20 74 68 65 20 71 75 65 75 65  add to the queue
27810 2e 20 20 54 68 65 20 71 75 65 75 65 20 73 74 69  .  The queue sti
27820 6c 6c 0a 68 61 73 20 6f 6e 65 20 72 6f 77 2c 20  ll.has one row, 
27830 73 6f 20 73 74 65 70 20 32 20 72 65 70 65 61 74  so step 2 repeat
27840 73 2e 20 20 54 68 65 20 22 32 22 20 72 6f 77 20  s.  The "2" row 
27850 69 73 20 65 78 74 72 61 63 74 65 64 20 61 6e 64  is extracted and
27860 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a 72 65   added to the.re
27870 63 75 72 73 69 76 65 20 74 61 62 6c 65 20 62 79  cursive table by
27880 20 73 74 65 70 73 20 32 61 20 61 6e 64 20 32 62   steps 2a and 2b
27890 2e 20 20 54 68 65 6e 20 74 68 65 20 72 6f 77 20  .  Then the row 
278a0 63 6f 6e 74 61 69 6e 69 6e 67 20 32 20 69 73 20  containing 2 is 
278b0 75 73 65 64 20 0a 61 73 20 69 66 20 69 74 20 77  used .as if it w
278c0 65 72 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65  ere the complete
278d0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
278e0 72 65 63 75 72 73 69 76 65 20 74 61 62 6c 65 20  recursive table 
278f0 61 6e 64 20 74 68 65 20 0a 72 65 63 75 72 73 69  and the .recursi
27900 76 65 2d 73 65 6c 65 63 74 20 69 73 20 72 75 6e  ve-select is run
27910 20 61 67 61 69 6e 2c 20 72 65 73 75 6c 74 69 6e   again, resultin
27920 67 20 69 6e 20 61 20 72 6f 77 20 77 69 74 68 20  g in a row with 
27930 76 61 6c 75 65 20 22 33 22 20 62 65 69 6e 67 20  value "3" being 
27940 61 64 64 65 64 0a 74 6f 20 74 68 65 20 71 75 65  added.to the que
27950 75 65 2e 20 20 54 68 69 73 20 72 65 70 65 61 74  ue.  This repeat
27960 73 20 39 39 39 39 39 39 20 74 69 6d 65 73 20 75  s 999999 times u
27970 6e 74 69 6c 20 66 69 6e 61 6c 6c 79 20 61 74 20  ntil finally at 
27980 73 74 65 70 20 32 61 20 74 68 65 0a 6f 6e 6c 79  step 2a the.only
27990 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20 71 75   value on the qu
279a0 65 75 65 20 69 73 20 61 20 72 6f 77 20 63 6f 6e  eue is a row con
279b0 74 61 69 6e 69 6e 67 20 31 30 30 30 30 30 30 2e  taining 1000000.
279c0 20 20 54 68 61 74 20 72 6f 77 20 69 73 0a 65 78    That row is.ex
279d0 74 72 61 63 74 65 64 20 61 6e 64 20 61 64 64 65  tracted and adde
279e0 64 20 74 6f 20 74 68 65 20 72 65 63 75 72 73 69  d to the recursi
279f0 76 65 20 74 61 62 6c 65 2e 20 20 42 75 74 20 74  ve table.  But t
27a00 68 69 73 20 74 69 6d 65 2c 20 74 68 65 0a 57 48  his time, the.WH
27a10 45 52 45 20 63 6c 61 75 73 65 20 63 61 75 73 65  ERE clause cause
27a20 73 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d  s the recursive-
27a30 73 65 6c 65 63 74 20 74 6f 20 72 65 74 75 72 6e  select to return
27a40 20 6e 6f 20 72 6f 77 73 2c 20 73 6f 20 74 68 65   no rows, so the
27a50 0a 71 75 65 75 65 20 72 65 6d 61 69 6e 73 20 65  .queue remains e
27a60 6d 70 74 79 20 61 6e 64 20 74 68 65 20 72 65 63  mpty and the rec
27a70 75 72 73 69 6f 6e 20 73 74 6f 70 73 2e 0a 0a 3c  ursion stops...<
27a80 70 3e 3c 62 3e 4f 70 74 69 6d 69 7a 61 74 69 6f  p><b>Optimizatio
27a90 6e 20 6e 6f 74 65 3a 3c 2f 62 3e 0a 49 6e 20 74  n note:</b>.In t
27aa0 68 65 20 64 69 73 63 75 73 73 69 6f 6e 20 61 62  he discussion ab
27ab0 6f 76 65 2c 20 73 74 61 74 65 6d 65 6e 74 73 20  ove, statements 
27ac0 6c 69 6b 65 20 22 69 6e 73 65 72 74 20 74 68 65  like "insert the
27ad0 20 72 6f 77 20 69 6e 74 6f 0a 74 68 65 20 72 65   row into.the re
27ae0 63 75 72 73 69 76 65 20 74 61 62 6c 65 22 20 73  cursive table" s
27af0 68 6f 75 6c 64 20 62 65 20 75 6e 64 65 72 73 74  hould be underst
27b00 6f 6f 64 20 63 6f 6e 63 65 70 74 75 61 6c 6c 79  ood conceptually
27b10 2c 20 6e 6f 74 20 6c 69 74 65 72 61 6c 6c 79 2e  , not literally.
27b20 0a 49 74 20 73 6f 75 6e 64 73 20 61 73 20 69 66  .It sounds as if
27b30 20 53 51 4c 69 74 65 20 69 73 20 61 63 63 75 6d   SQLite is accum
27b40 75 6c 61 74 69 6e 67 20 61 20 68 75 67 65 20 74  ulating a huge t
27b50 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 69 6e 67 20  able.containing 
27b60 6f 6e 65 20 6d 69 6c 6c 69 6f 6e 20 72 6f 77 73  one million rows
27b70 2c 20 74 68 65 6e 20 67 6f 69 6e 67 20 62 61 63  , then going bac
27b80 6b 20 61 6e 64 20 73 63 61 6e 6e 69 6e 67 20 74  k and scanning t
27b90 68 61 74 20 74 61 62 6c 65 0a 66 72 6f 6d 20 74  hat table.from t
27ba0 6f 70 20 74 6f 20 62 6f 74 74 6f 6d 20 74 6f 20  op to bottom to 
27bb0 67 65 6e 65 72 61 74 65 20 74 68 65 20 72 65 73  generate the res
27bc0 75 6c 74 2e 20 20 57 68 61 74 20 72 65 61 6c 6c  ult.  What reall
27bd0 79 20 68 61 70 70 65 6e 73 0a 69 73 20 74 68 61  y happens.is tha
27be0 74 20 74 68 65 20 71 75 65 72 79 20 6f 70 74 69  t the query opti
27bf0 6d 69 7a 65 72 20 73 65 65 73 20 74 68 61 74 20  mizer sees that 
27c00 76 61 6c 75 65 73 20 69 6e 20 74 68 65 0a 22 63  values in the."c
27c10 6e 74 22 20 72 65 63 75 72 73 69 76 65 20 74 61  nt" recursive ta
27c20 62 6c 65 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  ble are only use
27c30 64 20 6f 6e 63 65 2e 20 20 53 6f 20 61 73 20 65  d once.  So as e
27c40 61 63 68 20 72 6f 77 20 69 73 20 61 64 64 65 64  ach row is added
27c50 20 74 6f 0a 74 68 65 20 72 65 63 75 72 73 69 76   to.the recursiv
27c60 65 20 74 61 62 6c 65 2c 20 74 68 61 74 20 72 6f  e table, that ro
27c70 77 20 69 73 20 69 6d 6d 65 64 69 61 74 65 6c 79  w is immediately
27c80 20 72 65 74 75 72 6e 65 64 20 61 73 20 61 20 72   returned as a r
27c90 65 73 75 6c 74 20 6f 66 20 74 68 65 20 6d 61 69  esult of the mai
27ca0 6e 0a 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  n.SELECT stateme
27cb0 6e 74 20 61 6e 64 20 74 68 65 6e 20 64 69 73 63  nt and then disc
27cc0 61 72 64 65 64 2e 20 20 53 51 4c 69 74 65 20 64  arded.  SQLite d
27cd0 6f 65 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d 3e  oes <em>not</em>
27ce0 20 61 63 63 75 6d 75 6c 61 74 65 0a 61 20 74 65   accumulate.a te
27cf0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 63 6f  mporary table co
27d00 6e 74 61 69 6e 69 6e 67 20 61 20 6d 69 6c 6c 69  ntaining a milli
27d10 6f 6e 20 72 6f 77 73 2e 20 20 56 65 72 79 20 6c  on rows.  Very l
27d20 69 74 74 6c 65 20 6d 65 6d 6f 72 79 20 69 73 0a  ittle memory is.
27d30 6e 65 65 64 65 64 20 74 6f 20 72 75 6e 20 74 68  needed to run th
27d40 65 20 61 62 6f 76 65 20 65 78 61 6d 70 6c 65 2e  e above example.
27d50 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68    However, if th
27d60 65 20 65 78 61 6d 70 6c 65 20 68 61 64 20 75 73  e example had us
27d70 65 64 0a 55 4e 49 4f 4e 20 69 6e 73 74 65 61 64  ed.UNION instead
27d80 20 6f 66 20 55 4e 49 4f 4e 20 41 4c 4c 2c 20 74   of UNION ALL, t
27d90 68 65 6e 20 53 51 4c 69 74 65 20 77 6f 75 6c 64  hen SQLite would
27da0 20 68 61 76 65 20 68 61 64 20 74 6f 20 6b 65 65   have had to kee
27db0 70 20 61 72 6f 75 6e 64 0a 61 6c 6c 20 70 72 65  p around.all pre
27dc0 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65  viously generate
27dd0 64 20 63 6f 6e 74 65 6e 74 20 69 6e 20 6f 72 64  d content in ord
27de0 65 72 20 74 6f 20 63 68 65 63 6b 20 66 6f 72 20  er to check for 
27df0 64 75 70 6c 69 63 61 74 65 73 2e 0a 46 6f 72 20  duplicates..For 
27e00 74 68 69 73 20 72 65 61 73 6f 6e 2c 20 70 72 6f  this reason, pro
27e10 67 72 61 6d 6d 65 72 73 20 73 68 6f 75 6c 64 20  grammers should 
27e20 73 74 72 69 76 65 20 74 6f 20 75 73 65 20 55 4e  strive to use UN
27e30 49 4f 4e 20 41 4c 4c 20 69 6e 73 74 65 61 64 0a  ION ALL instead.
27e40 6f 66 20 55 4e 49 4f 4e 20 77 68 65 6e 20 66 65  of UNION when fe
27e50 61 73 69 62 6c 65 2e 0a 0a 3c 70 3e 48 65 72 65  asible...<p>Here
27e60 20 69 73 20 61 20 76 61 72 69 61 74 69 6f 6e 20   is a variation 
27e70 6f 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  on the previous 
27e80 65 78 61 6d 70 6c 65 3a 0a 0a 3c 62 6c 6f 63 6b  example:..<block
27e90 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54 48  quote><pre>.WITH
27ea0 20 52 45 43 55 52 53 49 56 45 0a 20 20 63 6e 74   RECURSIVE.  cnt
27eb0 28 78 29 20 41 53 20 28 0a 20 20 20 20 20 53 45  (x) AS (.     SE
27ec0 4c 45 43 54 20 31 0a 20 20 20 20 20 55 4e 49 4f  LECT 1.     UNIO
27ed0 4e 20 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43  N ALL.     SELEC
27ee0 54 20 78 2b 31 20 46 52 4f 4d 20 63 6e 74 0a 20  T x+1 FROM cnt. 
27ef0 20 20 20 20 20 4c 49 4d 49 54 20 31 30 30 30 30       LIMIT 10000
27f00 30 30 0a 20 20 29 0a 53 45 4c 45 43 54 20 78 20  00.  ).SELECT x 
27f10 46 52 4f 4d 20 63 6e 74 3b 0a 3c 2f 70 72 65 3e  FROM cnt;.</pre>
27f20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
27f30 70 3e 54 68 65 72 65 20 61 72 65 20 74 77 6f 20  p>There are two 
27f40 64 69 66 66 65 72 65 6e 63 65 73 20 69 6e 20 74  differences in t
27f50 68 69 73 20 76 61 72 69 61 74 69 6f 6e 2e 20 20  his variation.  
27f60 54 68 65 20 69 6e 69 74 69 61 6c 2d 73 65 6c 65  The initial-sele
27f70 63 74 20 69 73 0a 22 53 45 4c 45 43 54 20 31 22  ct is."SELECT 1"
27f80 20 69 6e 73 74 65 61 64 20 6f 66 20 22 56 41 4c   instead of "VAL
27f90 55 45 53 28 31 29 22 2e 20 20 42 75 74 20 74 68  UES(1)".  But th
27fa0 6f 73 65 20 61 72 65 20 6a 75 73 74 20 64 69 66  ose are just dif
27fb0 66 65 72 65 6e 74 0a 73 79 6e 74 61 78 65 73 20  ferent.syntaxes 
27fc0 66 6f 72 20 73 61 79 69 6e 67 20 65 78 61 63 74  for saying exact
27fd0 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
27fe0 67 2e 20 20 54 68 65 20 6f 74 68 65 72 20 63 68  g.  The other ch
27ff0 61 6e 67 65 20 69 73 20 74 68 61 74 20 74 68 65  ange is that the
28000 0a 72 65 63 75 72 73 69 6f 6e 20 69 73 20 73 74  .recursion is st
28010 6f 70 70 65 64 20 62 79 20 61 20 4c 49 4d 49 54  opped by a LIMIT
28020 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 20 57   rather than a W
28030 48 45 52 45 20 63 6c 61 75 73 65 2e 20 20 54 68  HERE clause.  Th
28040 65 20 75 73 65 20 6f 66 0a 4c 49 4d 49 54 20 6d  e use of.LIMIT m
28050 65 61 6e 73 20 74 68 61 74 20 77 68 65 6e 20 74  eans that when t
28060 68 65 20 6f 6e 65 2d 6d 69 6c 6c 69 6f 6e 74 68  he one-millionth
28070 20 72 6f 77 20 69 73 20 61 64 64 65 64 20 74 6f   row is added to
28080 20 74 68 65 20 22 63 6e 74 22 20 74 61 62 6c 65   the "cnt" table
28090 0a 28 61 6e 64 20 72 65 74 75 72 6e 65 64 20 62  .(and returned b
280a0 79 20 74 68 65 20 6d 61 69 6e 20 53 45 4c 45 43  y the main SELEC
280b0 54 2c 20 74 68 61 6e 6b 73 20 74 6f 20 74 68 65  T, thanks to the
280c0 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72   query optimizer
280d0 29 0a 74 68 65 6e 20 74 68 65 20 72 65 63 75 72  ).then the recur
280e0 73 69 6f 6e 20 73 74 6f 70 73 20 69 6d 6d 65 64  sion stops immed
280f0 69 61 74 65 6c 79 20 72 65 67 61 72 64 6c 65 73  iately regardles
28100 73 20 6f 66 20 68 6f 77 20 6d 61 6e 79 20 72 6f  s of how many ro
28110 77 73 20 6d 69 67 68 74 20 62 65 0a 6c 65 66 74  ws might be.left
28120 20 69 6e 20 74 68 65 20 71 75 65 75 65 2e 20 20   in the queue.  
28130 4f 6e 20 6d 6f 72 65 20 63 6f 6d 70 6c 65 78 20  On more complex 
28140 71 75 65 72 69 65 73 2c 20 69 74 20 63 61 6e 20  queries, it can 
28150 73 6f 6d 65 74 69 6d 65 73 20 62 65 0a 64 69 66  sometimes be.dif
28160 66 69 63 75 6c 74 20 74 6f 20 65 6e 73 75 72 65  ficult to ensure
28170 20 74 68 61 74 20 74 68 65 20 57 48 45 52 45 20   that the WHERE 
28180 63 6c 61 75 73 65 20 77 69 6c 6c 20 65 76 65 6e  clause will even
28190 74 75 61 6c 6c 79 20 63 61 75 73 65 20 74 68 65  tually cause the
281a0 0a 71 75 65 75 65 20 74 6f 20 64 72 61 69 6e 20  .queue to drain 
281b0 61 6e 64 20 74 68 65 20 72 65 63 75 72 73 69 6f  and the recursio
281c0 6e 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 2e 20  n to terminate. 
281d0 20 42 75 74 20 74 68 65 20 4c 49 4d 49 54 20 63   But the LIMIT c
281e0 6c 61 75 73 65 20 77 69 6c 6c 0a 61 6c 77 61 79  lause will.alway
281f0 73 20 73 74 6f 70 20 74 68 65 20 72 65 63 75 72  s stop the recur
28200 73 69 6f 6e 2e 20 20 53 6f 20 69 74 20 69 73 20  sion.  So it is 
28210 67 6f 6f 64 20 70 72 61 63 74 69 63 65 20 74 6f  good practice to
28220 20 61 6c 77 61 79 73 20 69 6e 63 6c 75 64 65 20   always include 
28230 61 0a 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 61  a.LIMIT clause a
28240 73 20 61 20 73 61 66 65 74 79 20 69 66 20 61 6e  s a safety if an
28250 20 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20   upper bound on 
28260 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
28270 72 65 63 75 72 73 69 6f 6e 20 0a 69 73 20 6b 6e  recursion .is kn
28280 6f 77 6e 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  own...<tcl>hd_fr
28290 61 67 6d 65 6e 74 20 72 63 65 78 32 3c 2f 74 63  agment rcex2</tc
282a0 6c 3e 0a 3c 68 34 3e 48 69 65 72 61 72 63 68 69  l>.<h4>Hierarchi
282b0 63 61 6c 20 51 75 65 72 79 20 45 78 61 6d 70 6c  cal Query Exampl
282c0 65 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 43 6f 6e 73  es</h4>..<p>Cons
282d0 69 64 65 72 20 61 20 74 61 62 6c 65 20 74 68 61  ider a table tha
282e0 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
282f0 6d 65 6d 62 65 72 73 20 6f 66 20 61 6e 20 6f 72  members of an or
28300 67 61 6e 69 7a 61 74 69 6f 6e 20 61 73 0a 77 65  ganization as.we
28310 6c 6c 20 61 73 20 74 68 65 20 63 68 61 69 6e 2d  ll as the chain-
28320 6f 66 2d 63 6f 6d 6d 61 6e 64 20 77 69 74 68 69  of-command withi
28330 6e 20 74 68 61 74 20 6f 72 67 61 6e 69 7a 61 74  n that organizat
28340 69 6f 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ion:..<blockquot
28350 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
28360 41 42 4c 45 20 6f 72 67 28 0a 20 20 6e 61 6d 65  ABLE org(.  name
28370 20 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45   TEXT PRIMARY KE
28380 59 2c 0a 20 20 62 6f 73 73 20 54 45 58 54 20 52  Y,.  boss TEXT R
28390 45 46 45 52 45 4e 43 45 53 20 6f 72 67 2c 0a 20  EFERENCES org,. 
283a0 20 68 65 69 67 68 74 20 49 4e 54 2c 0a 20 20 2d   height INT,.  -
283b0 2d 20 6f 74 68 65 72 20 63 6f 6e 74 65 6e 74 20  - other content 
283c0 6f 6d 69 74 74 65 64 0a 29 3b 0a 3c 2f 70 72 65  omitted.);.</pre
283d0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
283e0 3c 70 3e 45 76 65 72 79 20 6d 65 6d 62 65 72 20  <p>Every member 
283f0 69 6e 20 74 68 65 20 6f 72 67 61 6e 69 7a 61 74  in the organizat
28400 69 6f 6e 20 68 61 73 20 61 20 6e 61 6d 65 2c 20  ion has a name, 
28410 61 6e 64 20 6d 6f 73 74 20 6d 65 6d 62 65 72 73  and most members
28420 20 68 61 76 65 0a 61 20 73 69 6e 67 6c 65 20 62   have.a single b
28430 6f 73 73 2e 20 20 28 54 68 65 20 68 65 61 64 20  oss.  (The head 
28440 6f 66 20 74 68 65 20 77 68 6f 6c 65 20 6f 72 67  of the whole org
28450 61 6e 69 7a 61 74 69 6f 6e 20 68 61 73 20 61 20  anization has a 
28460 4e 55 4c 4c 0a 22 62 6f 73 73 22 20 66 69 65 6c  NULL."boss" fiel
28470 64 2e 29 20 54 68 65 20 72 6f 77 73 20 6f 66 20  d.) The rows of 
28480 74 68 65 20 22 6f 72 67 22 20 74 61 62 6c 65 20  the "org" table 
28490 66 6f 72 6d 20 61 20 74 72 65 65 2e 0a 0a 3c 70  form a tree...<p
284a0 3e 48 65 72 65 20 69 73 20 61 20 71 75 65 72 79  >Here is a query
284b0 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
284c0 68 65 20 61 76 65 72 61 67 65 20 68 65 69 67 68  he average heigh
284d0 74 20 6f 76 65 72 20 65 76 65 72 79 6f 6e 65 0a  t over everyone.
284e0 69 6e 20 41 6c 69 63 65 27 73 20 6f 72 67 61 6e  in Alice's organ
284f0 69 7a 61 74 69 6f 6e 2c 20 69 6e 63 6c 75 64 69  ization, includi
28500 6e 67 20 41 6c 69 63 65 3a 0a 0a 3c 62 6c 6f 63  ng Alice:..<bloc
28510 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
28520 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 77 6f  H RECURSIVE.  wo
28530 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 28 6e 29  rks_for_alice(n)
28540 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53   AS (.    VALUES
28550 28 27 41 6c 69 63 65 27 29 0a 20 20 20 20 55 4e  ('Alice').    UN
28560 49 4f 4e 0a 20 20 20 20 53 45 4c 45 43 54 20 6e  ION.    SELECT n
28570 61 6d 65 20 46 52 4f 4d 20 6f 72 67 2c 20 77 6f  ame FROM org, wo
28580 72 6b 73 5f 66 6f 72 5f 61 6c 69 63 65 0a 20 20  rks_for_alice.  
28590 20 20 20 57 48 45 52 45 20 6f 72 67 2e 62 6f 73     WHERE org.bos
285a0 73 3d 77 6f 72 6b 73 5f 66 6f 72 5f 61 6c 69 63  s=works_for_alic
285b0 65 2e 6e 0a 20 20 29 0a 53 45 4c 45 43 54 20 61  e.n.  ).SELECT a
285c0 76 67 28 68 65 69 67 68 74 29 20 46 52 4f 4d 20  vg(height) FROM 
285d0 6f 72 67 0a 20 57 48 45 52 45 20 6f 72 67 2e 6e  org. WHERE org.n
285e0 61 6d 65 20 49 4e 20 77 6f 72 6b 73 5f 66 6f 72  ame IN works_for
285f0 5f 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f  _alice;.</pre></
28600 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
28610 54 68 65 20 6e 65 78 74 20 65 78 61 6d 70 6c 65  The next example
28620 20 75 73 65 73 20 74 77 6f 20 0a 63 6f 6d 6d 6f   uses two .commo
28630 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
28640 6f 6e 73 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  ons in a single 
28650 57 49 54 48 20 63 6c 61 75 73 65 2e 20 20 0a 54  WITH clause.  .T
28660 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
28670 6c 65 20 72 65 63 6f 72 64 73 20 61 20 66 61 6d  le records a fam
28680 69 6c 79 20 74 72 65 65 3a 0a 0a 3c 62 6c 6f 63  ily tree:..<bloc
28690 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
286a0 41 54 45 20 54 41 42 4c 45 20 66 61 6d 69 6c 79  ATE TABLE family
286b0 28 0a 20 20 6e 61 6d 65 20 54 45 58 54 20 50 52  (.  name TEXT PR
286c0 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d 6f 6d  IMARY KEY,.  mom
286d0 20 54 45 58 54 20 52 45 46 45 52 45 4e 43 45 53   TEXT REFERENCES
286e0 20 66 61 6d 69 6c 79 2c 0a 20 20 64 61 64 20 54   family,.  dad T
286f0 45 58 54 20 52 45 46 45 52 45 4e 43 45 53 20 66  EXT REFERENCES f
28700 61 6d 69 6c 79 2c 0a 20 20 62 6f 72 6e 20 44 41  amily,.  born DA
28710 54 45 54 49 4d 45 2c 0a 20 20 64 69 65 64 20 44  TETIME,.  died D
28720 41 54 45 54 49 4d 45 2c 20 2d 2d 20 4e 55 4c 4c  ATETIME, -- NULL
28730 20 69 66 20 73 74 69 6c 6c 20 61 6c 69 76 65 0a   if still alive.
28740 20 20 2d 2d 20 6f 74 68 65 72 20 63 6f 6e 74 65    -- other conte
28750 6e 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  nt.);.</pre></bl
28760 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
28770 65 20 22 66 61 6d 69 6c 79 22 20 74 61 62 6c 65  e "family" table
28780 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74   is similar to t
28790 68 65 20 65 61 72 6c 69 65 72 20 22 6f 72 67 22  he earlier "org"
287a0 20 74 61 62 6c 65 20 65 78 63 65 70 74 20 74 68   table except th
287b0 61 74 20 0a 6e 6f 77 20 74 68 65 72 65 20 61 72  at .now there ar
287c0 65 20 74 77 6f 20 70 61 72 65 6e 74 73 20 74 6f  e two parents to
287d0 20 65 61 63 68 20 6d 65 6d 62 65 72 2e 0a 57 65   each member..We
287e0 20 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20 61 6c   want to know al
287f0 6c 20 6c 69 76 69 6e 67 20 61 6e 63 65 73 74 6f  l living ancesto
28800 72 73 20 6f 66 20 41 6c 69 63 65 2c 20 66 72 6f  rs of Alice, fro
28810 6d 20 6f 6c 64 65 73 74 20 74 6f 20 79 6f 75 6e  m oldest to youn
28820 67 65 73 74 2e 0a 41 6e 20 6f 72 64 69 6e 61 72  gest..An ordinar
28830 79 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65  y common table e
28840 78 70 72 65 73 73 69 6f 6e 2c 20 22 70 61 72 65  xpression, "pare
28850 6e 74 5f 6f 66 22 2c 20 69 73 20 64 65 66 69 6e  nt_of", is defin
28860 65 64 20 66 69 72 73 74 2e 20 20 54 68 61 74 0a  ed first.  That.
28870 6f 72 64 69 6e 61 72 79 20 43 54 45 20 69 73 20  ordinary CTE is 
28880 61 20 76 69 65 77 20 74 68 61 74 20 63 61 6e 20  a view that can 
28890 62 65 20 75 73 65 64 20 74 6f 20 66 69 6e 64 20  be used to find 
288a0 61 6c 6c 20 70 61 72 65 6e 74 73 20 6f 66 20 61  all parents of a
288b0 6e 79 0a 69 6e 64 69 76 69 64 75 61 6c 2e 20 20  ny.individual.  
288c0 54 68 61 74 20 6f 72 64 69 6e 61 72 79 20 43 54  That ordinary CT
288d0 45 20 69 73 20 74 68 65 6e 20 75 73 65 64 20 69  E is then used i
288e0 6e 20 74 68 65 20 22 61 6e 63 65 73 74 6f 72 5f  n the "ancestor_
288f0 6f 66 5f 61 6c 69 63 65 22 0a 72 65 63 75 72 73  of_alice".recurs
28900 69 76 65 20 43 54 45 2e 20 20 54 68 65 20 72 65  ive CTE.  The re
28910 63 75 72 73 69 76 65 20 43 54 45 20 69 73 20 74  cursive CTE is t
28920 68 65 6e 20 75 73 65 64 20 69 6e 20 74 68 65 20  hen used in the 
28930 66 69 6e 61 6c 20 71 75 65 72 79 3a 0a 0a 3c 62  final query:..<b
28940 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
28950 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20  WITH RECURSIVE. 
28960 20 70 61 72 65 6e 74 5f 6f 66 28 6e 61 6d 65 2c   parent_of(name,
28970 20 70 61 72 65 6e 74 29 20 41 53 0a 20 20 20 20   parent) AS.    
28980 28 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 6d 6f  (SELECT name, mo
28990 6d 20 46 52 4f 4d 20 66 61 6d 69 6c 79 20 55 4e  m FROM family UN
289a0 49 4f 4e 20 53 45 4c 45 43 54 20 6e 61 6d 65 2c  ION SELECT name,
289b0 20 64 61 64 20 46 52 4f 4d 20 66 61 6d 69 6c 79   dad FROM family
289c0 29 2c 0a 20 20 61 6e 63 65 73 74 6f 72 5f 6f 66  ),.  ancestor_of
289d0 5f 61 6c 69 63 65 28 6e 61 6d 65 29 20 41 53 0a  _alice(name) AS.
289e0 20 20 20 20 28 53 45 4c 45 43 54 20 70 61 72 65      (SELECT pare
289f0 6e 74 20 46 52 4f 4d 20 70 61 72 65 6e 74 5f 6f  nt FROM parent_o
28a00 66 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 41 6c  f WHERE name='Al
28a10 69 63 65 27 0a 20 20 20 20 20 55 4e 49 4f 4e 20  ice'.     UNION 
28a20 41 4c 4c 0a 20 20 20 20 20 53 45 4c 45 43 54 20  ALL.     SELECT 
28a30 70 61 72 65 6e 74 20 46 52 4f 4d 20 70 61 72 65  parent FROM pare
28a40 6e 74 5f 6f 66 20 4a 4f 49 4e 20 61 6e 63 65 73  nt_of JOIN ances
28a50 74 6f 72 5f 6f 66 5f 61 6c 69 63 65 20 55 53 49  tor_of_alice USI
28a60 4e 47 28 6e 61 6d 65 29 29 0a 53 45 4c 45 43 54  NG(name)).SELECT
28a70 20 66 61 6d 69 6c 79 2e 6e 61 6d 65 20 46 52 4f   family.name FRO
28a80 4d 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61 6c  M ancestor_of_al
28a90 69 63 65 2c 20 66 61 6d 69 6c 79 0a 20 57 48 45  ice, family. WHE
28aa0 52 45 20 61 6e 63 65 73 74 6f 72 5f 6f 66 5f 61  RE ancestor_of_a
28ab0 6c 69 63 65 2e 6e 61 6d 65 3d 66 61 6d 69 6c 79  lice.name=family
28ac0 2e 6e 61 6d 65 0a 20 20 20 41 4e 44 20 64 69 65  .name.   AND die
28ad0 64 20 49 53 20 4e 55 4c 4c 0a 20 4f 52 44 45 52  d IS NULL. ORDER
28ae0 20 42 59 20 62 6f 72 6e 3b 0a 3c 2f 70 72 65 3e   BY born;.</pre>
28af0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
28b00 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
28b10 72 63 65 78 33 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  rcex3</tcl>.<h4>
28b20 51 75 65 72 69 65 73 20 41 67 61 69 6e 73 74 20  Queries Against 
28b30 41 20 47 72 61 70 68 3c 2f 68 34 3e 0a 0a 3c 70  A Graph</h4>..<p
28b40 3e 41 20 76 65 72 73 69 6f 6e 20 63 6f 6e 74 72  >A version contr
28b50 6f 6c 20 73 79 73 74 65 6d 20 28 56 43 53 29 20  ol system (VCS) 
28b60 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 73  will typically s
28b70 74 6f 72 65 20 74 68 65 20 65 76 6f 6c 76 69 6e  tore the evolvin
28b80 67 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20 61 20  g.versions of a 
28b90 70 72 6f 6a 65 63 74 20 61 73 20 61 20 64 69 72  project as a dir
28ba0 65 63 74 65 64 20 61 63 79 63 6c 69 63 20 67 72  ected acyclic gr
28bb0 61 70 68 20 28 44 41 47 29 2e 20 20 43 61 6c 6c  aph (DAG).  Call
28bc0 20 65 61 63 68 0a 76 65 72 73 69 6f 6e 20 6f 66   each.version of
28bd0 20 74 68 65 20 70 72 6f 6a 65 63 74 20 61 20 22   the project a "
28be0 63 68 65 63 6b 69 6e 22 2e 20 20 41 20 73 69 6e  checkin".  A sin
28bf0 67 6c 65 0a 63 68 65 63 6b 69 6e 20 63 61 6e 20  gle.checkin can 
28c00 68 61 76 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  have zero or mor
28c10 65 20 70 61 72 65 6e 74 73 2e 20 20 4d 6f 73 74  e parents.  Most
28c20 20 63 68 65 63 6b 69 6e 73 20 28 65 78 63 65 70   checkins (excep
28c30 74 20 74 68 65 0a 66 69 72 73 74 29 20 68 61 76  t the.first) hav
28c40 65 20 61 20 73 69 6e 67 6c 65 20 70 61 72 65 6e  e a single paren
28c50 74 2c 20 62 75 74 20 69 6e 20 74 68 65 20 63 61  t, but in the ca
28c60 73 65 20 6f 66 20 61 20 6d 65 72 67 65 2c 20 61  se of a merge, a
28c70 20 63 68 65 63 6b 69 6e 0a 6d 69 67 68 74 20 68   checkin.might h
28c80 61 76 65 20 74 77 6f 20 6f 72 20 74 68 72 65 65  ave two or three
28c90 20 6f 72 20 6d 6f 72 65 20 70 61 72 65 6e 74 73   or more parents
28ca0 2e 20 20 41 20 73 63 68 65 6d 61 20 74 6f 20 6b  .  A schema to k
28cb0 65 65 70 20 74 72 61 63 6b 20 6f 66 0a 63 68 65  eep track of.che
28cc0 63 6b 69 6e 73 20 61 6e 64 20 74 68 65 20 6f 72  ckins and the or
28cd0 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68 65  der in which the
28ce0 79 20 6f 63 63 75 72 20 6d 69 67 68 74 20 6c 6f  y occur might lo
28cf0 6f 6b 20 73 6f 6d 65 74 68 69 6e 67 20 6c 69 6b  ok something lik
28d00 65 0a 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  e.this:..<blockq
28d10 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
28d20 45 20 54 41 42 4c 45 20 63 68 65 63 6b 69 6e 28  E TABLE checkin(
28d30 0a 20 20 69 64 20 49 4e 54 45 47 45 52 20 50 52  .  id INTEGER PR
28d40 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 6d 74 69  IMARY KEY,.  mti
28d50 6d 65 20 49 4e 54 45 47 45 52 20 2d 2d 20 74 69  me INTEGER -- ti
28d60 6d 65 73 74 61 6d 70 20 77 68 65 6e 20 74 68 69  mestamp when thi
28d70 73 20 63 68 65 63 6b 69 6e 20 6f 63 63 75 72 72  s checkin occurr
28d80 65 64 0a 29 3b 0a 43 52 45 41 54 45 20 54 41 42  ed.);.CREATE TAB
28d90 4c 45 20 64 65 72 69 76 65 64 66 72 6f 6d 28 0a  LE derivedfrom(.
28da0 20 20 78 66 72 6f 6d 20 49 4e 54 45 47 45 52 20    xfrom INTEGER 
28db0 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e  NOT NULL REFEREN
28dc0 43 45 53 20 63 68 65 63 6b 69 6e 2c 20 2d 2d 20  CES checkin, -- 
28dd0 70 61 72 65 6e 74 20 63 68 65 63 6b 69 6e 0a 20  parent checkin. 
28de0 20 78 74 6f 20 49 4e 54 45 47 45 52 20 4e 4f 54   xto INTEGER NOT
28df0 20 4e 55 4c 4c 20 52 45 46 45 52 45 4e 43 45 53   NULL REFERENCES
28e00 20 63 68 65 63 6b 69 6e 2c 20 20 20 2d 2d 20 64   checkin,   -- d
28e10 65 72 69 76 65 64 20 63 68 65 63 6b 69 6e 0a 20  erived checkin. 
28e20 20 50 52 49 4d 41 52 59 20 4b 45 59 28 78 66 72   PRIMARY KEY(xfr
28e30 6f 6d 2c 78 74 6f 29 0a 29 3b 0a 43 52 45 41 54  om,xto).);.CREAT
28e40 45 20 49 4e 44 45 58 20 64 65 72 69 76 65 64 66  E INDEX derivedf
28e50 72 6f 6d 5f 62 61 63 6b 20 4f 4e 20 64 65 72 69  rom_back ON deri
28e60 76 65 64 66 72 6f 6d 28 78 74 6f 2c 78 66 72 6f  vedfrom(xto,xfro
28e70 6d 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  m);.</pre></bloc
28e80 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 69 73  kquote>..<p>This
28e90 20 67 72 61 70 68 20 69 73 20 61 63 79 63 6c 69   graph is acycli
28ea0 63 2e 20 20 41 6e 64 20 77 65 20 61 73 73 75 6d  c.  And we assum
28eb0 65 20 74 68 61 74 20 74 68 65 20 6d 74 69 6d 65  e that the mtime
28ec0 20 6f 66 20 65 76 65 72 79 0a 63 68 69 6c 64 20   of every.child 
28ed0 63 68 65 63 6b 69 6e 20 69 73 20 6e 6f 20 6c 65  checkin is no le
28ee0 73 73 20 74 68 61 6e 20 74 68 65 20 6d 74 69 6d  ss than the mtim
28ef0 65 20 6f 66 20 61 6c 6c 20 69 74 73 20 70 61 72  e of all its par
28f00 65 6e 74 73 2e 20 20 42 75 74 0a 75 6e 6c 69 6b  ents.  But.unlik
28f10 65 20 74 68 65 20 65 61 72 6c 69 65 72 20 65 78  e the earlier ex
28f20 61 6d 70 6c 65 73 2c 20 74 68 69 73 20 67 72 61  amples, this gra
28f30 70 68 20 6d 69 67 68 74 20 68 61 76 65 20 6d 75  ph might have mu
28f40 6c 74 69 70 6c 65 20 70 61 74 68 73 20 6f 66 0a  ltiple paths of.
28f50 64 69 66 66 65 72 69 6e 67 20 6c 65 6e 67 74 68  differing length
28f60 73 20 62 65 74 77 65 65 6e 20 61 6e 79 20 74 77  s between any tw
28f70 6f 20 63 68 65 63 6b 69 6e 73 2e 0a 0a 3c 70 3e  o checkins...<p>
28f80 57 65 20 77 61 6e 74 20 74 6f 20 6b 6e 6f 77 20  We want to know 
28f90 74 68 65 20 74 77 65 6e 74 79 20 6d 6f 73 74 20  the twenty most 
28fa0 72 65 63 65 6e 74 20 61 6e 63 65 73 74 6f 72 73  recent ancestors
28fb0 20 69 6e 20 74 69 6d 65 20 28 6f 75 74 20 6f 66   in time (out of
28fc0 0a 74 68 65 20 74 68 6f 75 73 61 6e 64 73 20 61  .the thousands a
28fd0 6e 64 20 74 68 6f 75 73 61 6e 64 73 20 6f 66 20  nd thousands of 
28fe0 61 6e 63 65 73 74 6f 72 73 20 69 6e 20 74 68 65  ancestors in the
28ff0 20 77 68 6f 6c 65 20 44 41 47 29 20 66 6f 72 0a   whole DAG) for.
29000 63 68 65 63 6b 69 6e 20 22 40 42 41 53 45 4c 49  checkin "@BASELI
29010 4e 45 22 2e 20 20 28 41 20 71 75 65 72 79 20 73  NE".  (A query s
29020 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 69  imilar to this i
29030 73 20 75 73 65 64 0a 62 79 20 74 68 65 20 3c 61  s used.by the <a
29040 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 77 77   href="http://ww
29050 77 2e 66 6f 73 73 69 6c 2d 73 63 6d 2e 6f 72 67  w.fossil-scm.org
29060 2f 22 3e 46 6f 73 73 69 6c 3c 2f 61 3e 20 56 43  /">Fossil</a> VC
29070 53 20 74 6f 0a 73 68 6f 77 20 74 68 65 20 4e 20  S to.show the N 
29080 6d 6f 73 74 20 72 65 63 65 6e 74 20 61 6e 63 65  most recent ance
29090 73 74 6f 72 73 20 6f 66 20 61 20 63 68 65 63 6b  stors of a check
290a0 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a  .  For example:.
290b0 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f  <a href="http://
290c0 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73  www.sqlite.org/s
290d0 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d 74 72  rc/timeline?p=tr
290e0 75 6e 6b 26 6e 3d 33 30 22 3e 68 74 74 70 3a 2f  unk&n=30">http:/
290f0 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f  /www.sqlite.org/
29100 73 72 63 2f 74 69 6d 65 6c 69 6e 65 3f 70 3d 74  src/timeline?p=t
29110 72 75 6e 6b 26 6e 3d 33 30 3c 2f 61 3e 2e 29 0a  runk&n=30</a>.).
29120 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
29130 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49 56  e>.WITH RECURSIV
29140 45 0a 20 20 61 6e 63 65 73 74 6f 72 28 69 64 2c  E.  ancestor(id,
29150 6d 74 69 6d 65 29 20 41 53 20 28 0a 20 20 20 20  mtime) AS (.    
29160 53 45 4c 45 43 54 20 69 64 2c 20 6d 74 69 6d 65  SELECT id, mtime
29170 20 46 52 4f 4d 20 63 68 65 63 6b 69 6e 20 57 48   FROM checkin WH
29180 45 52 45 20 69 64 3d 40 42 41 53 45 4c 49 4e 45  ERE id=@BASELINE
29190 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 53  .    UNION.    S
291a0 45 4c 45 43 54 20 64 65 72 69 76 65 64 66 72 6f  ELECT derivedfro
291b0 6d 2e 78 66 72 6f 6d 2c 20 63 68 65 63 6b 69 6e  m.xfrom, checkin
291c0 2e 6d 74 69 6d 65 0a 20 20 20 20 20 20 46 52 4f  .mtime.      FRO
291d0 4d 20 61 6e 63 65 73 74 6f 72 2c 20 64 65 72 69  M ancestor, deri
291e0 76 65 64 66 72 6f 6d 2c 20 63 68 65 63 6b 69 6e  vedfrom, checkin
291f0 0a 20 20 20 20 20 57 48 45 52 45 20 61 6e 63 65  .     WHERE ance
29200 73 74 6f 72 2e 69 64 3d 64 65 72 69 76 65 64 66  stor.id=derivedf
29210 72 6f 6d 2e 78 74 6f 0a 20 20 20 20 20 20 20 41  rom.xto.       A
29220 4e 44 20 63 68 65 63 6b 69 6e 2e 69 64 3d 64 65  ND checkin.id=de
29230 72 69 76 65 64 66 72 6f 6d 2e 78 66 72 6f 6d 0a  rivedfrom.xfrom.
29240 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 63 68       ORDER BY ch
29250 65 63 6b 69 6e 2e 6d 74 69 6d 65 20 44 45 53 43  eckin.mtime DESC
29260 0a 20 20 20 20 20 4c 49 4d 49 54 20 32 30 0a 20  .     LIMIT 20. 
29270 20 29 0a 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   ).SELECT * FROM
29280 20 63 68 65 63 6b 69 6e 20 4a 4f 49 4e 20 61 6e   checkin JOIN an
29290 63 65 73 74 6f 72 20 55 53 49 4e 47 28 69 64 29  cestor USING(id)
292a0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
292b0 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 54 68 65 20 22  uote>..<p>.The "
292c0 4f 52 44 45 52 20 42 59 20 63 68 65 63 6b 69 6e  ORDER BY checkin
292d0 2e 6d 74 69 6d 65 20 44 45 53 43 22 20 74 65 72  .mtime DESC" ter
292e0 6d 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69  m in the recursi
292f0 76 65 2d 73 65 6c 65 63 74 20 6d 61 6b 65 73 0a  ve-select makes.
29300 74 68 65 20 71 75 65 72 79 20 72 75 6e 20 6d 75  the query run mu
29310 63 68 20 66 61 73 74 65 72 20 62 79 20 70 72 65  ch faster by pre
29320 76 65 6e 74 69 6e 67 20 69 74 20 66 72 6f 6d 20  venting it from 
29330 66 6f 6c 6c 6f 77 69 6e 67 0a 62 72 61 6e 63 68  following.branch
29340 65 73 20 74 68 61 74 20 6d 65 72 67 65 20 63 68  es that merge ch
29350 65 63 6b 69 6e 73 0a 66 72 6f 6d 20 6c 6f 6e 67  eckins.from long
29360 20 61 67 6f 2e 20 20 54 68 65 20 4f 52 44 45 52   ago.  The ORDER
29370 20 42 59 20 66 6f 72 63 65 73 20 74 68 65 20 72   BY forces the r
29380 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
29390 74 6f 20 66 6f 63 75 73 0a 6f 6e 20 74 68 65 20  to focus.on the 
293a0 6d 6f 73 74 20 72 65 63 65 6e 74 20 63 68 65 63  most recent chec
293b0 6b 69 6e 73 2c 20 74 68 65 20 6f 6e 65 73 20 77  kins, the ones w
293c0 65 20 77 61 6e 74 2e 20 20 57 69 74 68 6f 75 74  e want.  Without
293d0 20 74 68 65 20 4f 52 44 45 52 20 42 59 0a 6f 6e   the ORDER BY.on
293e0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 2d 73   the recursive-s
293f0 65 6c 65 63 74 2c 20 6f 6e 65 20 77 6f 75 6c 64  elect, one would
29400 20 62 65 20 66 6f 72 63 65 64 20 74 6f 20 63 6f   be forced to co
29410 6d 70 75 74 65 20 74 68 65 20 63 6f 6d 70 6c 65  mpute the comple
29420 74 65 20 73 65 74 20 6f 66 0a 74 68 6f 75 73 61  te set of.thousa
29430 6e 64 73 20 6f 66 20 61 6e 63 65 73 74 6f 72 73  nds of ancestors
29440 2c 20 73 6f 72 74 20 74 68 65 6d 20 61 6c 6c 20  , sort them all 
29450 62 79 20 6d 74 69 6d 65 2c 20 74 68 65 6e 20 74  by mtime, then t
29460 61 6b 65 20 74 68 65 20 74 6f 70 20 74 77 65 6e  ake the top twen
29470 74 79 2e 0a 54 68 65 20 4f 52 44 45 52 20 42 59  ty..The ORDER BY
29480 20 65 73 73 65 6e 74 69 61 6c 6c 79 20 73 65 74   essentially set
29490 73 20 75 70 20 61 20 70 72 69 6f 72 69 74 79 20  s up a priority 
294a0 71 75 65 75 65 20 74 68 61 74 0a 66 6f 72 63 65  queue that.force
294b0 73 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  s the recursive 
294c0 71 75 65 72 79 20 74 6f 20 6c 6f 6f 6b 20 61 74  query to look at
294d0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
294e0 20 61 6e 63 65 73 74 6f 72 73 20 66 69 72 73 74   ancestors first
294f0 2c 0a 61 6c 6c 6f 77 69 6e 67 20 74 68 65 20 75  ,.allowing the u
29500 73 65 20 6f 66 20 61 20 4c 49 4d 49 54 20 63 6c  se of a LIMIT cl
29510 61 75 73 65 20 74 6f 20 72 65 73 74 72 69 63 74  ause to restrict
29520 20 74 68 65 20 73 63 6f 70 65 20 6f 66 20 74 68   the scope of th
29530 65 0a 71 75 65 72 79 20 74 6f 20 6a 75 73 74 20  e.query to just 
29540 74 68 65 20 63 68 65 63 6b 69 6e 73 20 6f 66 20  the checkins of 
29550 69 6e 74 65 72 65 73 74 2e 0a 0a 3c 74 63 6c 3e  interest...<tcl>
29560 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 69 74 68  hd_fragment with
29570 6f 72 64 65 72 62 79 3c 2f 74 63 6c 3e 0a 3c 68  orderby</tcl>.<h
29580 34 3e 43 6f 6e 74 72 6f 6c 6c 69 6e 67 20 44 65  4>Controlling De
29590 70 74 68 2d 46 69 72 73 74 20 56 65 72 73 75 73  pth-First Versus
295a0 20 42 72 65 61 64 74 68 2d 46 69 72 73 74 20 53   Breadth-First S
295b0 65 61 72 63 68 20 4f 66 20 61 20 54 72 65 65 0a  earch Of a Tree.
295c0 55 73 69 6e 67 20 4f 52 44 45 52 20 42 59 3c 2f  Using ORDER BY</
295d0 68 34 3e 0a 0a 3c 70 3e 41 6e 20 4f 52 44 45 52  h4>..<p>An ORDER
295e0 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 74 68   BY clause 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 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  ct can be used t
29610 6f 20 63 6f 6e 74 72 6f 6c 0a 77 68 65 74 68 65  o control.whethe
29620 72 20 74 68 65 20 73 65 61 72 63 68 20 6f 66 20  r the search of 
29630 61 20 74 72 65 65 20 69 73 20 64 65 70 74 68 2d  a tree is depth-
29640 66 69 72 73 74 20 6f 72 20 62 72 65 61 64 74 68  first or breadth
29650 2d 66 69 72 73 74 2e 20 20 54 6f 0a 69 6c 6c 75  -first.  To.illu
29660 73 74 72 61 74 65 2c 20 77 65 20 77 69 6c 6c 20  strate, we will 
29670 75 73 65 20 61 20 76 61 72 69 61 74 69 6f 6e 20  use a variation 
29680 6f 6e 20 74 68 65 20 22 6f 72 67 22 20 74 61 62  on the "org" tab
29690 6c 65 20 66 72 6f 6d 20 61 6e 20 65 78 61 6d 70  le from an examp
296a0 6c 65 0a 61 62 6f 76 65 2c 20 77 69 74 68 6f 75  le.above, withou
296b0 74 20 74 68 65 20 22 68 65 69 67 68 74 22 20 63  t the "height" c
296c0 6f 6c 75 6d 6e 2c 20 61 6e 64 20 77 69 74 68 20  olumn, and with 
296d0 73 6f 6d 65 20 72 65 61 6c 20 64 61 74 61 20 69  some real data i
296e0 6e 73 65 72 74 65 64 3a 0a 0a 3c 62 6c 6f 63 6b  nserted:..<block
296f0 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
29700 54 45 20 54 41 42 4c 45 20 6f 72 67 28 0a 20 20  TE TABLE org(.  
29710 6e 61 6d 65 20 54 45 58 54 20 50 52 49 4d 41 52  name TEXT PRIMAR
29720 59 20 4b 45 59 2c 0a 20 20 62 6f 73 73 20 54 45  Y KEY,.  boss TE
29730 58 54 20 52 45 46 45 52 45 4e 43 45 53 20 6f 72  XT REFERENCES or
29740 67 0a 29 20 57 49 54 48 4f 55 54 20 52 4f 57 49  g.) WITHOUT ROWI
29750 44 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f  D;.INSERT INTO o
29760 72 67 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65  rg VALUES('Alice
29770 27 2c 4e 55 4c 4c 29 3b 0a 49 4e 53 45 52 54 20  ',NULL);.INSERT 
29780 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
29790 27 42 6f 62 27 2c 27 41 6c 69 63 65 27 29 3b 0a  'Bob','Alice');.
297a0 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20  INSERT INTO org 
297b0 56 41 4c 55 45 53 28 27 43 69 6e 64 79 27 2c 27  VALUES('Cindy','
297c0 41 6c 69 63 65 27 29 3b 0a 49 4e 53 45 52 54 20  Alice');.INSERT 
297d0 49 4e 54 4f 20 6f 72 67 20 56 41 4c 55 45 53 28  INTO org VALUES(
297e0 27 44 61 76 65 27 2c 27 42 6f 62 27 29 3b 0a 49  'Dave','Bob');.I
297f0 4e 53 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56  NSERT INTO org V
29800 41 4c 55 45 53 28 27 45 6d 6d 61 27 2c 27 42 6f  ALUES('Emma','Bo
29810 62 27 29 3b 0a 49 4e 53 45 52 54 20 49 4e 54 4f  b');.INSERT INTO
29820 20 6f 72 67 20 56 41 4c 55 45 53 28 27 46 72 65   org VALUES('Fre
29830 64 27 2c 27 43 69 6e 64 79 27 29 3b 0a 49 4e 53  d','Cindy');.INS
29840 45 52 54 20 49 4e 54 4f 20 6f 72 67 20 56 41 4c  ERT INTO org VAL
29850 55 45 53 28 27 47 61 69 6c 27 2c 27 43 69 6e 64  UES('Gail','Cind
29860 79 27 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  y');.</pre></blo
29870 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 48 65 72  ckquote>..<p>Her
29880 65 20 69 73 20 61 20 71 75 65 72 79 20 74 6f 20  e is a query to 
29890 73 68 6f 77 20 74 68 65 20 74 72 65 65 20 73 74  show the tree st
298a0 72 75 63 74 75 72 65 20 69 6e 20 61 20 62 72 65  ructure in a bre
298b0 61 64 74 68 2d 66 69 72 73 74 20 70 61 74 74 65  adth-first patte
298c0 72 6e 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  rn:..<blockquote
298d0 3e 3c 70 72 65 3e 0a 57 49 54 48 20 52 45 43 55  ><pre>.WITH RECU
298e0 52 53 49 56 45 0a 20 20 75 6e 64 65 72 5f 61 6c  RSIVE.  under_al
298f0 69 63 65 28 6e 61 6d 65 2c 6c 65 76 65 6c 29 20  ice(name,level) 
29900 41 53 20 28 0a 20 20 20 20 56 41 4c 55 45 53 28  AS (.    VALUES(
29910 27 41 6c 69 63 65 27 2c 30 29 0a 20 20 20 20 55  'Alice',0).    U
29920 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c  NION ALL.    SEL
29930 45 43 54 20 6f 72 67 2e 6e 61 6d 65 2c 20 75 6e  ECT org.name, un
29940 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c 2b  der_alice.level+
29950 31 0a 20 20 20 20 20 20 46 52 4f 4d 20 6f 72 67  1.      FROM org
29960 20 4a 4f 49 4e 20 75 6e 64 65 72 5f 61 6c 69 63   JOIN under_alic
29970 65 20 4f 4e 20 6f 72 67 2e 62 6f 73 73 3d 75 6e  e ON org.boss=un
29980 64 65 72 5f 61 6c 69 63 65 2e 6e 61 6d 65 0a 20  der_alice.name. 
29990 20 20 20 20 4f 52 44 45 52 20 42 59 20 32 0a 20      ORDER BY 2. 
299a0 20 29 0a 53 45 4c 45 43 54 20 73 75 62 73 74 72   ).SELECT substr
299b0 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 27 2c 31 2c  ('..........',1,
299c0 6c 65 76 65 6c 2a 33 29 20 7c 7c 20 6e 61 6d 65  level*3) || name
299d0 20 46 52 4f 4d 20 75 6e 64 65 72 5f 61 6c 69 63   FROM under_alic
299e0 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  e;.</pre></block
299f0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 22  quote>..<p>The "
29a00 4f 52 44 45 52 20 42 59 20 32 22 20 28 77 68 69  ORDER BY 2" (whi
29a10 63 68 20 6d 65 61 6e 73 20 74 68 65 20 73 61 6d  ch means the sam
29a20 65 20 61 73 20 22 4f 52 44 45 52 20 42 59 20 75  e as "ORDER BY u
29a30 6e 64 65 72 5f 61 6c 69 63 65 2e 6c 65 76 65 6c  nder_alice.level
29a40 2b 31 22 29 0a 63 61 75 73 65 73 20 68 69 67 68  +1").causes high
29a50 65 72 20 6c 65 76 65 6c 73 20 69 6e 20 74 68 65  er levels in the
29a60 20 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 63 68   organization ch
29a70 61 72 74 20 28 77 69 74 68 20 73 6d 61 6c 6c 65  art (with smalle
29a80 72 20 22 6c 65 76 65 6c 22 20 76 61 6c 75 65 73  r "level" values
29a90 29 0a 74 6f 20 62 65 20 70 72 6f 63 65 73 73 65  ).to be processe
29aa0 64 20 66 69 72 73 74 2c 20 72 65 73 75 6c 74 69  d first, resulti
29ab0 6e 67 20 69 6e 20 61 20 62 72 65 61 64 74 68 2d  ng in a breadth-
29ac0 66 69 72 73 74 20 73 65 61 72 63 68 2e 20 20 54  first search.  T
29ad0 68 65 20 6f 75 74 70 75 74 20 69 73 3a 0a 0a 3c  he output is:..<
29ae0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
29af0 0a 41 6c 69 63 65 0a 2e 2e 2e 42 6f 62 0a 2e 2e  .Alice....Bob...
29b00 2e 43 69 6e 64 79 0a 2e 2e 2e 2e 2e 2e 44 61 76  .Cindy.......Dav
29b10 65 0a 2e 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e  e.......Emma....
29b20 2e 2e 2e 46 72 65 64 0a 2e 2e 2e 2e 2e 2e 47 61  ...Fred.......Ga
29b30 69 6c 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  il.</pre></block
29b40 71 75 6f 74 65 3e 0a 0a 3c 70 3e 42 75 74 20 69  quote>..<p>But i
29b50 66 20 77 65 20 63 68 61 6e 67 65 20 74 68 65 20  f we change the 
29b60 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
29b70 74 6f 20 61 64 64 20 74 68 65 20 22 44 45 53 43  to add the "DESC
29b80 22 20 6d 6f 64 69 66 69 65 72 2c 20 74 68 61 74  " modifier, that
29b90 20 77 69 6c 6c 0a 63 61 75 73 65 20 6c 6f 77 65   will.cause lowe
29ba0 72 20 6c 65 76 65 6c 73 20 69 6e 20 74 68 65 20  r levels in the 
29bb0 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 20 28 77 69  organization (wi
29bc0 74 68 20 6c 61 72 67 65 72 20 22 6c 65 76 65 6c  th larger "level
29bd0 22 20 76 61 6c 75 65 73 29 20 74 6f 20 62 65 0a  " values) to be.
29be0 70 72 6f 63 65 73 73 65 64 20 66 69 72 73 74 20  processed first 
29bf0 62 79 20 74 68 65 20 72 65 63 75 72 73 69 76 65  by the recursive
29c00 2d 73 65 6c 65 63 74 2c 20 72 65 73 75 6c 74 69  -select, resulti
29c10 6e 67 20 69 6e 20 61 20 64 65 70 74 68 2d 66 69  ng in a depth-fi
29c20 72 73 74 20 73 65 61 72 63 68 3a 0a 0a 3c 62 6c  rst search:..<bl
29c30 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57  ockquote><pre>.W
29c40 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
29c50 75 6e 64 65 72 5f 61 6c 69 63 65 28 6e 61 6d 65  under_alice(name
29c60 2c 6c 65 76 65 6c 29 20 41 53 20 28 0a 20 20 20  ,level) AS (.   
29c70 20 56 41 4c 55 45 53 28 27 41 6c 69 63 65 27 2c   VALUES('Alice',
29c80 30 29 0a 20 20 20 20 55 4e 49 4f 4e 20 41 4c 4c  0).    UNION ALL
29c90 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 72 67 2e  .    SELECT org.
29ca0 6e 61 6d 65 2c 20 75 6e 64 65 72 5f 61 6c 69 63  name, under_alic
29cb0 65 2e 6c 65 76 65 6c 2b 31 0a 20 20 20 20 20 20  e.level+1.      
29cc0 46 52 4f 4d 20 6f 72 67 20 4a 4f 49 4e 20 75 6e  FROM org JOIN un
29cd0 64 65 72 5f 61 6c 69 63 65 20 4f 4e 20 6f 72 67  der_alice ON org
29ce0 2e 62 6f 73 73 3d 75 6e 64 65 72 5f 61 6c 69 63  .boss=under_alic
29cf0 65 2e 6e 61 6d 65 0a 20 20 20 20 20 4f 52 44 45  e.name.     ORDE
29d00 52 20 42 59 20 32 20 3c 62 3e 44 45 53 43 3c 2f  R BY 2 <b>DESC</
29d10 62 3e 0a 20 20 29 0a 53 45 4c 45 43 54 20 73 75  b>.  ).SELECT su
29d20 62 73 74 72 28 27 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  bstr('..........
29d30 27 2c 31 2c 6c 65 76 65 6c 2a 33 29 20 7c 7c 20  ',1,level*3) || 
29d40 6e 61 6d 65 20 46 52 4f 4d 20 75 6e 64 65 72 5f  name FROM under_
29d50 61 6c 69 63 65 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  alice;.</pre></b
29d60 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
29d70 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74 68 69  he output of thi
29d80 73 20 72 65 76 69 73 65 64 20 71 75 65 72 79 20  s revised query 
29d90 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
29da0 3e 3c 70 72 65 3e 0a 41 6c 69 63 65 0a 2e 2e 2e  ><pre>.Alice....
29db0 42 6f 62 0a 2e 2e 2e 2e 2e 2e 44 61 76 65 0a 2e  Bob.......Dave..
29dc0 2e 2e 2e 2e 2e 45 6d 6d 61 0a 2e 2e 2e 43 69 6e  .....Emma....Cin
29dd0 64 79 0a 2e 2e 2e 2e 2e 2e 46 72 65 64 0a 2e 2e  dy.......Fred...
29de0 2e 2e 2e 2e 47 61 69 6c 0a 3c 2f 70 72 65 3e 3c  ....Gail.</pre><
29df0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
29e00 3e 57 68 65 6e 20 74 68 65 20 4f 52 44 45 52 20  >When the ORDER 
29e10 42 59 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69  BY clause is omi
29e20 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65  tted from the re
29e30 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 2c 20  cursive-select, 
29e40 74 68 65 0a 71 75 65 75 65 20 62 65 68 61 76 65  the.queue behave
29e50 73 20 61 73 20 61 20 46 49 46 4f 2c 20 77 68 69  s as a FIFO, whi
29e60 63 68 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20  ch results in a 
29e70 62 72 65 61 64 74 68 2d 66 69 72 73 74 20 73 65  breadth-first se
29e80 61 72 63 68 2e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f  arch....<tcl>hd_
29e90 66 72 61 67 6d 65 6e 74 20 6d 61 6e 64 65 6c 62  fragment mandelb
29ea0 72 6f 74 20 7b 63 6f 6d 70 75 74 65 20 74 68 65  rot {compute the
29eb0 20 4d 61 6e 64 65 6c 62 72 6f 74 20 73 65 74 7d   Mandelbrot set}
29ec0 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 4f 75 74 6c 61  </tcl>.<h4>Outla
29ed0 6e 64 69 73 68 20 52 65 63 75 72 73 69 76 65 20  ndish Recursive 
29ee0 51 75 65 72 79 20 45 78 61 6d 70 6c 65 73 3c 2f  Query Examples</
29ef0 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c 6c  h4>..<p>The foll
29f00 6f 77 69 6e 67 20 71 75 65 72 79 20 63 6f 6d 70  owing query comp
29f10 75 74 65 73 20 61 6e 20 61 70 70 72 6f 78 69 6d  utes an approxim
29f20 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 4d 61 6e  ation of the Man
29f30 64 65 6c 62 72 6f 74 20 53 65 74 0a 61 6e 64 20  delbrot Set.and 
29f40 6f 75 74 70 75 74 73 20 74 68 65 20 72 65 73 75  outputs the resu
29f50 6c 74 20 61 73 20 41 53 43 49 49 2d 61 72 74 3a  lt as ASCII-art:
29f60 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
29f70 72 65 3e 0a 57 49 54 48 20 52 45 43 55 52 53 49  re>.WITH RECURSI
29f80 56 45 0a 20 20 78 61 78 69 73 28 78 29 20 41 53  VE.  xaxis(x) AS
29f90 20 28 56 41 4c 55 45 53 28 2d 32 2e 30 29 20 55   (VALUES(-2.0) U
29fa0 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
29fb0 78 2b 30 2e 30 35 20 46 52 4f 4d 20 78 61 78 69  x+0.05 FROM xaxi
29fc0 73 20 57 48 45 52 45 20 78 26 6c 74 3b 31 2e 32  s WHERE x&lt;1.2
29fd0 29 2c 0a 20 20 79 61 78 69 73 28 79 29 20 41 53  ),.  yaxis(y) AS
29fe0 20 28 56 41 4c 55 45 53 28 2d 31 2e 30 29 20 55   (VALUES(-1.0) U
29ff0 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
2a000 79 2b 30 2e 31 20 46 52 4f 4d 20 79 61 78 69 73  y+0.1 FROM yaxis
2a010 20 57 48 45 52 45 20 79 26 6c 74 3b 31 2e 30 29   WHERE y&lt;1.0)
2a020 2c 0a 20 20 6d 28 69 74 65 72 2c 20 63 78 2c 20  ,.  m(iter, cx, 
2a030 63 79 2c 20 78 2c 20 79 29 20 41 53 20 28 0a 20  cy, x, y) AS (. 
2a040 20 20 20 53 45 4c 45 43 54 20 30 2c 20 78 2c 20     SELECT 0, x, 
2a050 79 2c 20 30 2e 30 2c 20 30 2e 30 20 46 52 4f 4d  y, 0.0, 0.0 FROM
2a060 20 78 61 78 69 73 2c 20 79 61 78 69 73 0a 20 20   xaxis, yaxis.  
2a070 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 20 20    UNION ALL.    
2a080 53 45 4c 45 43 54 20 69 74 65 72 2b 31 2c 20 63  SELECT iter+1, c
2a090 78 2c 20 63 79 2c 20 78 2a 78 2d 79 2a 79 20 2b  x, cy, x*x-y*y +
2a0a0 20 63 78 2c 20 32 2e 30 2a 78 2a 79 20 2b 20 63   cx, 2.0*x*y + c
2a0b0 79 20 46 52 4f 4d 20 6d 20 0a 20 20 20 20 20 57  y FROM m .     W
2a0c0 48 45 52 45 20 28 78 2a 78 20 2b 20 79 2a 79 29  HERE (x*x + y*y)
2a0d0 20 26 6c 74 3b 20 34 2e 30 20 41 4e 44 20 69 74   &lt; 4.0 AND it
2a0e0 65 72 26 6c 74 3b 32 38 0a 20 20 29 2c 0a 20 20  er&lt;28.  ),.  
2a0f0 6d 32 28 69 74 65 72 2c 20 63 78 2c 20 63 79 29  m2(iter, cx, cy)
2a100 20 41 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54   AS (.    SELECT
2a110 20 6d 61 78 28 69 74 65 72 29 2c 20 63 78 2c 20   max(iter), cx, 
2a120 63 79 20 46 52 4f 4d 20 6d 20 47 52 4f 55 50 20  cy FROM m GROUP 
2a130 42 59 20 63 78 2c 20 63 79 0a 20 20 29 2c 0a 20  BY cx, cy.  ),. 
2a140 20 61 28 74 29 20 41 53 20 28 0a 20 20 20 20 53   a(t) AS (.    S
2a150 45 4c 45 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63  ELECT group_conc
2a160 61 74 28 20 73 75 62 73 74 72 28 27 20 2e 2b 2a  at( substr(' .+*
2a170 23 27 2c 20 31 2b 6d 69 6e 28 69 74 65 72 2f 37  #', 1+min(iter/7
2a180 2c 34 29 2c 20 31 29 2c 20 27 27 29 20 0a 20 20  ,4), 1), '') .  
2a190 20 20 46 52 4f 4d 20 6d 32 20 47 52 4f 55 50 20    FROM m2 GROUP 
2a1a0 42 59 20 63 79 0a 20 20 29 0a 53 45 4c 45 43 54  BY cy.  ).SELECT
2a1b0 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28 72 74   group_concat(rt
2a1c0 72 69 6d 28 74 29 2c 78 27 30 61 27 29 20 46 52  rim(t),x'0a') FR
2a1d0 4f 4d 20 61 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  OM a;.</pre></bl
2a1e0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e  ockquote>..<p>In
2a1f0 20 74 68 69 73 20 71 75 65 72 79 2c 20 74 68 65   this query, the
2a200 20 22 78 61 78 69 73 22 20 61 6e 64 20 22 79 61   "xaxis" and "ya
2a210 78 69 73 22 20 43 54 45 73 20 64 65 66 69 6e 65  xis" CTEs define
2a220 20 74 68 65 20 67 72 69 64 20 6f 66 20 70 6f 69   the grid of poi
2a230 6e 74 73 20 66 6f 72 0a 77 68 69 63 68 20 74 68  nts for.which th
2a240 65 20 4d 61 6e 64 65 6c 62 72 6f 74 20 53 65 74  e Mandelbrot Set
2a250 20 77 69 6c 6c 20 62 65 20 61 70 70 72 6f 78 69   will be approxi
2a260 6d 61 74 65 64 2e 20 20 45 61 63 68 20 72 6f 77  mated.  Each row
2a270 20 69 6e 20 74 68 65 0a 22 6d 28 69 74 65 72 2c   in the."m(iter,
2a280 63 78 2c 63 79 2c 78 2c 79 29 22 20 43 54 45 20  cx,cy,x,y)" CTE 
2a290 6d 65 61 6e 73 20 74 68 61 74 20 61 66 74 65 72  means that after
2a2a0 20 22 69 74 65 72 22 20 69 74 65 72 61 74 69 6f   "iter" iteratio
2a2b0 6e 73 2c 20 74 68 65 20 4d 61 6e 64 65 6c 62 72  ns, the Mandelbr
2a2c0 6f 74 0a 69 74 65 72 61 74 69 6f 6e 20 73 74 61  ot.iteration sta
2a2d0 72 74 69 6e 67 20 61 74 20 63 78 2c 63 79 20 68  rting at cx,cy h
2a2e0 61 73 20 72 65 61 63 68 65 64 20 70 6f 69 6e 74  as reached point
2a2f0 20 78 2c 79 2e 20 20 54 68 65 20 6e 75 6d 62 65   x,y.  The numbe
2a300 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 0a  r of iterations.
2a310 69 6e 20 74 68 69 73 20 65 78 61 6d 70 6c 65 20  in this example 
2a320 69 73 20 6c 69 6d 69 74 65 64 20 74 6f 20 32 38  is limited to 28
2a330 20 28 77 68 69 63 68 20 73 65 76 65 72 65 6c 79   (which severely
2a340 20 6c 69 6d 69 74 73 20 74 68 65 20 72 65 73 6f   limits the reso
2a350 6c 75 74 69 6f 6e 20 6f 66 0a 74 68 65 20 63 6f  lution of.the co
2a360 6d 70 75 74 61 74 69 6f 6e 2c 20 62 75 74 20 69  mputation, but i
2a370 73 20 73 75 66 66 69 63 69 65 6e 74 20 66 6f 72  s sufficient for
2a380 20 6c 6f 77 2d 72 65 73 6f 6c 75 74 69 6f 6e 20   low-resolution 
2a390 41 53 43 49 49 2d 61 72 74 20 6f 75 74 70 75 74  ASCII-art output
2a3a0 29 2e 0a 54 68 65 20 22 6d 32 28 69 74 65 72 2c  )..The "m2(iter,
2a3b0 63 78 2c 63 79 29 22 20 43 54 45 20 68 6f 6c 64  cx,cy)" CTE hold
2a3c0 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
2a3d0 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
2a3e0 6e 73 20 72 65 61 63 68 65 64 20 77 68 65 6e 0a  ns reached when.
2a3f0 73 74 61 72 74 69 6e 67 20 61 74 20 70 6f 69 6e  starting at poin
2a400 74 20 63 78 2c 63 79 2e 0a 46 69 6e 61 6c 6c 79  t cx,cy..Finally
2a410 2c 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68  , each row in th
2a420 65 20 22 61 28 74 29 22 20 43 54 45 20 68 6f 6c  e "a(t)" CTE hol
2a430 64 73 20 61 20 73 74 72 69 6e 67 20 0a 77 68 69  ds a string .whi
2a440 63 68 20 69 73 20 61 20 73 69 6e 67 6c 65 20 6c  ch is a single l
2a450 69 6e 65 20 6f 66 20 74 68 65 20 6f 75 74 70 75  ine of the outpu
2a460 74 20 41 53 43 49 49 2d 61 72 74 2e 0a 54 68 65  t ASCII-art..The
2a470 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
2a480 74 20 61 74 20 74 68 65 20 65 6e 64 20 6a 75 73  t at the end jus
2a490 74 20 71 75 65 72 69 65 73 20 74 68 65 20 22 61  t queries the "a
2a4a0 22 20 43 54 45 20 74 6f 0a 72 65 74 72 69 65 76  " CTE to.retriev
2a4b0 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 41  e all lines of A
2a4c0 53 43 49 49 2d 61 72 74 2c 20 6f 6e 65 20 62 79  SCII-art, one by
2a4d0 20 6f 6e 65 2e 0a 0a 3c 70 3e 52 75 6e 6e 69 6e   one...<p>Runnin
2a4e0 67 20 74 68 65 20 71 75 65 72 79 20 61 62 6f 76  g the query abov
2a4f0 65 20 69 6e 20 61 6e 20 53 51 4c 69 74 65 20 5b  e in an SQLite [
2a500 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65  command-line she
2a510 6c 6c 5d 20 72 65 73 75 6c 74 73 0a 69 6e 20 74  ll] results.in t
2a520 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 75 74  he following out
2a530 70 75 74 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  put:..<blockquot
2a540 65 3e 3c 70 72 65 3e 0a 20 20 20 20 20 20 20 20  e><pre>.        
2a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a560 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e              ....
2a570 23 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #.              
2a580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a590 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20 20 20       ..#*...    
2a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b               ..+
2a5c0 23 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20  ####+..         
2a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5e0 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 2e     .......+####.
2a5f0 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20 20 20  ...   +.        
2a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a610 20 20 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23     ..##+*#######
2a620 23 23 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20  ###+.++++.      
2a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a640 20 20 20 20 2e 2b 2e 23 23 23 23 23 23 23 23 23      .+.#########
2a650 23 23 23 23 23 23 23 23 23 2b 2e 0a 20 20 20 20  #########+..    
2a660 20 20 20 20 20 20 20 20 20 20 2e 2e 2e 2e 2e 2e            ......
2a670 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23 23 23 23 23  .......+########
2a680 23 23 23 23 23 23 23 23 23 23 23 2b 2e 2b 0a 20  ###########+.+. 
2a690 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b               ..+
2a6a0 2b 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23  +..#.....*######
2a6b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b  ###############+
2a6c0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  ..             .
2a6d0 2e 2e 2b 23 23 23 23 23 23 23 2b 2b 23 23 23 23  ..+#######++####
2a6e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a6f0 23 23 23 2e 0a 20 20 20 20 20 20 20 20 20 20 2e  ###..          .
2a700 2e 2e 2e 2b 2a 23 23 23 23 23 23 23 23 23 23 23  ...+*###########
2a710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a720 23 23 23 23 23 2e 0a 20 23 23 23 23 23 23 23 23  #####.. ########
2a730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a750 23 23 23 23 23 2e 2e 2e 0a 20 20 20 20 20 20 20  #####....       
2a760 20 20 20 2e 2e 2e 2e 2b 2a 23 23 23 23 23 23 23     ....+*#######
2a770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a780 23 23 23 23 23 23 23 23 23 2e 0a 20 20 20 20 20  #########..     
2a790 20 20 20 20 20 20 20 20 2e 2e 2e 2b 23 23 23 23          ...+####
2a7a0 23 23 23 2b 2b 23 23 23 23 23 23 23 23 23 23 23  ###++###########
2a7b0 23 23 23 23 23 23 23 23 23 23 23 23 2e 0a 20 20  ############..  
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 2b              ..++
2a7d0 2e 2e 23 2e 2e 2e 2e 2e 2a 23 23 23 23 23 23 23  ..#.....*#######
2a7e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2b 2e  ##############+.
2a7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e  .              .
2a800 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23  ............+###
2a810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a820 2b 2e 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +.+.            
2a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 2b                .+
2a840 2e 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
2a850 23 23 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20  ###+..          
2a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a870 20 2e 2e 23 23 2b 2a 23 23 23 23 23 23 23 23 23   ..##+*#########
2a880 23 2b 2e 2b 2b 2b 2b 0a 20 20 20 20 20 20 20 20  #+.++++.        
2a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8a0 20 20 20 20 2e 2e 2e 2e 2e 2e 2e 2b 23 23 23 23      .......+####
2a8b0 2e 2e 2e 2e 20 20 20 2b 0a 20 20 20 20 20 20 20  ....   +.       
2a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8d0 20 20 20 20 20 20 20 20 20 20 2e 2e 2b 23 23 23            ..+###
2a8e0 23 2b 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  #+..            
2a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a900 20 20 20 20 20 20 20 2e 2e 23 2a 2e 2e 0a 20 20         ..#*...  
2a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a930 20 20 2e 2e 2e 2e 23 0a 20 20 20 20 20 20 20 20    ....#.        
2a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a950 20 20 20 20 20 20 20 20 20 20 20 20 2b 2e 0a 3c              +..<
2a960 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
2a970 65 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  e>..<tcl>hd_frag
2a980 6d 65 6e 74 20 73 75 64 6f 6b 75 20 7b 73 6f 6c  ment sudoku {sol
2a990 76 65 20 53 75 64 6f 6b 75 20 70 75 7a 7a 6c 65  ve Sudoku puzzle
2a9a0 73 7d 20 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 69  s} </tcl>.<p>Thi
2a9b0 73 20 6e 65 78 74 20 71 75 65 72 79 20 73 6f 6c  s next query sol
2a9c0 76 65 73 20 61 20 53 75 64 6f 6b 75 20 70 75 7a  ves a Sudoku puz
2a9d0 7a 6c 65 2e 20 20 54 68 65 20 73 74 61 74 65 20  zle.  The state 
2a9e0 6f 66 20 74 68 65 20 70 75 7a 7a 6c 65 20 69 73  of the puzzle is
2a9f0 0a 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 38  .defined by an 8
2aa00 31 2d 63 68 61 72 61 63 74 65 72 20 73 74 72 69  1-character stri
2aa10 6e 67 20 66 6f 72 6d 65 64 20 62 79 20 72 65 61  ng formed by rea
2aa20 64 69 6e 67 20 65 6e 74 72 69 65 73 20 66 72 6f  ding entries fro
2aa30 6d 20 74 68 65 0a 70 75 7a 7a 6c 65 20 62 6f 78  m the.puzzle box
2aa40 20 72 6f 77 20 62 79 20 72 6f 77 20 66 72 6f 6d   row by row from
2aa50 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 20 61   left to right a
2aa60 6e 64 20 74 68 65 6e 20 66 72 6f 6d 20 74 6f 70  nd then from top
2aa70 20 74 6f 20 62 6f 74 74 6f 6d 2e 0a 42 6c 61 6e   to bottom..Blan
2aa80 6b 20 73 71 75 61 72 65 73 20 69 6e 20 74 68 65  k squares in the
2aa90 20 70 75 7a 7a 6c 65 20 61 72 65 20 64 65 6e 6f   puzzle are deno
2aaa0 74 65 64 20 62 79 20 61 20 22 2e 22 20 63 68 61  ted by a "." cha
2aab0 72 61 63 74 65 72 2e 20 20 0a 54 68 75 73 20 74  racter.  .Thus t
2aac0 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 3a  he input string:
2aad0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35  ..<blockquote>.5
2aae0 33 2e 2e 37 2e 2e 2e 2e 36 2e 2e 31 39 35 2e 2e  3..7....6..195..
2aaf0 2e 2e 39 38 2e 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e  ..98....6.8...6.
2ab00 2e 2e 33 34 2e 2e 38 2e 33 2e 2e 31 37 2e 2e 2e  ..34..8.3..17...
2ab10 32 2e 2e 2e 36 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e  2...6.6....28...
2ab20 2e 34 31 39 2e 2e 35 2e 2e 2e 2e 38 2e 2e 37 39  .419..5....8..79
2ab30 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  .</blockquote>..
2ab40 3c 70 3e 43 6f 72 72 65 73 70 6f 6e 64 73 20 74  <p>Corresponds t
2ab50 6f 20 61 20 70 75 7a 7a 6c 65 20 6c 69 6b 65 20  o a puzzle like 
2ab60 74 68 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  this:..<blockquo
2ab70 74 65 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  te>.<table borde
2ab80 72 3d 22 31 22 20 63 65 6c 6c 70 61 64 64 69 6e  r="1" cellpaddin
2ab90 67 3d 22 35 22 3e 0a 3c 74 72 3e 3c 74 64 3e 35  g="5">.<tr><td>5
2aba0 3c 74 64 3e 33 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>3<td> <td> <
2abb0 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e 20 3c 74  td>7<td> <td> <t
2abc0 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64 3e  d> <td>.<tr><td>
2abd0 36 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31  6<td> <td> <td>1
2abe0 3c 74 64 3e 39 3c 74 64 3e 35 3c 74 64 3e 20 3c  <td>9<td>5<td> <
2abf0 74 64 3e 20 3c 74 64 3e 0a 3c 74 72 3e 3c 74 64  td> <td>.<tr><td
2ac00 3e 20 3c 74 64 3e 39 3c 74 64 3e 38 3c 74 64 3e  > <td>9<td>8<td>
2ac10 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20   <td> <td> <td> 
2ac20 3c 74 64 3e 36 3c 74 64 3e 0a 3c 74 72 3e 3c 74  <td>6<td>.<tr><t
2ac30 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>8<td> <td> <td
2ac40 3e 20 3c 74 64 3e 36 3c 74 64 3e 20 3c 74 64 3e  > <td>6<td> <td>
2ac50 20 3c 74 64 3e 20 3c 74 64 3e 33 0a 3c 74 72 3e   <td> <td>3.<tr>
2ac60 3c 74 64 3e 34 3c 74 64 3e 20 3c 74 64 3e 20 3c  <td>4<td> <td> <
2ac70 74 64 3e 38 3c 74 64 3e 20 3c 74 64 3e 33 3c 74  td>8<td> <td>3<t
2ac80 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 31 0a 3c 74  d> <td> <td>1.<t
2ac90 72 3e 3c 74 64 3e 37 3c 74 64 3e 20 3c 74 64 3e  r><td>7<td> <td>
2aca0 20 3c 74 64 3e 20 3c 74 64 3e 32 3c 74 64 3e 20   <td> <td>2<td> 
2acb0 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 36 0a  <td> <td> <td>6.
2acc0 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 36 3c 74  <tr><td> <td>6<t
2acd0 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d> <td> <td> <td
2ace0 3e 20 3c 74 64 3e 32 3c 74 64 3e 38 3c 74 64 3e  > <td>2<td>8<td>
2acf0 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e 20 3c  .<tr><td> <td> <
2ad00 74 64 3e 20 3c 74 64 3e 34 3c 74 64 3e 31 3c 74  td> <td>4<td>1<t
2ad10 64 3e 39 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64  d>9<td> <td> <td
2ad20 3e 35 0a 3c 74 72 3e 3c 74 64 3e 20 3c 74 64 3e  >5.<tr><td> <td>
2ad30 20 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 38   <td> <td> <td>8
2ad40 3c 74 64 3e 20 3c 74 64 3e 20 3c 74 64 3e 37 3c  <td> <td> <td>7<
2ad50 74 64 3e 39 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  td>9.</table>.</
2ad60 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
2ad70 54 68 69 73 20 69 73 20 74 68 65 20 71 75 65 72  This is the quer
2ad80 79 20 74 68 61 74 20 73 6f 6c 76 65 73 20 74 68  y that solves th
2ad90 65 20 70 75 7a 7a 6c 65 3a 0a 0a 3c 62 6c 6f 63  e puzzle:..<bloc
2ada0 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 57 49 54  kquote><pre>.WIT
2adb0 48 20 52 45 43 55 52 53 49 56 45 0a 20 20 69 6e  H RECURSIVE.  in
2adc0 70 75 74 28 73 75 64 29 20 41 53 20 28 0a 20 20  put(sud) AS (.  
2add0 20 20 56 41 4c 55 45 53 28 27 35 33 2e 2e 37 2e    VALUES('53..7.
2ade0 2e 2e 2e 36 2e 2e 31 39 35 2e 2e 2e 2e 39 38 2e  ...6..195....98.
2adf0 2e 2e 2e 36 2e 38 2e 2e 2e 36 2e 2e 2e 33 34 2e  ...6.8...6...34.
2ae00 2e 38 2e 33 2e 2e 31 37 2e 2e 2e 32 2e 2e 2e 36  .8.3..17...2...6
2ae10 2e 36 2e 2e 2e 2e 32 38 2e 2e 2e 2e 34 31 39 2e  .6....28....419.
2ae20 2e 35 2e 2e 2e 2e 38 2e 2e 37 39 27 29 0a 20 20  .5....8..79').  
2ae30 29 2c 0a 20 20 64 69 67 69 74 73 28 7a 2c 20 6c  ),.  digits(z, l
2ae40 70 29 20 41 53 20 28 0a 20 20 20 20 56 41 4c 55  p) AS (.    VALU
2ae50 45 53 28 27 31 27 2c 20 31 29 0a 20 20 20 20 55  ES('1', 1).    U
2ae60 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 0a  NION ALL SELECT.
2ae70 20 20 20 20 43 41 53 54 28 6c 70 2b 31 20 41 53      CAST(lp+1 AS
2ae80 20 54 45 58 54 29 2c 20 6c 70 2b 31 20 46 52 4f   TEXT), lp+1 FRO
2ae90 4d 20 64 69 67 69 74 73 20 57 48 45 52 45 20 6c  M digits WHERE l
2aea0 70 26 6c 74 3b 39 0a 20 20 29 2c 0a 20 20 78 28  p&lt;9.  ),.  x(
2aeb0 73 2c 20 69 6e 64 29 20 41 53 20 28 0a 20 20 20  s, ind) AS (.   
2aec0 20 53 45 4c 45 43 54 20 73 75 64 2c 20 69 6e 73   SELECT sud, ins
2aed0 74 72 28 73 75 64 2c 20 27 2e 27 29 20 46 52 4f  tr(sud, '.') FRO
2aee0 4d 20 69 6e 70 75 74 0a 20 20 20 20 55 4e 49 4f  M input.    UNIO
2aef0 4e 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54  N ALL.    SELECT
2af00 0a 20 20 20 20 20 20 73 75 62 73 74 72 28 73 2c  .      substr(s,
2af10 20 31 2c 20 69 6e 64 2d 31 29 20 7c 7c 20 7a 20   1, ind-1) || z 
2af20 7c 7c 20 73 75 62 73 74 72 28 73 2c 20 69 6e 64  || substr(s, ind
2af30 2b 31 29 2c 0a 20 20 20 20 20 20 69 6e 73 74 72  +1),.      instr
2af40 28 20 73 75 62 73 74 72 28 73 2c 20 31 2c 20 69  ( substr(s, 1, i
2af50 6e 64 2d 31 29 20 7c 7c 20 7a 20 7c 7c 20 73 75  nd-1) || z || su
2af60 62 73 74 72 28 73 2c 20 69 6e 64 2b 31 29 2c 20  bstr(s, ind+1), 
2af70 27 2e 27 20 29 0a 20 20 20 20 20 46 52 4f 4d 20  '.' ).     FROM 
2af80 78 2c 20 64 69 67 69 74 73 20 41 53 20 7a 0a 20  x, digits AS z. 
2af90 20 20 20 57 48 45 52 45 20 69 6e 64 3e 30 0a 20     WHERE ind>0. 
2afa0 20 20 20 20 20 41 4e 44 20 4e 4f 54 20 45 58 49       AND NOT EXI
2afb0 53 54 53 20 28 0a 20 20 20 20 20 20 20 20 20 20  STS (.          
2afc0 20 20 53 45 4c 45 43 54 20 31 0a 20 20 20 20 20    SELECT 1.     
2afd0 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 64 69           FROM di
2afe0 67 69 74 73 20 41 53 20 6c 70 0a 20 20 20 20 20  gits AS lp.     
2aff0 20 20 20 20 20 20 20 20 57 48 45 52 45 20 7a 2e          WHERE z.
2b000 7a 20 3d 20 73 75 62 73 74 72 28 73 2c 20 28 28  z = substr(s, ((
2b010 69 6e 64 2d 31 29 2f 39 29 2a 39 20 2b 20 6c 70  ind-1)/9)*9 + lp
2b020 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20  , 1).           
2b030 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20 73 75       OR z.z = su
2b040 62 73 74 72 28 73 2c 20 28 28 69 6e 64 2d 31 29  bstr(s, ((ind-1)
2b050 25 39 29 20 2b 20 28 6c 70 2d 31 29 2a 39 20 2b  %9) + (lp-1)*9 +
2b060 20 31 2c 20 31 29 0a 20 20 20 20 20 20 20 20 20   1, 1).         
2b070 20 20 20 20 20 20 20 4f 52 20 7a 2e 7a 20 3d 20         OR z.z = 
2b080 73 75 62 73 74 72 28 73 2c 20 28 28 28 69 6e 64  substr(s, (((ind
2b090 2d 31 29 2f 33 29 20 25 20 33 29 20 2a 20 33 0a  -1)/3) % 3) * 3.
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0b0 20 20 20 20 20 20 20 20 2b 20 28 28 69 6e 64 2d          + ((ind-
2b0c0 31 29 2f 32 37 29 20 2a 20 32 37 20 2b 20 6c 70  1)/27) * 27 + lp
2b0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b0e0 20 20 20 20 20 20 20 20 20 2b 20 28 28 6c 70 2d           + ((lp-
2b0f0 31 29 20 2f 20 33 29 20 2a 20 36 2c 20 31 29 0a  1) / 3) * 6, 1).
2b100 20 20 20 20 20 20 20 20 20 29 0a 20 20 29 0a 53           ).  ).S
2b110 45 4c 45 43 54 20 73 20 46 52 4f 4d 20 78 20 57  ELECT s FROM x W
2b120 48 45 52 45 20 69 6e 64 3d 30 3b 0a 3c 2f 70 72  HERE ind=0;.</pr
2b130 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
2b140 0a 3c 70 3e 54 68 65 20 22 69 6e 70 75 74 22 20  .<p>The "input" 
2b150 43 54 45 20 64 65 66 69 6e 65 73 20 74 68 65 20  CTE defines the 
2b160 69 6e 70 75 74 20 70 75 7a 7a 6c 65 2e 0a 54 68  input puzzle..Th
2b170 65 20 22 64 69 67 69 74 73 22 20 43 54 45 20 64  e "digits" CTE d
2b180 65 66 69 6e 65 73 20 61 20 74 61 62 6c 65 20 74  efines a table t
2b190 68 61 74 20 68 6f 6c 64 73 20 61 6c 6c 20 64 69  hat holds all di
2b1a0 67 69 74 73 20 62 65 74 77 65 65 6e 20 31 20 61  gits between 1 a
2b1b0 6e 64 20 39 2e 0a 54 68 65 20 77 6f 72 6b 20 6f  nd 9..The work o
2b1c0 66 20 73 6f 6c 76 69 6e 67 20 74 68 65 20 70 75  f solving the pu
2b1d0 7a 7a 6c 65 20 69 73 20 75 6e 64 65 72 74 61 6b  zzle is undertak
2b1e0 65 6e 20 62 79 20 74 68 65 20 22 78 22 20 43 54  en by the "x" CT
2b1f0 45 2e 0a 41 6e 20 65 6e 74 72 79 20 69 6e 20 78  E..An entry in x
2b200 28 73 2c 69 6e 64 29 20 6d 65 61 6e 73 20 74 68  (s,ind) means th
2b210 61 74 20 74 68 65 20 38 31 2d 63 68 61 72 61 63  at the 81-charac
2b220 74 65 72 20 73 74 72 69 6e 67 20 22 73 22 20 69  ter string "s" i
2b230 73 20 61 20 76 61 6c 69 64 0a 73 75 64 6f 6b 75  s a valid.sudoku
2b240 20 70 75 7a 7a 6c 65 20 28 69 74 20 68 61 73 20   puzzle (it has 
2b250 6e 6f 20 63 6f 6e 66 6c 69 63 74 73 29 20 61 6e  no conflicts) an
2b260 64 20 74 68 61 74 20 74 68 65 20 66 69 72 73 74  d that the first
2b270 20 75 6e 6b 6e 6f 77 6e 20 63 68 61 72 61 63 74   unknown charact
2b280 65 72 0a 69 73 20 61 74 20 70 6f 73 69 74 69 6f  er.is at positio
2b290 6e 20 22 69 6e 64 22 2c 20 6f 72 20 69 6e 64 3d  n "ind", or ind=
2b2a0 3d 30 20 69 66 20 61 6c 6c 20 63 68 61 72 61 63  =0 if all charac
2b2b0 74 65 72 20 70 6f 73 69 74 69 6f 6e 73 20 61 72  ter positions ar
2b2c0 65 20 66 69 6c 6c 65 64 20 69 6e 2e 0a 54 68 65  e filled in..The
2b2d0 20 67 6f 61 6c 2c 20 74 68 65 6e 2c 20 69 73 20   goal, then, is 
2b2e0 74 6f 20 63 6f 6d 70 75 74 65 20 65 6e 74 72 69  to compute entri
2b2f0 65 73 20 66 6f 72 20 22 78 22 20 77 69 74 68 20  es for "x" with 
2b300 61 6e 20 22 69 6e 64 22 20 6f 66 20 30 2e 0a 0a  an "ind" of 0...
2b310 3c 70 3e 54 68 65 20 73 6f 6c 76 65 72 20 77 6f  <p>The solver wo
2b320 72 6b 73 20 62 79 20 61 64 64 69 6e 67 20 6e 65  rks by adding ne
2b330 77 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65  w entries to the
2b340 20 22 78 22 20 72 65 63 75 72 73 69 76 65 20 74   "x" recursive t
2b350 61 62 6c 65 2e 0a 47 69 76 65 6e 20 70 72 69 6f  able..Given prio
2b360 72 20 65 6e 74 72 69 65 73 2c 20 74 68 65 20 72  r entries, the r
2b370 65 63 75 72 73 69 76 65 2d 73 65 6c 65 63 74 20  ecursive-select 
2b380 74 72 69 65 73 20 74 6f 20 66 69 6c 6c 20 69 6e  tries to fill in
2b390 20 61 20 73 69 6e 67 6c 65 20 6e 65 77 0a 70 6f   a single new.po
2b3a0 73 69 74 69 6f 6e 20 77 69 74 68 20 61 6c 6c 20  sition with all 
2b3b0 76 61 6c 75 65 73 20 62 65 74 77 65 65 6e 20 31  values between 1
2b3c0 20 61 6e 64 20 39 20 74 68 61 74 20 61 63 74 75   and 9 that actu
2b3d0 61 6c 6c 79 20 77 6f 72 6b 20 69 6e 20 74 68 61  ally work in tha
2b3e0 74 0a 70 6f 73 69 74 69 6f 6e 2e 20 20 54 68 65  t.position.  The
2b3f0 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 22 4e 4f   complicated "NO
2b400 54 20 45 58 49 53 54 53 22 20 73 75 62 71 75 65  T EXISTS" subque
2b410 72 79 20 69 73 20 74 68 65 20 6d 61 67 69 63 20  ry is the magic 
2b420 74 68 61 74 0a 66 69 67 75 72 65 73 20 6f 75 74  that.figures out
2b430 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
2b440 65 61 63 68 20 63 61 6e 64 69 64 61 74 65 20 22  each candidate "
2b450 73 22 20 73 74 72 69 6e 67 20 69 73 20 61 20 76  s" string is a v
2b460 61 6c 69 64 0a 73 75 64 6f 6b 75 20 70 75 7a 7a  alid.sudoku puzz
2b470 6c 65 20 6f 72 20 6e 6f 74 2e 0a 0a 3c 70 3e 54  le or not...<p>T
2b480 68 65 20 66 69 6e 61 6c 20 61 6e 73 77 65 72 20  he final answer 
2b490 69 73 20 66 6f 75 6e 64 20 62 79 20 6c 6f 6f 6b  is found by look
2b4a0 69 6e 67 20 66 6f 72 20 61 20 73 74 72 69 6e 67  ing for a string
2b4b0 20 77 69 74 68 20 69 6e 64 3d 3d 30 2e 0a 49 66   with ind==0..If
2b4c0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73 75   the original su
2b4d0 64 6f 6b 75 20 70 72 6f 62 6c 65 6d 20 64 69 64  doku problem did
2b4e0 20 6e 6f 74 20 68 61 76 65 20 61 20 75 6e 69 71   not have a uniq
2b4f0 75 65 20 73 6f 6c 75 74 69 6f 6e 2c 20 74 68 65  ue solution, the
2b500 6e 0a 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c  n.the query will
2b510 20 72 65 74 75 72 6e 20 61 6c 6c 20 70 6f 73 73   return all poss
2b520 69 62 6c 65 20 73 6f 6c 75 74 69 6f 6e 73 2e 20  ible solutions. 
2b530 20 49 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   If the original
2b540 20 70 72 6f 62 6c 65 6d 0a 77 61 73 20 75 6e 73   problem.was uns
2b550 6f 6c 76 61 62 6c 65 2c 20 74 68 65 6e 20 6e 6f  olvable, then no
2b560 20 72 6f 77 73 20 77 69 6c 6c 20 62 65 20 72 65   rows will be re
2b570 74 75 72 6e 65 64 2e 20 20 49 6e 20 74 68 69 73  turned.  In this
2b580 20 63 61 73 65 2c 20 74 68 65 20 75 6e 69 71 75   case, the uniqu
2b590 65 0a 61 6e 73 77 65 72 20 69 73 3a 0a 0a 3c 62  e.answer is:..<b
2b5a0 6c 6f 63 6b 71 75 6f 74 65 3e 0a 35 33 34 36 37  lockquote>.53467
2b5b0 38 39 31 32 36 37 32 31 39 35 33 34 38 31 39 38  8912672195348198
2b5c0 33 34 32 35 36 37 38 35 39 37 36 31 34 32 33 34  3425678597614234
2b5d0 32 36 38 35 33 37 39 31 37 31 33 39 32 34 38 35  2685379171392485
2b5e0 36 39 36 31 35 33 37 32 38 34 32 38 37 34 31 39  6961537284287419
2b5f0 36 33 35 33 34 35 32 38 36 31 37 39 0a 3c 2f 62  635345286179.</b
2b600 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
2b610 68 65 20 73 6f 6c 75 74 69 6f 6e 20 77 61 73 20  he solution was 
2b620 63 6f 6d 70 75 74 65 64 20 69 6e 20 6c 65 73 73  computed in less
2b630 20 74 68 61 6e 20 33 30 30 20 6d 69 6c 6c 69 73   than 300 millis
2b640 65 63 6f 6e 64 73 20 6f 6e 20 61 20 6d 6f 64 65  econds on a mode
2b650 72 6e 0a 77 6f 72 6b 73 74 61 74 69 6f 6e 2e 0a  rn.workstation..
2b660 0a 3c 68 33 3e 4c 69 6d 69 74 61 74 69 6f 6e 73  .<h3>Limitations
2b670 20 41 6e 64 20 43 61 76 65 61 74 73 3c 2f 68 33   And Caveats</h3
2b680 3e 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a  >..<ul>.<li><p>.
2b690 54 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  The WITH clause 
2b6a0 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 77  cannot be used w
2b6b0 69 74 68 69 6e 20 61 20 5b 43 52 45 41 54 45 20  ithin a [CREATE 
2b6c0 54 52 49 47 47 45 52 5d 2e 0a 3c 6c 69 3e 3c 70  TRIGGER]..<li><p
2b6d0 3e 0a 54 68 65 20 57 49 54 48 20 63 6c 61 75 73  >.The WITH claus
2b6e0 65 20 6d 75 73 74 20 61 70 70 65 61 72 20 61 74  e must appear at
2b6f0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
2b700 66 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 5b 53  f a top-level [S
2b710 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65 6e 74  ELECT] statement
2b720 0a 6f 72 20 61 74 20 74 68 65 20 62 65 67 69 6e  .or at the begin
2b730 6e 69 6e 67 20 6f 66 20 61 20 73 75 62 71 75 65  ning of a subque
2b740 72 79 2e 20 20 54 68 65 20 57 49 54 48 20 63 6c  ry.  The WITH cl
2b750 61 75 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 70  ause cannot be p
2b760 72 65 70 65 6e 64 65 64 20 74 6f 0a 74 68 65 20  repended to.the 
2b770 73 65 63 6f 6e 64 20 6f 72 20 73 75 62 73 65 71  second or subseq
2b780 75 65 6e 74 20 53 45 4c 45 43 54 20 73 74 61 74  uent SELECT stat
2b790 65 6d 65 6e 74 20 6f 66 20 61 20 5b 63 6f 6d 70  ement of a [comp
2b7a0 6f 75 6e 64 20 73 65 6c 65 63 74 5d 2e 0a 3c 6c  ound select]..<l
2b7b0 69 3e 3c 70 3e 0a 54 68 65 20 53 51 4c 3a 31 39  i><p>.The SQL:19
2b7c0 39 39 20 73 70 65 63 20 72 65 71 75 69 72 65 73  99 spec requires
2b7d0 20 74 68 61 74 20 74 68 65 20 52 45 43 55 52 53   that the RECURS
2b7e0 49 56 45 20 6b 65 79 77 6f 72 64 20 66 6f 6c 6c  IVE keyword foll
2b7f0 6f 77 20 57 49 54 48 20 69 6e 20 61 6e 79 0a 57  ow WITH in any.W
2b800 49 54 48 20 63 6c 61 75 73 65 20 74 68 61 74 20  ITH clause that 
2b810 69 6e 63 6c 75 64 65 73 20 61 20 72 65 63 75 72  includes a recur
2b820 73 69 76 65 20 63 6f 6d 6d 6f 6e 20 74 61 62 6c  sive common tabl
2b830 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 20 48  e expression.  H
2b840 6f 77 65 76 65 72 2c 20 66 6f 72 0a 63 6f 6d 70  owever, for.comp
2b850 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 53  atibility with S
2b860 71 6c 53 65 72 76 65 72 20 61 6e 64 20 4f 72 61  qlServer and Ora
2b870 63 6c 65 2c 20 53 51 4c 69 74 65 20 64 6f 65 73  cle, SQLite does
2b880 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 74 68 69   not enforce thi
2b890 73 20 72 75 6c 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c  s rule..</ul>..<
2b8a0 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
2b8b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b8c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b8d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b8e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b8f0 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 53 45 4c  ####.Section SEL
2b900 45 43 54 20 73 65 6c 65 63 74 20 7b 53 45 4c 45  ECT select {SELE
2b910 43 54 20 71 75 65 72 79 7d 0a 0a 52 65 63 75 72  CT query}..Recur
2b920 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61  siveBubbleDiagra
2b930 6d 20 73 65 6c 65 63 74 2d 73 74 6d 74 0a 3c 2f  m select-stmt.</
2b940 74 63 6c 3e 0a 0a 0a 3c 70 3e 54 68 65 20 53 45  tcl>...<p>The SE
2b950 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
2b960 73 20 75 73 65 64 20 74 6f 20 71 75 65 72 79 20  s used to query 
2b970 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
2b980 68 65 0a 72 65 73 75 6c 74 20 6f 66 20 61 20 53  he.result of a S
2b990 45 4c 45 43 54 20 69 73 20 7a 65 72 6f 20 6f 72  ELECT is zero or
2b9a0 20 6d 6f 72 65 20 72 6f 77 73 20 6f 66 20 64 61   more rows of da
2b9b0 74 61 20 77 68 65 72 65 20 65 61 63 68 20 72 6f  ta where each ro
2b9c0 77 0a 68 61 73 20 61 20 66 69 78 65 64 20 6e 75  w.has a fixed nu
2b9d0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 2e  mber of columns.
2b9e0 20 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65    A SELECT state
2b9f0 6d 65 6e 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61  ment does not ma
2ba00 6b 65 0a 61 6e 79 20 63 68 61 6e 67 65 73 20 74  ke.any changes t
2ba10 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  o the database..
2ba20 0a 3c 70 3e 54 68 65 20 22 5b 73 65 6c 65 63 74  .<p>The "[select
2ba30 2d 73 74 6d 74 5d 22 20 73 79 6e 74 61 78 20 64  -stmt]" syntax d
2ba40 69 61 67 72 61 6d 20 61 62 6f 76 65 20 61 74 74  iagram above att
2ba50 65 6d 70 74 73 20 74 6f 20 73 68 6f 77 20 61 73  empts to show as
2ba60 20 6d 75 63 68 20 6f 66 20 74 68 65 0a 53 45 4c   much of the.SEL
2ba70 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 73 79  ECT statement sy
2ba80 6e 74 61 78 20 61 73 20 70 6f 73 73 69 62 6c 65  ntax as possible
2ba90 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 64 69 61   in a single dia
2baa0 67 72 61 6d 2c 20 62 65 63 61 75 73 65 20 73 6f  gram, because so
2bab0 6d 65 20 72 65 61 64 65 72 73 0a 66 69 6e 64 20  me readers.find 
2bac0 74 68 61 74 20 68 65 6c 70 66 75 6c 2e 20 20 54  that helpful.  T
2bad0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 22 5b 66  he following "[f
2bae0 61 63 74 6f 72 65 64 2d 73 65 6c 65 63 74 2d 73  actored-select-s
2baf0 74 6d 74 5d 22 20 69 73 20 61 6e 20 61 6c 74 65  tmt]" is an alte
2bb00 72 6e 61 74 69 76 65 0a 73 79 6e 74 61 78 20 64  rnative.syntax d
2bb10 69 61 67 72 61 6d 73 20 74 68 61 74 20 65 78 70  iagrams that exp
2bb20 72 65 73 73 65 73 20 74 68 65 20 73 61 6d 65 20  resses the same 
2bb30 73 79 6e 74 61 78 20 62 75 74 20 74 72 69 65 73  syntax but tries
2bb40 20 74 6f 20 62 72 65 61 6b 20 74 68 65 20 73 79   to break the sy
2bb50 6e 74 61 78 20 0a 64 6f 77 6e 20 69 6e 74 6f 20  ntax .down into 
2bb60 73 6d 61 6c 6c 65 72 20 63 68 75 6e 6b 73 2e 0a  smaller chunks..
2bb70 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65  .<tcl>.Recursive
2bb80 42 75 62 62 6c 65 44 69 61 67 72 61 6d 20 2d 2d  BubbleDiagram --
2bb90 69 6e 69 74 69 61 6c 6c 79 2d 68 69 64 64 65 6e  initially-hidden
2bba0 20 66 61 63 74 6f 72 65 64 2d 73 65 6c 65 63 74   factored-select
2bbb0 2d 73 74 6d 74 20 73 65 6c 65 63 74 2d 63 6f 72  -stmt select-cor
2bbc0 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 4e 6f 74  e.</tcl>..<p>Not
2bbd0 65 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65  e that there are
2bbe0 20 70 61 74 68 73 20 74 68 72 6f 75 67 68 20 74   paths through t
2bbf0 68 65 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  he syntax diagra
2bc00 6d 73 20 74 68 61 74 0a 61 72 65 20 6e 6f 74 20  ms that.are not 
2bc10 61 6c 6c 6f 77 65 64 20 69 6e 20 70 72 61 63 74  allowed in pract
2bc20 69 63 65 2e 20 20 53 6f 6d 65 20 65 78 61 6d 70  ice.  Some examp
2bc30 6c 65 73 3a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 41 20  les:.<ul>.<li>A 
2bc40 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65 20  [VALUES] clause 
2bc50 63 61 6e 20 62 65 20 74 68 65 20 66 69 72 73 74  can be the first
2bc60 20 65 6c 65 6d 65 6e 74 20 69 6e 20 61 20 5b 63   element in a [c
2bc70 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 5d 0a  ompound SELECT].
2bc80 20 20 20 20 74 68 61 74 20 75 73 65 73 20 61 20      that uses a 
2bc90 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 2c 20 62  [WITH] clause, b
2bca0 75 74 20 61 20 5b 73 69 6d 70 6c 65 20 53 45 4c  ut a [simple SEL
2bcb0 45 43 54 5d 20 74 68 61 74 20 63 6f 6e 73 69 73  ECT] that consis
2bcc0 74 73 20 6f 66 0a 20 20 20 20 6a 75 73 74 20 61  ts of.    just a
2bcd0 20 5b 56 41 4c 55 45 53 5d 20 63 6c 61 75 73 65   [VALUES] clause
2bce0 20 63 61 6e 6e 6f 74 20 62 65 20 70 72 65 63 65   cannot be prece
2bcf0 64 65 64 20 62 79 20 61 20 5b 57 49 54 48 5d 20  ded by a [WITH] 
2bd00 63 6c 61 75 73 65 2e 0a 3c 6c 69 3e 54 68 65 20  clause..<li>The 
2bd10 5b 57 49 54 48 5d 20 63 6c 61 75 73 65 20 6d 75  [WITH] clause mu
2bd20 73 74 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20  st occur on the 
2bd30 66 69 72 73 74 20 53 45 4c 45 43 54 20 6f 66 20  first SELECT of 
2bd40 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  a [compound SELE
2bd50 43 54 5d 2e 0a 20 20 20 20 49 74 20 63 61 6e 6e  CT]..    It cann
2bd60 6f 74 20 66 6f 6c 6c 6f 77 20 61 20 5b 63 6f 6d  ot follow a [com
2bd70 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72 5d 2e  pound-operator].
2bd80 0a 3c 2f 75 6c 3e 0a 54 68 65 73 65 20 61 6e 64  .</ul>.These and
2bd90 20 6f 74 68 65 72 20 73 69 6d 69 6c 61 72 20 73   other similar s
2bda0 79 6e 74 61 78 20 72 65 73 74 72 69 63 74 69 6f  yntax restrictio
2bdb0 6e 73 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ns are described
2bdc0 20 69 6e 20 74 68 65 20 74 65 78 74 2e 0a 0a 3c   in the text...<
2bdd0 70 3e 54 68 65 20 53 45 4c 45 43 54 20 73 74 61  p>The SELECT sta
2bde0 74 65 6d 65 6e 74 20 69 73 20 74 68 65 20 6d 6f  tement is the mo
2bdf0 73 74 20 63 6f 6d 70 6c 69 63 61 74 65 64 20 63  st complicated c
2be00 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20 53 51  ommand in the SQ
2be10 4c 20 6c 61 6e 67 75 61 67 65 2e 0a 54 6f 20 6d  L language..To m
2be20 61 6b 65 20 74 68 65 20 64 65 73 63 72 69 70 74  ake the descript
2be30 69 6f 6e 20 65 61 73 69 65 72 20 74 6f 20 66 6f  ion easier to fo
2be40 6c 6c 6f 77 2c 20 73 6f 6d 65 20 6f 66 20 74 68  llow, some of th
2be50 65 20 70 61 73 73 61 67 65 73 20 62 65 6c 6f 77  e passages below
2be60 20 64 65 73 63 72 69 62 65 0a 74 68 65 20 77 61   describe.the wa
2be70 79 20 74 68 65 20 64 61 74 61 20 72 65 74 75 72  y the data retur
2be80 6e 65 64 20 62 79 20 61 20 53 45 4c 45 43 54 20  ned by a SELECT 
2be90 73 74 61 74 65 6d 65 6e 74 20 69 73 20 64 65 74  statement is det
2bea0 65 72 6d 69 6e 65 64 20 61 73 20 61 20 73 65 72  ermined as a ser
2beb0 69 65 73 20 6f 66 0a 73 74 65 70 73 2e 20 49 74  ies of.steps. It
2bec0 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
2bed0 20 6b 65 65 70 20 69 6e 20 6d 69 6e 64 20 74 68   keep in mind th
2bee0 61 74 20 74 68 69 73 20 69 73 20 70 75 72 65 6c  at this is purel
2bef0 79 20 69 6c 6c 75 73 74 72 61 74 69 76 65 20 2d  y illustrative -
2bf00 0a 69 6e 20 70 72 61 63 74 69 63 65 20 6e 65 69  .in practice nei
2bf10 74 68 65 72 20 53 51 4c 69 74 65 20 6e 6f 72 20  ther SQLite nor 
2bf20 61 6e 79 20 6f 74 68 65 72 20 53 51 4c 20 65 6e  any other SQL en
2bf30 67 69 6e 65 20 69 73 20 72 65 71 75 69 72 65 64  gine is required
2bf40 20 74 6f 20 66 6f 6c 6c 6f 77 20 0a 74 68 69 73   to follow .this
2bf50 20 6f 72 20 61 6e 79 20 6f 74 68 65 72 20 73 70   or any other sp
2bf60 65 63 69 66 69 63 20 70 72 6f 63 65 73 73 2e 0a  ecific process..
2bf70 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2bf80 74 20 73 69 6d 70 6c 65 73 65 6c 65 63 74 20 7b  t simpleselect {
2bf90 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 7d 3c 2f  simple SELECT}</
2bfa0 74 63 6c 3e 0a 3c 68 33 3e 53 69 6d 70 6c 65 20  tcl>.<h3>Simple 
2bfb0 53 65 6c 65 63 74 20 50 72 6f 63 65 73 73 69 6e  Select Processin
2bfc0 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63  g</h3>..<p>The c
2bfd0 6f 72 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  ore of a SELECT 
2bfe0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 20 22  statement is a "
2bff0 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 22 20 73  simple SELECT" s
2c000 68 6f 77 6e 20 62 79 20 74 68 65 0a 5b 73 65 6c  hown by the.[sel
2c010 65 63 74 2d 63 6f 72 65 5d 20 61 6e 64 20 5b 73  ect-core] and [s
2c020 69 6d 70 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d  imple-select-stm
2c030 74 5d 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  t] syntax diagra
2c040 6d 73 20 62 65 6c 6f 77 2e 20 20 0a 49 6e 20 70  ms below.  .In p
2c050 72 61 63 74 69 63 65 2c 20 6d 6f 73 74 20 53 45  ractice, most SE
2c060 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
2c070 61 72 65 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  are simple SELEC
2c080 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 0a 3c  T statements...<
2c090 74 63 6c 3e 0a 52 65 63 75 72 73 69 76 65 42 75  tcl>.RecursiveBu
2c0a0 62 62 6c 65 44 69 61 67 72 61 6d 20 73 69 6d 70  bbleDiagram simp
2c0b0 6c 65 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20 73  le-select-stmt s
2c0c0 65 6c 65 63 74 2d 63 6f 72 65 0a 3c 2f 74 63 6c  elect-core.</tcl
2c0d0 3e 0a 0a 3c 70 3e 47 65 6e 65 72 61 74 69 6e 67  >..<p>Generating
2c0e0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
2c0f0 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a  a simple SELECT.
2c100 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
2c110 73 65 6e 74 65 64 20 61 73 20 61 20 66 6f 75 72  sented as a four
2c120 20 73 74 65 70 20 70 72 6f 63 65 73 73 20 69 6e   step process in
2c130 20 74 68 65 20 64 65 73 63 72 69 70 74 69 6f 6e   the description
2c140 20 62 65 6c 6f 77 3a 0a 0a 3c 6f 6c 3e 0a 20 20   below:..<ol>.  
2c150 3c 6c 69 3e 20 3c 70 3e 5b 46 52 4f 4d 20 63 6c  <li> <p>[FROM cl
2c160 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67  ause] processing
2c170 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61  : The input data
2c180 20 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20   for the simple 
2c190 53 45 4c 45 43 54 20 69 73 0a 20 20 20 20 20 20  SELECT is.      
2c1a0 20 64 65 74 65 72 6d 69 6e 65 64 2e 20 54 68 65   determined. The
2c1b0 20 69 6e 70 75 74 20 64 61 74 61 20 69 73 20 65   input data is e
2c1c0 69 74 68 65 72 20 69 6d 70 6c 69 63 69 74 6c 79  ither implicitly
2c1d0 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 77 69   a single row wi
2c1e0 74 68 20 30 0a 20 20 20 20 20 20 20 63 6f 6c 75  th 0.       colu
2c1f0 6d 6e 73 20 28 69 66 20 74 68 65 72 65 20 69 73  mns (if there is
2c200 20 6e 6f 20 46 52 4f 4d 20 63 6c 61 75 73 65 29   no FROM clause)
2c210 20 6f 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65   or is determine
2c220 64 20 62 79 20 74 68 65 20 46 52 4f 4d 0a 20 20  d by the FROM.  
2c230 20 20 20 20 20 63 6c 61 75 73 65 2e 0a 20 20 3c       clause..  <
2c240 6c 69 3e 20 3c 70 3e 5b 57 48 45 52 45 20 63 6c  li> <p>[WHERE cl
2c250 61 75 73 65 5d 20 70 72 6f 63 65 73 73 69 6e 67  ause] processing
2c260 3a 20 54 68 65 20 69 6e 70 75 74 20 64 61 74 61  : The input data
2c270 20 69 73 20 66 69 6c 74 65 72 65 64 20 75 73 69   is filtered usi
2c280 6e 67 20 74 68 65 20 57 48 45 52 45 0a 20 20 20  ng the WHERE.   
2c290 20 20 20 20 63 6c 61 75 73 65 20 65 78 70 72 65      clause expre
2c2a0 73 73 69 6f 6e 2e 20 20 0a 20 20 3c 6c 69 3e 20  ssion.  .  <li> 
2c2b0 3c 70 3e 5b 47 52 4f 55 50 20 42 59 7c 47 52 4f  <p>[GROUP BY|GRO
2c2c0 55 50 20 42 59 2c 20 48 41 56 49 4e 47 20 61 6e  UP BY, HAVING an
2c2d0 64 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20  d result-column 
2c2e0 65 78 70 72 65 73 73 69 6f 6e 5d 20 70 72 6f 63  expression] proc
2c2f0 65 73 73 69 6e 67 3a 20 0a 20 20 20 20 20 20 20  essing: .       
2c300 54 68 65 20 73 65 74 20 6f 66 20 72 65 73 75 6c  The set of resul
2c310 74 20 72 6f 77 73 20 69 73 20 63 6f 6d 70 75 74  t rows is comput
2c320 65 64 20 62 79 20 61 67 67 72 65 67 61 74 69 6e  ed by aggregatin
2c330 67 20 74 68 65 20 64 61 74 61 20 61 63 63 6f 72  g the data accor
2c340 64 69 6e 67 20 74 6f 0a 20 20 20 20 20 20 20 61  ding to.       a
2c350 6e 79 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  ny GROUP BY clau
2c360 73 65 20 61 6e 64 20 63 61 6c 63 75 6c 61 74 69  se and calculati
2c370 6e 67 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  ng the result-se
2c380 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 66 6f  t expressions fo
2c390 72 20 74 68 65 0a 20 20 20 20 20 20 20 72 6f 77  r the.       row
2c3a0 73 20 6f 66 20 74 68 65 20 66 69 6c 74 65 72 65  s of the filtere
2c3b0 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 2e  d input dataset.
2c3c0 20 20 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5b 44 49    .  <li> <p>[DI
2c3d0 53 54 49 4e 43 54 7c 44 49 53 54 49 4e 43 54 2f  STINCT|DISTINCT/
2c3e0 41 4c 4c 20 6b 65 79 77 6f 72 64 5d 20 70 72 6f  ALL keyword] pro
2c3f0 63 65 73 73 69 6e 67 3a 20 49 66 20 74 68 65 20  cessing: If the 
2c400 71 75 65 72 79 20 69 73 20 61 20 22 53 45 4c 45  query is a "SELE
2c410 43 54 0a 20 20 20 20 20 20 20 44 49 53 54 49 4e  CT.       DISTIN
2c420 43 54 22 20 71 75 65 72 79 2c 20 64 75 70 6c 69  CT" query, dupli
2c430 63 61 74 65 20 72 6f 77 73 20 61 72 65 20 72 65  cate rows are re
2c440 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 73  moved from the s
2c450 65 74 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  et of result row
2c460 73 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 54 68 65  s..</ol>..<p>The
2c470 72 65 20 61 72 65 20 74 77 6f 20 74 79 70 65 73  re are two types
2c480 20 6f 66 20 73 69 6d 70 6c 65 20 53 45 4c 45 43   of simple SELEC
2c490 54 20 73 74 61 74 65 6d 65 6e 74 20 2d 20 61 67  T statement - ag
2c4a0 67 72 65 67 61 74 65 20 61 6e 64 20 0a 6e 6f 6e  gregate and .non
2c4b0 2d 61 67 67 72 65 67 61 74 65 20 71 75 65 72 69  -aggregate queri
2c4c0 65 73 2e 20 5e 41 20 73 69 6d 70 6c 65 20 53 45  es. ^A simple SE
2c4d0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69  LECT statement i
2c4e0 73 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 71  s an aggregate q
2c4f0 75 65 72 79 20 69 66 0a 69 74 20 63 6f 6e 74 61  uery if.it conta
2c500 69 6e 73 20 65 69 74 68 65 72 20 61 20 47 52 4f  ins either a GRO
2c510 55 50 20 42 59 20 63 6c 61 75 73 65 20 6f 72 20  UP BY clause or 
2c520 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
2c530 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 0a  egate functions.
2c540 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65  in the result-se
2c550 74 2e 20 5e 4f 74 68 65 72 77 69 73 65 2c 20 69  t. ^Otherwise, i
2c560 66 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43  f a simple SELEC
2c570 54 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 61 67  T contains no ag
2c580 67 72 65 67 61 74 65 0a 66 75 6e 63 74 69 6f 6e  gregate.function
2c590 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20  s or a GROUP BY 
2c5a0 63 6c 61 75 73 65 2c 20 69 74 20 69 73 20 61 20  clause, it is a 
2c5b0 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71 75  non-aggregate qu
2c5c0 65 72 79 2e 0a 0a 3c 70 3e 3c 62 3e 31 2e 20 44  ery...<p><b>1. D
2c5d0 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 6f 66 20  etermination of 
2c5e0 69 6e 70 75 74 20 64 61 74 61 20 28 46 52 4f 4d  input data (FROM
2c5f0 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73 69   clause processi
2c600 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ng).</b>.<tcl>hd
2c610 5f 66 72 61 67 6d 65 6e 74 20 66 72 6f 6d 63 6c  _fragment fromcl
2c620 61 75 73 65 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e  ause</tcl>.<tcl>
2c630 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 46 52 4f  hd_keywords {FRO
2c640 4d 20 63 6c 61 75 73 65 7d 3c 2f 74 63 6c 3e 0a  M clause}</tcl>.
2c650 0a 3c 70 3e 54 68 65 20 69 6e 70 75 74 20 64 61  .<p>The input da
2c660 74 61 20 75 73 65 64 20 62 79 20 61 20 73 69 6d  ta used by a sim
2c670 70 6c 65 20 53 45 4c 45 43 54 20 71 75 65 72 79  ple SELECT query
2c680 20 69 73 20 61 20 73 65 74 20 6f 66 20 3c 69 3e   is a set of <i>
2c690 4e 3c 2f 69 3e 20 72 6f 77 73 20 0a 65 61 63 68  N</i> rows .each
2c6a0 20 3c 69 3e 4d 3c 2f 69 3e 20 63 6f 6c 75 6d 6e   <i>M</i> column
2c6b0 73 20 77 69 64 65 2e 0a 0a 3c 70 3e 5e 28 49 66  s wide...<p>^(If
2c6c0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
2c6d0 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
2c6e0 20 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54   a simple SELECT
2c6f0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
2c700 20 74 68 65 20 0a 69 6e 70 75 74 20 64 61 74 61   the .input data
2c710 20 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 61   is implicitly a
2c720 20 73 69 6e 67 6c 65 20 72 6f 77 20 7a 65 72 6f   single row zero
2c730 20 63 6f 6c 75 6d 6e 73 20 77 69 64 65 29 5e 20   columns wide)^ 
2c740 28 69 2e 65 2e 20 3c 69 3e 4e 3c 2f 69 3e 3d 31  (i.e. <i>N</i>=1
2c750 20 61 6e 64 0a 3c 69 3e 4d 3c 2f 69 3e 3d 30 29   and.<i>M</i>=0)
2c760 2e 0a 0a 3c 70 3e 49 66 20 61 20 46 52 4f 4d 20  ...<p>If a FROM 
2c770 63 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66  clause is specif
2c780 69 65 64 2c 20 74 68 65 20 64 61 74 61 20 6f 6e  ied, the data on
2c790 20 77 68 69 63 68 20 61 20 73 69 6d 70 6c 65 20   which a simple 
2c7a0 53 45 4c 45 43 54 20 71 75 65 72 79 0a 6f 70 65  SELECT query.ope
2c7b0 72 61 74 65 73 20 63 6f 6d 65 73 20 66 72 6f 6d  rates comes from
2c7c0 20 74 68 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   the one or more
2c7d0 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
2c7e0 65 72 69 65 73 20 28 53 45 4c 45 43 54 20 73 74  eries (SELECT st
2c7f0 61 74 65 6d 65 6e 74 73 0a 69 6e 20 70 61 72 65  atements.in pare
2c800 6e 74 68 65 73 69 73 29 20 73 70 65 63 69 66 69  nthesis) specifi
2c810 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ed following the
2c820 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 2e 20 5e   FROM keyword. ^
2c830 41 20 73 75 62 71 75 65 72 79 20 73 70 65 63 69  A subquery speci
2c840 66 69 65 64 0a 69 6e 20 74 68 65 20 3c 79 79 74  fied.in the <yyt
2c850 65 72 6d 3e 74 61 62 6c 65 2d 6f 72 2d 73 75 62  erm>table-or-sub
2c860 71 75 65 72 79 3c 2f 79 79 74 65 72 6d 3e 20 66  query</yyterm> f
2c870 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 46 52 4f  ollowing the FRO
2c880 4d 20 63 6c 61 75 73 65 20 69 6e 20 61 20 0a 73  M clause in a .s
2c890 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73 74 61  imple SELECT sta
2c8a0 74 65 6d 65 6e 74 20 69 73 0a 68 61 6e 64 6c 65  tement is.handle
2c8b0 64 20 61 73 20 69 66 20 69 74 20 77 61 73 20 61  d as if it was a
2c8c0 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   table containin
2c8d0 67 20 74 68 65 20 64 61 74 61 20 72 65 74 75 72  g the data retur
2c8e0 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e 67  ned by executing
2c8f0 20 74 68 65 0a 73 75 62 71 75 65 72 79 20 73 74   the.subquery st
2c900 61 74 65 6d 65 6e 74 2e 20 5e 45 61 63 68 20 63  atement. ^Each c
2c910 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 73 75 62  olumn of the sub
2c920 71 75 65 72 79 20 68 61 73 20 74 68 65 0a 5b 63  query has the.[c
2c930 6f 6c 6c 61 74 69 6f 6e 7c 63 6f 6c 6c 61 74 69  ollation|collati
2c940 6f 6e 20 73 65 71 75 65 6e 63 65 5d 20 61 6e 64  on sequence] and
2c950 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 74   [affinity] of t
2c960 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
2c970 20 65 78 70 72 65 73 73 69 6f 6e 0a 69 6e 20 74   expression.in t
2c980 68 65 20 73 75 62 71 75 65 72 79 20 73 74 61 74  he subquery stat
2c990 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 66 20 74  ement...<p>^If t
2c9a0 68 65 72 65 20 69 73 20 6f 6e 6c 79 20 61 20 73  here is only a s
2c9b0 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20 73  ingle table or s
2c9c0 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
2c9d0 52 4f 4d 0a 63 6c 61 75 73 65 2c 20 74 68 65 6e  ROM.clause, then
2c9e0 20 74 68 65 20 69 6e 70 75 74 20 64 61 74 61 20   the input data 
2c9f0 75 73 65 64 20 62 79 20 74 68 65 20 53 45 4c 45  used by the SELE
2ca00 43 54 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  CT statement is 
2ca10 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
2ca20 74 68 65 0a 6e 61 6d 65 64 20 74 61 62 6c 65 2e  the.named table.
2ca30 20 5e 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f   ^If there is mo
2ca40 72 65 20 74 68 61 6e 20 6f 6e 65 20 74 61 62 6c  re than one tabl
2ca50 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e  e or subquery in
2ca60 20 46 52 4f 4d 20 63 6c 61 75 73 65 0a 74 68 65   FROM clause.the
2ca70 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  n the contents o
2ca80 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64  f all tables and
2ca90 2f 6f 72 20 73 75 62 71 75 65 72 69 65 73 0a 61  /or subqueries.a
2caa0 72 65 20 6a 6f 69 6e 65 64 20 69 6e 74 6f 20 61  re joined into a
2cab0 20 73 69 6e 67 6c 65 20 64 61 74 61 73 65 74 20   single dataset 
2cac0 66 6f 72 20 74 68 65 20 73 69 6d 70 6c 65 20 53  for the simple S
2cad0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2cae0 74 6f 20 6f 70 65 72 61 74 65 20 6f 6e 2e 0a 45  to operate on..E
2caf0 78 61 63 74 6c 79 20 68 6f 77 20 74 68 65 20 64  xactly how the d
2cb00 61 74 61 20 69 73 20 63 6f 6d 62 69 6e 65 64 20  ata is combined 
2cb10 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 73  depends on the s
2cb20 70 65 63 69 66 69 63 20 5b 6a 6f 69 6e 2d 6f 70  pecific [join-op
2cb30 65 72 61 74 6f 72 5d 20 61 6e 64 0a 5b 6a 6f 69  erator] and.[joi
2cb40 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 5d 20 75 73  n-constraint] us
2cb50 65 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68  ed to connect th
2cb60 65 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  e tables or subq
2cb70 75 65 72 69 65 73 20 74 6f 67 65 74 68 65 72 2e  ueries together.
2cb80 0a 0a 3c 70 3e 41 6c 6c 20 6a 6f 69 6e 73 20 69  ..<p>All joins i
2cb90 6e 20 53 51 4c 69 74 65 20 61 72 65 20 62 61 73  n SQLite are bas
2cba0 65 64 20 6f 6e 20 74 68 65 20 63 61 72 74 65 73  ed on the cartes
2cbb0 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20 74  ian product of t
2cbc0 68 65 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68  he left and.righ
2cbd0 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73 2e  t-hand datasets.
2cbe0 20 5e 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66   ^The columns of
2cbf0 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20 70   the cartesian p
2cc00 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 20 61  roduct dataset a
2cc10 72 65 2c 20 69 6e 20 0a 6f 72 64 65 72 2c 20 61  re, in .order, a
2cc20 6c 6c 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ll the columns o
2cc30 66 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  f the left-hand 
2cc40 64 61 74 61 73 65 74 20 66 6f 6c 6c 6f 77 65 64  dataset followed
2cc50 20 62 79 20 61 6c 6c 20 74 68 65 20 63 6f 6c 75   by all the colu
2cc60 6d 6e 73 0a 6f 66 20 74 68 65 20 72 69 67 68 74  mns.of the right
2cc70 2d 68 61 6e 64 20 64 61 74 61 73 65 74 2e 20 5e  -hand dataset. ^
2cc80 54 68 65 72 65 20 69 73 20 61 20 72 6f 77 20 69  There is a row i
2cc90 6e 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20  n the cartesian 
2cca0 70 72 6f 64 75 63 74 20 64 61 74 61 73 65 74 0a  product dataset.
2ccb0 66 6f 72 6d 65 64 20 62 79 20 63 6f 6d 62 69 6e  formed by combin
2ccc0 69 6e 67 20 65 61 63 68 20 75 6e 69 71 75 65 20  ing each unique 
2ccd0 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 61  combination of a
2cce0 20 72 6f 77 20 66 72 6f 6d 20 74 68 65 20 6c 65   row from the le
2ccf0 66 74 2d 68 61 6e 64 20 0a 61 6e 64 20 72 69 67  ft-hand .and rig
2cd00 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73  ht-hand datasets
2cd10 2e 20 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72  . ^(In other wor
2cd20 64 73 2c 20 69 66 20 74 68 65 20 6c 65 66 74 2d  ds, if the left-
2cd30 68 61 6e 64 20 64 61 74 61 73 65 74 20 63 6f 6e  hand dataset con
2cd40 73 69 73 74 73 20 6f 66 0a 3c 69 3e 4e 3c 73 75  sists of.<i>N<su
2cd50 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73  b><small>left</s
2cd60 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20  mall></sub></i> 
2cd70 72 6f 77 73 20 6f 66 20 0a 3c 69 3e 4d 3c 73 75  rows of .<i>M<su
2cd80 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73  b><small>left</s
2cd90 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20  mall></sub></i> 
2cda0 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 74 68 65  columns, and the
2cdb0 20 72 69 67 68 74 2d 68 61 6e 64 20 64 61 74 61   right-hand data
2cdc0 73 65 74 20 6f 66 0a 3c 69 3e 4e 3c 73 75 62 3e  set of.<i>N<sub>
2cdd0 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d  <small>right</sm
2cde0 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 72  all></sub></i> r
2cdf0 6f 77 73 20 6f 66 0a 3c 69 3e 4d 3c 73 75 62 3e  ows of.<i>M<sub>
2ce00 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f 73 6d  <small>right</sm
2ce10 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e 20 63  all></sub></i> c
2ce20 6f 6c 75 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65  olumns, then the
2ce30 20 63 61 72 74 65 73 69 61 6e 20 70 72 6f 64 75   cartesian produ
2ce40 63 74 20 69 73 20 61 0a 64 61 74 61 73 65 74 20  ct is a.dataset 
2ce50 6f 66 20 0a 3c 69 3e 4e 3c 73 75 62 3e 3c 73 6d  of .<i>N<sub><sm
2ce60 61 6c 6c 3e 6c 65 66 74 3c 2f 73 6d 61 6c 6c 3e  all>left</small>
2ce70 3c 2f 73 75 62 3e 26 74 69 6d 65 73 3b 4e 3c 73  </sub>&times;N<s
2ce80 75 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c  ub><small>right<
2ce90 2f 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69  /small></sub></i
2cea0 3e 0a 72 6f 77 73 2c 20 65 61 63 68 20 63 6f 6e  >.rows, each con
2ceb0 74 61 69 6e 69 6e 67 20 0a 3c 69 3e 4d 3c 73 75  taining .<i>M<su
2cec0 62 3e 3c 73 6d 61 6c 6c 3e 6c 65 66 74 3c 2f 73  b><small>left</s
2ced0 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 2b 4d 3c 73 75  mall></sub>+M<su
2cee0 62 3e 3c 73 6d 61 6c 6c 3e 72 69 67 68 74 3c 2f  b><small>right</
2cef0 73 6d 61 6c 6c 3e 3c 2f 73 75 62 3e 3c 2f 69 3e  small></sub></i>
2cf00 20 63 6f 6c 75 6d 6e 73 2e 29 5e 0a 0a 3c 70 3e   columns.)^..<p>
2cf10 5e 49 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65  ^If the join-ope
2cf20 72 61 74 6f 72 20 69 73 20 22 43 52 4f 53 53 20  rator is "CROSS 
2cf30 4a 4f 49 4e 22 2c 20 22 49 4e 4e 45 52 20 4a 4f  JOIN", "INNER JO
2cf40 49 4e 22 2c 20 22 4a 4f 49 4e 22 20 6f 72 20 61  IN", "JOIN" or a
2cf50 20 63 6f 6d 6d 61 0a 28 22 2c 22 29 20 61 6e 64   comma.(",") and
2cf60 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 4e 20   there is no ON 
2cf70 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 2c  or USING clause,
2cf80 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
2cf90 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 69 73 0a   of the join is.
2cfa0 73 69 6d 70 6c 79 20 74 68 65 20 63 61 72 74 65  simply the carte
2cfb0 73 69 61 6e 20 70 72 6f 64 75 63 74 20 6f 66 20  sian product of 
2cfc0 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
2cfd0 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 73  ht-hand datasets
2cfe0 2e 20 0a 49 66 20 6a 6f 69 6e 2d 6f 70 65 72 61  . .If join-opera
2cff0 74 6f 72 20 64 6f 65 73 20 68 61 76 65 20 4f 4e  tor does have ON
2d000 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65   or USING clause
2d010 73 2c 20 74 68 6f 73 65 20 61 72 65 20 68 61 6e  s, those are han
2d020 64 6c 65 64 20 61 63 63 6f 72 64 69 6e 67 20 74  dled according t
2d030 6f 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o.the following 
2d040 62 75 6c 6c 65 74 20 70 6f 69 6e 74 73 3a 0a 0a  bullet points:..
2d050 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 20 3c 70 3e 5e  <ul>.  <li> <p>^
2d060 28 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 20  (If there is an 
2d070 4f 4e 20 63 6c 61 75 73 65 20 74 68 65 6e 20 74  ON clause then t
2d080 68 65 20 4f 4e 20 65 78 70 72 65 73 73 69 6f 6e  he ON expression
2d090 20 69 73 0a 20 20 20 20 20 20 20 65 76 61 6c 75   is.       evalu
2d0a0 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f  ated for each ro
2d0b0 77 20 6f 66 20 74 68 65 20 63 61 72 74 65 73 69  w of the cartesi
2d0c0 61 6e 20 70 72 6f 64 75 63 74 20 61 73 20 61 20  an product as a 
2d0d0 0a 20 20 20 20 20 20 20 5b 62 6f 6f 6c 65 61 6e  .       [boolean
2d0e0 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e 20 4f 6e   expression]. On
2d0f0 6c 79 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63  ly rows for whic
2d100 68 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  h the expression
2d110 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 0a 20   evaluates to . 
2d120 20 20 20 20 20 20 74 72 75 65 20 61 72 65 20 69        true are i
2d130 6e 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68 65  ncluded from the
2d140 20 64 61 74 61 73 65 74 2e 29 5e 0a 0a 20 20 3c   dataset.)^..  <
2d150 6c 69 3e 20 3c 70 3e 5e 49 66 20 74 68 65 72 65  li> <p>^If there
2d160 20 69 73 20 61 20 55 53 49 4e 47 20 63 6c 61 75   is a USING clau
2d170 73 65 0a 20 20 20 20 20 20 20 74 68 65 6e 20 65  se.       then e
2d180 61 63 68 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ach of the colum
2d190 6e 20 6e 61 6d 65 73 20 73 70 65 63 69 66 69 65  n names specifie
2d1a0 64 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20  d must exist in 
2d1b0 74 68 65 20 64 61 74 61 73 65 74 73 20 74 6f 20  the datasets to 
2d1c0 0a 20 20 20 20 20 20 20 62 6f 74 68 20 74 68 65  .       both the
2d1d0 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
2d1e0 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72  of the join-oper
2d1f0 61 74 6f 72 2e 20 5e 28 46 6f 72 20 65 61 63 68  ator. ^(For each
2d200 20 70 61 69 72 20 6f 66 20 6e 61 6d 65 64 0a 20   pair of named. 
2d210 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 2c 20 74        columns, t
2d220 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 22 6c  he expression "l
2d230 68 73 2e 58 20 3d 20 72 68 73 2e 58 22 20 69 73  hs.X = rhs.X" is
2d240 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20 65   evaluated for e
2d250 61 63 68 20 72 6f 77 20 6f 66 0a 20 20 20 20 20  ach row of.     
2d260 20 20 74 68 65 20 63 61 72 74 65 73 69 61 6e 20    the cartesian 
2d270 70 72 6f 64 75 63 74 20 61 73 20 61 20 5b 62 6f  product as a [bo
2d280 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  olean expression
2d290 5d 2e 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72  ]. Only rows for
2d2a0 20 77 68 69 63 68 0a 20 20 20 20 20 20 20 61 6c   which.       al
2d2b0 6c 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f  l such expressio
2d2c0 6e 73 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  ns evaluates to 
2d2d0 74 72 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65  true are include
2d2e0 64 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20 20  d from the.     
2d2f0 20 20 72 65 73 75 6c 74 20 73 65 74 2e 29 5e 20    result set.)^ 
2d300 5e 57 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20  ^When comparing 
2d310 76 61 6c 75 65 73 20 61 73 20 61 20 72 65 73 75  values as a resu
2d320 6c 74 20 6f 66 20 61 20 55 53 49 4e 47 20 63 6c  lt of a USING cl
2d330 61 75 73 65 2c 20 74 68 65 0a 20 20 20 20 20 20  ause, the.      
2d340 20 6e 6f 72 6d 61 6c 20 72 75 6c 65 73 20 66 6f   normal rules fo
2d350 72 20 68 61 6e 64 6c 69 6e 67 20 61 66 66 69 6e  r handling affin
2d360 69 74 69 65 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e  ities, collation
2d370 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 4e   sequences and N
2d380 55 4c 4c 0a 20 20 20 20 20 20 20 76 61 6c 75 65  ULL.       value
2d390 73 20 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73  s in comparisons
2d3a0 20 61 70 70 6c 79 2e 20 5e 54 68 65 20 63 6f 6c   apply. ^The col
2d3b0 75 6d 6e 20 66 72 6f 6d 20 74 68 65 20 64 61 74  umn from the dat
2d3c0 61 73 65 74 20 6f 6e 20 74 68 65 0a 20 20 20 20  aset on the.    
2d3d0 20 20 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64     left-hand sid
2d3e0 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2d 6f 70  e of the join-op
2d3f0 65 72 61 74 6f 72 20 69 73 20 63 6f 6e 73 69 64  erator is consid
2d400 65 72 65 64 20 74 6f 20 62 65 20 6f 6e 20 74 68  ered to be on th
2d410 65 20 6c 65 66 74 2d 68 61 6e 64 0a 20 20 20 20  e left-hand.    
2d420 20 20 20 73 69 64 65 20 6f 66 20 74 68 65 20 63     side of the c
2d430 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
2d440 6f 72 20 28 3d 29 20 66 6f 72 20 74 68 65 20 70  or (=) for the p
2d450 75 72 70 6f 73 65 73 20 6f 66 20 63 6f 6c 6c 61  urposes of colla
2d460 74 69 6f 6e 20 0a 20 20 20 20 20 20 20 73 65 71  tion .       seq
2d470 75 65 6e 63 65 20 61 6e 64 20 61 66 66 69 6e 69  uence and affini
2d480 74 79 20 70 72 65 63 65 64 65 6e 63 65 2e 0a 0a  ty precedence...
2d490 20 20 20 20 20 20 20 3c 70 3e 5e 46 6f 72 20 65         <p>^For e
2d4a0 61 63 68 20 70 61 69 72 20 6f 66 20 63 6f 6c 75  ach pair of colu
2d4b0 6d 6e 73 20 69 64 65 6e 74 69 66 69 65 64 20 62  mns identified b
2d4c0 79 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65  y a USING clause
2d4d0 2c 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 20 20 20  , the column.   
2d4e0 20 20 20 20 66 72 6f 6d 20 74 68 65 20 72 69 67      from the rig
2d4f0 68 74 2d 68 61 6e 64 20 64 61 74 61 73 65 74 20  ht-hand dataset 
2d500 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
2d510 74 68 65 20 6a 6f 69 6e 65 64 20 64 61 74 61 73  the joined datas
2d520 65 74 2e 20 5e 54 68 69 73 20 0a 20 20 20 20 20  et. ^This .     
2d530 20 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 64 69    is the only di
2d540 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
2d550 20 61 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20   a USING clause 
2d560 61 6e 64 20 69 74 73 20 65 71 75 69 76 61 6c 65  and its equivale
2d570 6e 74 20 4f 4e 0a 20 20 20 20 20 20 20 63 6f 6e  nt ON.       con
2d580 73 74 72 61 69 6e 74 2e 0a 0a 20 20 3c 6c 69 3e  straint...  <li>
2d590 20 3c 70 3e 5e 28 49 66 20 74 68 65 20 4e 41 54   <p>^(If the NAT
2d5a0 55 52 41 4c 20 6b 65 79 77 6f 72 64 20 69 73 20  URAL keyword is 
2d5b0 69 6e 20 74 68 65 20 6a 6f 69 6e 2d 6f 70 65 72  in the join-oper
2d5c0 61 74 6f 72 20 74 68 65 6e 20 61 6e 0a 20 20 20  ator then an.   
2d5d0 20 20 20 20 69 6d 70 6c 69 63 69 74 20 55 53 49      implicit USI
2d5e0 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61 64 64  NG clause is add
2d5f0 65 64 20 74 6f 20 74 68 65 20 6a 6f 69 6e 2d 63  ed to the join-c
2d600 6f 6e 73 74 72 61 69 6e 74 73 2e 20 54 68 65 20  onstraints. The 
2d610 69 6d 70 6c 69 63 69 74 0a 20 20 20 20 20 20 20  implicit.       
2d620 55 53 49 4e 47 20 63 6c 61 75 73 65 20 63 6f 6e  USING clause con
2d630 74 61 69 6e 73 20 65 61 63 68 20 6f 66 20 74 68  tains each of th
2d640 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74  e column names t
2d650 68 61 74 20 61 70 70 65 61 72 20 69 6e 20 62 6f  hat appear in bo
2d660 74 68 0a 20 20 20 20 20 20 20 74 68 65 20 6c 65  th.       the le
2d670 66 74 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e  ft and right-han
2d680 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74 73  d input datasets
2d690 2e 29 5e 20 5e 49 66 20 74 68 65 20 6c 65 66 74  .)^ ^If the left
2d6a0 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a   and right-hand.
2d6b0 20 20 20 20 20 20 20 69 6e 70 75 74 20 64 61 74         input dat
2d6c0 61 73 65 74 73 20 66 65 61 74 75 72 65 20 6e 6f  asets feature no
2d6d0 20 63 6f 6d 6d 6f 6e 20 63 6f 6c 75 6d 6e 20 6e   common column n
2d6e0 61 6d 65 73 2c 20 74 68 65 6e 20 74 68 65 20 4e  ames, then the N
2d6f0 41 54 55 52 41 4c 20 6b 65 79 77 6f 72 64 0a 20  ATURAL keyword. 
2d700 20 20 20 20 20 20 68 61 73 20 6e 6f 20 65 66 66        has no eff
2d710 65 63 74 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  ect on the resul
2d720 74 73 20 6f 66 20 74 68 65 20 6a 6f 69 6e 2e 20  ts of the join. 
2d730 5e 41 20 55 53 49 4e 47 20 6f 72 20 4f 4e 20 63  ^A USING or ON c
2d740 6c 61 75 73 65 20 6d 61 79 0a 20 20 20 20 20 20  lause may.      
2d750 20 6e 6f 74 20 62 65 20 61 64 64 65 64 20 74 6f   not be added to
2d760 20 61 20 6a 6f 69 6e 20 74 68 61 74 20 73 70 65   a join that spe
2d770 63 69 66 69 65 73 20 74 68 65 20 4e 41 54 55 52  cifies the NATUR
2d780 41 4c 20 6b 65 79 77 6f 72 64 2e 0a 0a 20 20 3c  AL keyword...  <
2d790 6c 69 3e 20 3c 70 3e 5e 28 49 66 20 74 68 65 20  li> <p>^(If the 
2d7a0 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 69 73  join-operator is
2d7b0 20 61 20 22 4c 45 46 54 20 4a 4f 49 4e 22 20 6f   a "LEFT JOIN" o
2d7c0 72 20 22 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f  r "LEFT OUTER JO
2d7d0 49 4e 22 2c 20 74 68 65 6e 0a 20 20 20 20 20 20  IN", then.      
2d7e0 20 61 66 74 65 72 0a 20 20 20 20 20 20 20 74 68   after.       th
2d7f0 65 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 66 69  e ON or USING fi
2d800 6c 74 65 72 69 6e 67 20 63 6c 61 75 73 65 73 20  ltering clauses 
2d810 68 61 76 65 20 62 65 65 6e 20 61 70 70 6c 69 65  have been applie
2d820 64 2c 20 61 6e 20 65 78 74 72 61 20 72 6f 77 20  d, an extra row 
2d830 69 73 20 0a 20 20 20 20 20 20 20 61 64 64 65 64  is .       added
2d840 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 20 66   to the output f
2d850 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
2d860 68 65 20 6f 72 69 67 69 6e 61 6c 20 6c 65 66 74  he original left
2d870 2d 68 61 6e 64 20 69 6e 70 75 74 20 0a 20 20 20  -hand input .   
2d880 20 20 20 20 64 61 74 61 73 65 74 20 74 68 61 74      dataset that
2d890 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2d8a0 6e 6f 20 72 6f 77 73 20 61 74 20 61 6c 6c 20 69  no rows at all i
2d8b0 6e 20 74 68 65 20 63 6f 6d 70 6f 73 69 74 65 0a  n the composite.
2d8c0 20 20 20 20 20 20 20 64 61 74 61 73 65 74 20 28         dataset (
2d8d0 69 66 20 61 6e 79 29 2e 29 5e 20 5e 54 68 65 20  if any).)^ ^The 
2d8e0 61 64 64 65 64 20 72 6f 77 73 20 63 6f 6e 74 61  added rows conta
2d8f0 69 6e 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69  in NULL values i
2d900 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 20 20  n the columns.  
2d910 20 20 20 20 20 74 68 61 74 20 77 6f 75 6c 64 20       that would 
2d920 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6e 74 61 69 6e  normally contain
2d930 20 76 61 6c 75 65 73 20 63 6f 70 69 65 64 20 66   values copied f
2d940 72 6f 6d 20 74 68 65 20 72 69 67 68 74 2d 68 61  rom the right-ha
2d950 6e 64 20 69 6e 70 75 74 0a 20 20 20 20 20 20 20  nd input.       
2d960 64 61 74 61 73 65 74 2e 20 20 0a 3c 2f 75 6c 3e  dataset.  .</ul>
2d970 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 6d 6f 72 65  ..<p>^(When more
2d980 20 74 68 61 6e 20 74 77 6f 20 74 61 62 6c 65 73   than two tables
2d990 20 61 72 65 20 6a 6f 69 6e 65 64 20 74 6f 67 65   are joined toge
2d9a0 74 68 65 72 20 61 73 20 70 61 72 74 20 6f 66 20  ther as part of 
2d9b0 61 20 46 52 4f 4d 20 63 6c 61 75 73 65 2c 0a 74  a FROM clause,.t
2d9c0 68 65 20 6a 6f 69 6e 20 6f 70 65 72 61 74 69 6f  he join operatio
2d9d0 6e 73 20 61 72 65 20 70 72 6f 63 65 73 73 65 64  ns are processed
2d9e0 20 69 6e 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c   in order from l
2d9f0 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 49 6e  eft to right. In
2da00 20 6f 74 68 65 72 20 0a 77 6f 72 64 73 2c 20 74   other .words, t
2da10 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 28  he FROM clause (
2da20 41 20 6a 6f 69 6e 2d 6f 70 2d 31 20 42 20 6a 6f  A join-op-1 B jo
2da30 69 6e 2d 6f 70 2d 32 20 43 29 20 69 73 20 63 6f  in-op-2 C) is co
2da40 6d 70 75 74 65 64 20 61 73 20 0a 28 28 41 20 6a  mputed as .((A j
2da50 6f 69 6e 2d 6f 70 2d 31 20 42 29 20 6a 6f 69 6e  oin-op-1 B) join
2da60 2d 6f 70 2d 32 20 43 29 2e 29 5e 0a 0a 3c 74 63  -op-2 C).)^..<tc
2da70 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 72  l>hd_fragment cr
2da80 6f 73 73 6a 6f 69 6e 20 7b 74 72 65 61 74 73 20  ossjoin {treats 
2da90 74 68 65 20 43 52 4f 53 53 20 4a 4f 49 4e 20 6f  the CROSS JOIN o
2daa0 70 65 72 61 74 6f 72 20 73 70 65 63 69 61 6c 6c  perator speciall
2dab0 79 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 53  y}</tcl>.<p><b>S
2dac0 69 64 65 20 6e 6f 74 65 3a 20 53 70 65 63 69 61  ide note: Specia
2dad0 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52  l handling of CR
2dae0 4f 53 53 20 4a 4f 49 4e 2e 3c 2f 62 3e 0a 5e 54  OSS JOIN.</b>.^T
2daf0 68 65 72 65 20 69 73 20 6e 6f 20 64 69 66 66 65  here is no diffe
2db00 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68  rence between th
2db10 65 20 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20  e "INNER JOIN", 
2db20 22 4a 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6a  "JOIN" and "," j
2db30 6f 69 6e 0a 6f 70 65 72 61 74 6f 72 73 2e 20 54  oin.operators. T
2db40 68 65 79 20 61 72 65 20 63 6f 6d 70 6c 65 74 65  hey are complete
2db50 6c 79 20 69 6e 74 65 72 63 68 61 6e 67 65 61 62  ly interchangeab
2db60 6c 65 20 69 6e 20 53 51 4c 69 74 65 2e 0a 5e 28  le in SQLite..^(
2db70 54 68 65 20 22 43 52 4f 53 53 20 4a 4f 49 4e 22  The "CROSS JOIN"
2db80 20 6a 6f 69 6e 20 6f 70 65 72 61 74 6f 72 20 70   join operator p
2db90 72 6f 64 75 63 65 73 20 74 68 65 20 73 61 6d 65  roduces the same
2dba0 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 0a   result as the .
2dbb0 22 49 4e 4e 45 52 20 4a 4f 49 4e 22 2c 20 22 4a  "INNER JOIN", "J
2dbc0 4f 49 4e 22 20 61 6e 64 20 22 2c 22 20 6f 70 65  OIN" and "," ope
2dbd0 72 61 74 6f 72 73 29 5e 2c 20 62 75 74 20 69 73  rators)^, but is
2dbe0 20 0a 5b 43 52 4f 53 53 20 4a 4f 49 4e 7c 68 61   .[CROSS JOIN|ha
2dbf0 6e 64 6c 65 64 20 64 69 66 66 65 72 65 6e 74 6c  ndled differentl
2dc00 79 20 62 79 20 74 68 65 20 71 75 65 72 79 20 6f  y by the query o
2dc10 70 74 69 6d 69 7a 65 72 5d 0a 69 6e 20 74 68 61  ptimizer].in tha
2dc20 74 20 69 74 20 70 72 65 76 65 6e 74 73 20 74 68  t it prevents th
2dc30 65 20 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65  e query optimize
2dc40 72 20 66 72 6f 6d 20 72 65 6f 72 64 65 72 69 6e  r from reorderin
2dc50 67 0a 74 68 65 20 74 61 62 6c 65 73 20 69 6e 20  g.the tables in 
2dc60 74 68 65 20 6a 6f 69 6e 2e 20 20 41 6e 20 61 70  the join.  An ap
2dc70 70 6c 69 63 61 74 69 6f 6e 20 70 72 6f 67 72 61  plication progra
2dc80 6d 6d 65 72 20 63 61 6e 20 75 73 65 20 74 68 65  mmer can use the
2dc90 20 43 52 4f 53 53 20 4a 4f 49 4e 20 0a 6f 70 65   CROSS JOIN .ope
2dca0 72 61 74 6f 72 20 74 6f 20 64 69 72 65 63 74 6c  rator to directl
2dcb0 79 20 69 6e 66 6c 75 65 6e 63 65 20 74 68 65 20  y influence the 
2dcc0 61 6c 67 6f 72 69 74 68 6d 20 74 68 61 74 20 69  algorithm that i
2dcd0 73 20 63 68 6f 73 65 6e 20 74 6f 20 69 6d 70 6c  s chosen to impl
2dce0 65 6d 65 6e 74 0a 74 68 65 20 53 45 4c 45 43 54  ement.the SELECT
2dcf0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 76 6f   statement.  Avo
2dd00 69 64 20 75 73 69 6e 67 20 43 52 4f 53 53 20 4a  id using CROSS J
2dd10 4f 49 4e 20 65 78 63 65 70 74 20 69 6e 20 73 70  OIN except in sp
2dd20 65 63 69 66 69 63 20 73 69 74 75 61 74 69 6f 6e  ecific situation
2dd30 73 20 0a 77 68 65 72 65 20 6d 61 6e 75 61 6c 20  s .where manual 
2dd40 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 65 20 71  control of the q
2dd50 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 69  uery optimizer i
2dd60 73 20 64 65 73 69 72 65 64 2e 20 20 41 76 6f 69  s desired.  Avoi
2dd70 64 20 75 73 69 6e 67 0a 43 52 4f 53 53 20 4a 4f  d using.CROSS JO
2dd80 49 4e 20 65 61 72 6c 79 20 69 6e 20 74 68 65 20  IN early in the 
2dd90 64 65 76 65 6c 6f 70 6d 65 6e 74 20 6f 66 20 61  development of a
2dda0 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 61 73  n application as
2ddb0 20 64 6f 69 6e 67 20 73 6f 20 69 73 0a 61 20 3c   doing so is.a <
2ddc0 61 20 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 63  a href="http://c
2ddd0 32 2e 63 6f 6d 2f 63 67 69 2f 77 69 6b 69 3f 50  2.com/cgi/wiki?P
2dde0 72 65 6d 61 74 75 72 65 4f 70 74 69 6d 69 7a 61  rematureOptimiza
2ddf0 74 69 6f 6e 22 3e 70 72 65 6d 61 74 75 72 65 0a  tion">premature.
2de00 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 3c 2f 61 3e  optimization</a>
2de10 2e 20 20 54 68 65 20 73 70 65 63 69 61 6c 20 68  .  The special h
2de20 61 6e 64 6c 69 6e 67 20 6f 66 20 43 52 4f 53 53  andling of CROSS
2de30 20 4a 4f 49 4e 20 69 73 20 61 6e 20 53 51 4c 69   JOIN is an SQLi
2de40 74 65 2d 73 70 65 63 69 66 69 63 0a 66 65 61 74  te-specific.feat
2de50 75 72 65 20 61 6e 64 20 69 73 20 6e 6f 74 20 61  ure and is not a
2de60 20 70 61 72 74 20 6f 66 20 73 74 61 6e 64 61 72   part of standar
2de70 64 20 53 51 4c 2e 0a 20 20 20 20 20 20 20 0a 0a  d SQL..       ..
2de80 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2de90 20 77 68 65 72 65 63 6c 61 75 73 65 3c 2f 74 63   whereclause</tc
2dea0 6c 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f  l>.<tcl>hd_keywo
2deb0 72 64 73 20 7b 57 48 45 52 45 20 63 6c 61 75 73  rds {WHERE claus
2dec0 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 3c 62 3e 32  e}</tcl>.<p><b>2
2ded0 2e 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  . WHERE clause f
2dee0 69 6c 74 65 72 69 6e 67 2e 3c 2f 62 3e 0a 0a 3c  iltering.</b>..<
2def0 70 3e 5e 28 49 66 20 61 20 57 48 45 52 45 20 63  p>^(If a WHERE c
2df00 6c 61 75 73 65 20 69 73 20 73 70 65 63 69 66 69  lause is specifi
2df10 65 64 2c 20 74 68 65 20 57 48 45 52 45 20 65 78  ed, the WHERE ex
2df20 70 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c  pression is eval
2df30 75 61 74 65 64 20 66 6f 72 20 0a 65 61 63 68 20  uated for .each 
2df40 72 6f 77 20 69 6e 20 74 68 65 20 69 6e 70 75 74  row in the input
2df50 20 64 61 74 61 20 61 73 20 61 20 5b 62 6f 6f 6c   data as a [bool
2df60 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 5d 2e  ean expression].
2df70 20 4f 6e 6c 79 20 72 6f 77 73 20 66 6f 72 20 77   Only rows for w
2df80 68 69 63 68 20 74 68 65 0a 57 48 45 52 45 20 63  hich the.WHERE c
2df90 6c 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e  lause expression
2dfa0 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 74 72   evaluates to tr
2dfb0 75 65 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ue are included 
2dfc0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 73 65 74  from the dataset
2dfd0 20 62 65 66 6f 72 65 0a 63 6f 6e 74 69 6e 75 69   before.continui
2dfe0 6e 67 2e 29 5e 20 20 52 6f 77 73 20 61 72 65 20  ng.)^  Rows are 
2dff0 65 78 63 6c 75 64 65 64 20 66 72 6f 6d 20 74 68  excluded from th
2e000 65 20 72 65 73 75 6c 74 20 69 66 20 74 68 65 20  e result if the 
2e010 57 48 45 52 45 20 63 6c 61 75 73 65 0a 65 76 61  WHERE clause.eva
2e020 6c 75 61 74 65 73 20 74 6f 20 65 69 74 68 65 72  luates to either
2e030 20 66 61 6c 73 65 20 6f 72 20 4e 55 4c 4c 2e 0a   false or NULL..
2e040 0a 3c 70 3e 46 6f 72 20 61 20 4a 4f 49 4e 20 6f  .<p>For a JOIN o
2e050 72 20 49 4e 4e 45 52 20 4a 4f 49 4e 20 6f 72 20  r INNER JOIN or 
2e060 43 52 4f 53 53 20 4a 4f 49 4e 2c 20 74 68 65 72  CROSS JOIN, ther
2e070 65 20 69 73 20 6e 6f 20 64 69 66 66 65 72 65 6e  e is no differen
2e080 63 65 20 62 65 74 77 65 65 6e 20 0a 61 20 63 6f  ce between .a co
2e090 6e 73 74 72 61 69 6e 74 20 65 78 70 72 65 73 73  nstraint express
2e0a0 69 6f 6e 20 69 6e 20 74 68 65 20 57 48 45 52 45  ion in the WHERE
2e0b0 20 63 6c 61 75 73 65 20 61 6e 64 20 6f 6e 65 20   clause and one 
2e0c0 69 6e 20 74 68 65 20 4f 4e 20 63 6c 61 75 73 65  in the ON clause
2e0d0 2e 20 20 48 6f 77 65 76 65 72 2c 0a 66 6f 72 20  .  However,.for 
2e0e0 61 20 4c 45 46 54 20 4a 4f 49 4e 20 6f 72 20 4c  a LEFT JOIN or L
2e0f0 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 2c 20  EFT OUTER JOIN, 
2e100 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69  the difference i
2e110 73 20 76 65 72 79 20 69 6d 70 6f 72 74 61 6e 74  s very important
2e120 2e 20 20 0a 49 6e 20 61 20 4c 45 46 54 20 4a 4f  .  .In a LEFT JO
2e130 49 4e 2c 0a 74 68 65 20 65 78 74 72 61 20 4e 55  IN,.the extra NU
2e140 4c 4c 20 72 6f 77 20 66 6f 72 20 74 68 65 20 72  LL row for the r
2e150 69 67 68 74 2d 68 61 6e 64 20 74 61 62 6c 65 20  ight-hand table 
2e160 69 73 20 61 64 64 65 64 20 61 66 74 65 72 20 4f  is added after O
2e170 4e 20 63 6c 61 75 73 65 20 70 72 6f 63 65 73 73  N clause process
2e180 69 6e 67 0a 62 75 74 20 62 65 66 6f 72 65 20 57  ing.but before W
2e190 48 45 52 45 20 63 6c 61 75 73 65 20 70 72 6f 63  HERE clause proc
2e1a0 65 73 73 69 6e 67 2e 20 20 41 20 63 6f 6e 73 74  essing.  A const
2e1b0 72 61 69 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  raint of the for
2e1c0 6d 20 22 6c 65 66 74 2e 78 3d 72 69 67 68 74 2e  m "left.x=right.
2e1d0 79 22 0a 69 6e 20 61 6e 20 4f 4e 20 63 6c 61 75  y".in an ON clau
2e1e0 73 65 20 77 69 6c 6c 20 74 68 65 72 65 66 6f 72  se will therefor
2e1f0 65 20 61 6c 6c 6f 77 20 74 68 72 6f 75 67 68 20  e allow through 
2e200 74 68 65 20 61 64 64 65 64 20 61 6c 6c 2d 4e 55  the added all-NU
2e210 4c 4c 20 72 6f 77 73 20 6f 66 20 74 68 65 0a 72  LL rows of the.r
2e220 69 67 68 74 20 74 61 62 6c 65 2e 20 20 42 75 74  ight table.  But
2e230 20 69 66 20 74 68 61 74 20 73 61 6d 65 20 63 6f   if that same co
2e240 6e 73 74 72 61 69 6e 74 20 69 73 20 69 6e 20 74  nstraint is in t
2e250 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
2e260 61 20 4e 55 4c 4c 20 69 6e 0a 22 72 69 67 68 74  a NULL in."right
2e270 2e 79 22 20 77 69 6c 6c 20 70 72 65 76 65 6e 74  .y" will prevent
2e280 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
2e290 22 6c 65 66 74 2e 78 3d 72 69 67 68 74 2e 79 22  "left.x=right.y"
2e2a0 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 72 75 65   from being true
2e2b0 2c 20 61 6e 64 0a 74 68 75 73 20 65 78 63 6c 75  , and.thus exclu
2e2c0 64 65 20 74 68 61 74 20 72 6f 77 20 66 72 6f 6d  de that row from
2e2d0 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 0a 3c 70   the output...<p
2e2e0 3e 3c 62 3e 33 2e 20 47 65 6e 65 72 61 74 69 6f  ><b>3. Generatio
2e2f0 6e 20 6f 66 20 74 68 65 20 73 65 74 20 6f 66 20  n of the set of 
2e300 72 65 73 75 6c 74 20 72 6f 77 73 2e 3c 2f 62 3e  result rows.</b>
2e310 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2e320 74 20 72 65 73 75 6c 74 73 65 74 3c 2f 74 63 6c  t resultset</tcl
2e330 3e 0a 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72  >.<tcl>hd_keywor
2e340 64 73 20 7b 72 65 73 75 6c 74 2d 73 65 74 20 65  ds {result-set e
2e350 78 70 72 65 73 73 69 6f 6e 73 7d 20 7b 47 52 4f  xpressions} {GRO
2e360 55 50 20 42 59 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  UP BY}</tcl>..<p
2e370 3e 4f 6e 63 65 20 74 68 65 20 69 6e 70 75 74 20  >Once the input 
2e380 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 46 52  data from the FR
2e390 4f 4d 20 63 6c 61 75 73 65 20 68 61 73 20 62 65  OM clause has be
2e3a0 65 6e 20 66 69 6c 74 65 72 65 64 20 62 79 20 74  en filtered by t
2e3b0 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65 20  he.WHERE clause 
2e3c0 65 78 70 72 65 73 73 69 6f 6e 20 28 69 66 20 61  expression (if a
2e3d0 6e 79 29 2c 20 74 68 65 20 73 65 74 20 6f 66 20  ny), the set of 
2e3e0 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72 20  result rows for 
2e3f0 74 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45  the simple .SELE
2e400 43 54 20 61 72 65 20 63 61 6c 63 75 6c 61 74 65  CT are calculate
2e410 64 2e 20 45 78 61 63 74 6c 79 20 68 6f 77 20 74  d. Exactly how t
2e420 68 69 73 20 69 73 20 64 6f 6e 65 20 64 65 70 65  his is done depe
2e430 6e 64 73 20 6f 6e 20 77 68 65 74 68 65 72 20 74  nds on whether t
2e440 68 65 20 73 69 6d 70 6c 65 20 0a 53 45 4c 45 43  he simple .SELEC
2e450 54 20 69 73 20 61 6e 20 61 67 67 72 65 67 61 74  T is an aggregat
2e460 65 20 6f 72 20 6e 6f 6e 2d 61 67 67 72 65 67 61  e or non-aggrega
2e470 74 65 20 71 75 65 72 79 2c 20 61 6e 64 20 77 68  te query, and wh
2e480 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 47  ether or not a G
2e490 52 4f 55 50 0a 42 59 20 63 6c 61 75 73 65 20 77  ROUP.BY clause w
2e4a0 61 73 20 73 70 65 63 69 66 69 65 64 2e 0a 0a 3c  as specified...<
2e4b0 70 3e 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65  p> The list of e
2e4c0 78 70 72 65 73 73 69 6f 6e 73 20 62 65 74 77 65  xpressions betwe
2e4d0 65 6e 20 74 68 65 20 53 45 4c 45 43 54 20 61 6e  en the SELECT an
2e4e0 64 20 46 52 4f 4d 20 6b 65 79 77 6f 72 64 73 20  d FROM keywords 
2e4f0 69 73 20 6b 6e 6f 77 6e 20 61 73 0a 74 68 65 20  is known as.the 
2e500 72 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f  result expressio
2e510 6e 20 6c 69 73 74 2e 20 20 5e 49 66 20 61 20 72  n list.  ^If a r
2e520 65 73 75 6c 74 20 65 78 70 72 65 73 73 69 6f 6e  esult expression
2e530 20 69 73 20 74 68 65 20 73 70 65 63 69 61 6c 20   is the special 
2e540 65 78 70 72 65 73 73 69 6f 6e 0a 22 2a 22 20 74  expression."*" t
2e550 68 65 6e 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  hen all columns 
2e560 69 6e 20 74 68 65 20 69 6e 70 75 74 20 64 61 74  in the input dat
2e570 61 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  a are substitute
2e580 64 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 65  d for that one e
2e590 78 70 72 65 73 73 69 6f 6e 2e 0a 5e 28 49 66 20  xpression..^(If 
2e5a0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
2e5b0 73 20 74 68 65 20 61 6c 69 61 73 20 6f 66 20 61  s the alias of a
2e5c0 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
2e5d0 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
2e5e0 6c 61 75 73 65 0a 66 6f 6c 6c 6f 77 65 64 20 62  lause.followed b
2e5f0 79 20 22 2e 2a 22 20 74 68 65 6e 20 61 6c 6c 20  y ".*" then all 
2e600 63 6f 6c 75 6d 6e 73 20 66 72 6f 6d 20 74 68 65  columns from the
2e610 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 6f 72 20   named table or 
2e620 73 75 62 71 75 65 72 79 20 61 72 65 0a 73 75 62  subquery are.sub
2e630 73 74 69 74 75 74 65 64 20 66 6f 72 20 74 68 65  stituted for the
2e640 20 73 69 6e 67 6c 65 20 65 78 70 72 65 73 73 69   single expressi
2e650 6f 6e 2e 29 5e 20 5e 28 49 74 20 69 73 20 61 6e  on.)^ ^(It is an
2e660 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61 20   error to use a 
2e670 22 2a 22 20 6f 72 0a 22 61 6c 69 61 73 2e 2a 22  "*" or."alias.*"
2e680 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 61   expression in a
2e690 6e 79 20 63 6f 6e 74 65 78 74 20 6f 74 68 65 72  ny context other
2e6a0 20 74 68 61 6e 20 61 20 72 65 73 75 6c 74 20 65   than a result e
2e6b0 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 2e 29  xpression list.)
2e6c0 5e 0a 5e 28 49 74 20 69 73 20 61 6c 73 6f 20 61  ^.^(It is also a
2e6d0 6e 20 65 72 72 6f 72 20 74 6f 20 75 73 65 20 61  n error to use a
2e6e0 20 22 2a 22 20 6f 72 20 22 61 6c 69 61 73 2e 2a   "*" or "alias.*
2e6f0 22 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  " expression in 
2e700 61 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 0a  a simple SELECT.
2e710 71 75 65 72 79 20 74 68 61 74 20 64 6f 65 73 20  query that does 
2e720 6e 6f 74 20 68 61 76 65 20 61 20 46 52 4f 4d 20  not have a FROM 
2e730 63 6c 61 75 73 65 2e 29 5e 0a 0a 3c 70 3e 20 5e  clause.)^..<p> ^
2e740 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63  (The number of c
2e750 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 6f  olumns in the ro
2e760 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 61  ws returned by a
2e770 20 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 20 73   simple SELECT s
2e780 74 61 74 65 6d 65 6e 74 0a 69 73 20 65 71 75 61  tatement.is equa
2e790 6c 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  l to the number 
2e7a0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  of expressions i
2e7b0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 65 78 70  n the result exp
2e7c0 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 61 66 74  ression list aft
2e7d0 65 72 0a 73 75 62 73 74 69 74 75 74 69 6f 6e 20  er.substitution 
2e7e0 6f 66 20 2a 20 61 6e 64 20 61 6c 69 61 73 2e 2a  of * and alias.*
2e7f0 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 29 5e 20   expressions.)^ 
2e800 45 61 63 68 20 72 65 73 75 6c 74 20 72 6f 77 20  Each result row 
2e810 69 73 20 63 61 6c 63 75 6c 61 74 65 64 20 62 79  is calculated by
2e820 0a 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20  .evaluating the 
2e830 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74  expressions in t
2e840 68 65 20 72 65 73 75 6c 74 20 65 78 70 72 65 73  he result expres
2e850 73 69 6f 6e 20 6c 69 73 74 20 77 69 74 68 20 72  sion list with r
2e860 65 73 70 65 63 74 20 74 6f 20 61 0a 73 69 6e 67  espect to a.sing
2e870 6c 65 20 72 6f 77 20 6f 66 20 69 6e 70 75 74 20  le row of input 
2e880 64 61 74 61 20 6f 72 2c 20 66 6f 72 20 61 67 67  data or, for agg
2e890 72 65 67 61 74 65 20 71 75 65 72 69 65 73 2c 20  regate queries, 
2e8a0 77 69 74 68 20 72 65 73 70 65 63 74 20 74 6f 20  with respect to 
2e8b0 61 20 67 72 6f 75 70 0a 6f 66 20 72 6f 77 73 2e  a group.of rows.
2e8c0 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e  ..<ul>.  <li><p>
2e8d0 5e 49 66 20 74 68 65 20 53 45 4c 45 43 54 20 73  ^If the SELECT s
2e8e0 74 61 74 65 6d 65 6e 74 20 69 73 20 3c 62 3e 61  tatement is <b>a
2e8f0 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 71   non-aggregate q
2e900 75 65 72 79 3c 2f 62 3e 2c 20 74 68 65 6e 20 0a  uery</b>, then .
2e910 20 20 20 20 65 61 63 68 20 65 78 70 72 65 73 73      each express
2e920 69 6f 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  ion in the resul
2e930 74 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  t expression lis
2e940 74 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 66  t is evaluated f
2e950 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 0a 20  or each row in. 
2e960 20 20 20 74 68 65 20 64 61 74 61 73 65 74 20 66     the dataset f
2e970 69 6c 74 65 72 65 64 20 62 79 20 74 68 65 20 57  iltered by the W
2e980 48 45 52 45 20 63 6c 61 75 73 65 2e 0a 0a 20 20  HERE clause...  
2e990 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68 65 20 53  <li><p>^If the S
2e9a0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
2e9b0 69 73 20 3c 62 3e 61 6e 20 61 67 67 72 65 67 61  is <b>an aggrega
2e9c0 74 65 20 71 75 65 72 79 20 77 69 74 68 6f 75 74  te query without
2e9d0 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59 3c   a GROUP.    BY<
2e9e0 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68 65 6e  /b> clause, then
2e9f0 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20   each aggregate 
2ea00 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
2ea10 65 20 72 65 73 75 6c 74 2d 73 65 74 20 69 73 20  e result-set is 
2ea20 0a 20 20 20 20 65 76 61 6c 75 61 74 65 64 20 6f  .    evaluated o
2ea30 6e 63 65 20 61 63 72 6f 73 73 20 74 68 65 20 65  nce across the e
2ea40 6e 74 69 72 65 20 64 61 74 61 73 65 74 2e 20 5e  ntire dataset. ^
2ea50 45 61 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61  Each non-aggrega
2ea60 74 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20  te expression.  
2ea70 20 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 2d    in the result-
2ea80 73 65 74 20 69 73 20 65 76 61 6c 75 61 74 65 64  set is evaluated
2ea90 20 6f 6e 63 65 20 66 6f 72 20 61 6e 20 61 72 62   once for an arb
2eaa0 69 74 72 61 72 69 6c 79 20 73 65 6c 65 63 74 65  itrarily selecte
2eab0 64 20 72 6f 77 20 6f 66 0a 20 20 20 20 74 68 65  d row of.    the
2eac0 20 64 61 74 61 73 65 74 2e 20 5e 54 68 65 20 73   dataset. ^The s
2ead0 61 6d 65 20 61 72 62 69 74 72 61 72 69 6c 79 20  ame arbitrarily 
2eae0 73 65 6c 65 63 74 65 64 20 72 6f 77 20 69 73 20  selected row is 
2eaf0 75 73 65 64 20 66 6f 72 20 65 61 63 68 0a 20 20  used for each.  
2eb00 20 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20    non-aggregate 
2eb10 65 78 70 72 65 73 73 69 6f 6e 2e 20 5e 4f 72 2c  expression. ^Or,
2eb20 20 69 66 20 74 68 65 20 64 61 74 61 73 65 74 20   if the dataset 
2eb30 63 6f 6e 74 61 69 6e 73 20 7a 65 72 6f 20 72 6f  contains zero ro
2eb40 77 73 2c 20 74 68 65 6e 20 0a 20 20 20 20 65 61  ws, then .    ea
2eb50 63 68 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65  ch non-aggregate
2eb60 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 65   expression is e
2eb70 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74  valuated against
2eb80 20 61 20 72 6f 77 20 63 6f 6e 73 69 73 74 69 6e   a row consistin
2eb90 67 0a 20 20 20 20 65 6e 74 69 72 65 6c 79 20 6f  g.    entirely o
2eba0 66 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 0a  f NULL values...
2ebb0 20 20 20 3c 70 3e 5e 54 68 65 20 73 69 6e 67 6c     <p>^The singl
2ebc0 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 2d  e row of result-
2ebd0 73 65 74 20 64 61 74 61 20 63 72 65 61 74 65 64  set data created
2ebe0 20 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74   by evaluating t
2ebf0 68 65 20 61 67 67 72 65 67 61 74 65 0a 20 20 20  he aggregate.   
2ec00 20 61 6e 64 20 6e 6f 6e 2d 61 67 67 72 65 67 61   and non-aggrega
2ec10 74 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  te expressions i
2ec20 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
2ec30 20 66 6f 72 6d 73 20 74 68 65 20 72 65 73 75 6c   forms the resul
2ec40 74 20 6f 66 20 61 6e 0a 20 20 20 20 61 67 67 72  t of an.    aggr
2ec50 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68  egate query with
2ec60 6f 75 74 20 61 20 47 52 4f 55 50 20 42 59 20 63  out a GROUP BY c
2ec70 6c 61 75 73 65 2e 20 5e 41 6e 20 61 67 67 72 65  lause. ^An aggre
2ec80 67 61 74 65 20 71 75 65 72 79 20 77 69 74 68 6f  gate query witho
2ec90 75 74 20 61 0a 20 20 20 20 47 52 4f 55 50 20 42  ut a.    GROUP B
2eca0 59 20 63 6c 61 75 73 65 20 61 6c 77 61 79 73 20  Y clause always 
2ecb0 72 65 74 75 72 6e 73 20 65 78 61 63 74 6c 79 20  returns exactly 
2ecc0 6f 6e 65 20 72 6f 77 20 6f 66 20 64 61 74 61 2c  one row of data,
2ecd0 20 65 76 65 6e 20 69 66 20 74 68 65 72 65 20 61   even if there a
2ece0 72 65 0a 20 20 20 20 7a 65 72 6f 20 72 6f 77 73  re.    zero rows
2ecf0 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 2e 0a   of input data..
2ed00 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 28 49 66 20 74  .  <li><p>^(If t
2ed10 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
2ed20 65 6e 74 20 69 73 20 3c 62 3e 61 6e 20 61 67 67  ent is <b>an agg
2ed30 72 65 67 61 74 65 20 71 75 65 72 79 20 77 69 74  regate query wit
2ed40 68 20 61 20 47 52 4f 55 50 0a 20 20 20 20 42 59  h a GROUP.    BY
2ed50 3c 2f 62 3e 20 63 6c 61 75 73 65 2c 20 74 68 65  </b> clause, the
2ed60 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 65 78  n each of the ex
2ed70 70 72 65 73 73 69 6f 6e 73 20 73 70 65 63 69 66  pressions specif
2ed80 69 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  ied as part of t
2ed90 68 65 0a 20 20 20 20 47 52 4f 55 50 20 42 59 20  he.    GROUP BY 
2eda0 63 6c 61 75 73 65 20 69 73 20 65 76 61 6c 75 61  clause is evalua
2edb0 74 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77  ted for each row
2edc0 20 6f 66 20 74 68 65 20 64 61 74 61 73 65 74 2e   of the dataset.
2edd0 20 45 61 63 68 20 72 6f 77 0a 20 20 20 20 69 73   Each row.    is
2ede0 20 74 68 65 6e 20 61 73 73 69 67 6e 65 64 20 74   then assigned t
2edf0 6f 20 61 20 22 67 72 6f 75 70 22 20 62 61 73 65  o a "group" base
2ee00 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  d on the results
2ee10 3b 20 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68  ; rows for which
2ee20 0a 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 73  .    the results
2ee30 20 6f 66 20 65 76 61 6c 75 61 74 69 6e 67 20 74   of evaluating t
2ee40 68 65 20 47 52 4f 55 50 20 42 59 20 65 78 70 72  he GROUP BY expr
2ee50 65 73 73 69 6f 6e 73 20 61 72 65 20 74 68 65 20  essions are the 
2ee60 73 61 6d 65 20 67 65 74 0a 20 20 20 20 61 73 73  same get.    ass
2ee70 69 67 6e 65 64 20 74 6f 20 74 68 65 20 73 61 6d  igned to the sam
2ee80 65 20 67 72 6f 75 70 2e 29 5e 20 5e 46 6f 72 20  e group.)^ ^For 
2ee90 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
2eea0 67 72 6f 75 70 69 6e 67 20 72 6f 77 73 2c 20 4e  grouping rows, N
2eeb0 55 4c 4c 20 0a 20 20 20 20 76 61 6c 75 65 73 20  ULL .    values 
2eec0 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 65  are considered e
2eed0 71 75 61 6c 2e 20 5e 54 68 65 20 75 73 75 61 6c  qual. ^The usual
2eee0 20 72 75 6c 65 73 20 66 6f 72 20 5b 63 6f 6c 6c   rules for [coll
2eef0 61 74 69 6f 6e 7c 73 65 6c 65 63 74 69 6e 67 20  ation|selecting 
2ef00 61 0a 20 20 20 20 63 6f 6c 6c 61 74 69 6f 6e 20  a.    collation 
2ef10 73 65 71 75 65 6e 63 65 5d 20 77 69 74 68 20 77  sequence] with w
2ef20 68 69 63 68 20 74 6f 20 63 6f 6d 70 61 72 65 20  hich to compare 
2ef30 74 65 78 74 20 76 61 6c 75 65 73 20 61 70 70 6c  text values appl
2ef40 79 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69 6e  y when evaluatin
2ef50 67 0a 20 20 20 20 65 78 70 72 65 73 73 69 6f 6e  g.    expression
2ef60 73 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20  s in a GROUP BY 
2ef70 63 6c 61 75 73 65 2e 20 20 5e 54 68 65 20 65 78  clause.  ^The ex
2ef80 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 74 68 65  pressions in the
2ef90 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2efa0 0a 20 20 20 20 64 6f 20 3c 65 6d 3e 6e 6f 74 3c  .    do <em>not<
2efb0 2f 65 6d 3e 20 68 61 76 65 20 74 6f 20 62 65 20  /em> have to be 
2efc0 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61 74  expressions that
2efd0 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 72   appear in the r
2efe0 65 73 75 6c 74 2e 20 5e 54 68 65 0a 20 20 20 20  esult. ^The.    
2eff0 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 20 61  expressions in a
2f000 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
2f010 20 6d 61 79 20 6e 6f 74 20 62 65 20 61 67 67 72   may not be aggr
2f020 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f 6e  egate expression
2f030 73 2e 0a 0a 20 20 20 20 3c 70 3e 5e 28 49 66 20  s...    <p>^(If 
2f040 61 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  a HAVING clause 
2f050 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 69 74  is specified, it
2f060 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e   is evaluated on
2f070 63 65 20 66 6f 72 20 65 61 63 68 20 67 72 6f 75  ce for each grou
2f080 70 20 0a 20 20 20 20 6f 66 20 72 6f 77 73 20 61  p .    of rows a
2f090 73 20 61 20 5b 62 6f 6f 6c 65 61 6e 20 65 78 70  s a [boolean exp
2f0a0 72 65 73 73 69 6f 6e 5d 2e 20 49 66 20 74 68 65  ression]. If the
2f0b0 20 72 65 73 75 6c 74 20 6f 66 20 65 76 61 6c 75   result of evalu
2f0c0 61 74 69 6e 67 20 74 68 65 0a 20 20 20 20 48 41  ating the.    HA
2f0d0 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 66  VING clause is f
2f0e0 61 6c 73 65 2c 20 74 68 65 20 67 72 6f 75 70 20  alse, the group 
2f0f0 69 73 20 64 69 73 63 61 72 64 65 64 2e 29 5e 20  is discarded.)^ 
2f100 5e 49 66 20 74 68 65 20 48 41 56 49 4e 47 20 63  ^If the HAVING c
2f110 6c 61 75 73 65 20 69 73 0a 20 20 20 20 61 6e 20  lause is.    an 
2f120 61 67 67 72 65 67 61 74 65 20 65 78 70 72 65 73  aggregate expres
2f130 73 69 6f 6e 2c 20 69 74 20 69 73 20 65 76 61 6c  sion, it is eval
2f140 75 61 74 65 64 20 61 63 72 6f 73 73 20 61 6c 6c  uated across all
2f150 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67 72 6f   rows in the gro
2f160 75 70 2e 20 5e 49 66 0a 20 20 20 20 61 20 48 41  up. ^If.    a HA
2f170 56 49 4e 47 20 63 6c 61 75 73 65 20 69 73 20 61  VING clause is a
2f180 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74 65 20 65   non-aggregate e
2f190 78 70 72 65 73 73 69 6f 6e 2c 20 69 74 20 69 73  xpression, it is
2f1a0 20 65 76 61 6c 75 61 74 65 64 20 77 69 74 68 20   evaluated with 
2f1b0 72 65 73 70 65 63 74 0a 20 20 20 20 74 6f 20 61  respect.    to a
2f1c0 6e 20 61 72 62 69 74 72 61 72 69 6c 79 20 73 65  n arbitrarily se
2f1d0 6c 65 63 74 65 64 20 72 6f 77 20 66 72 6f 6d 20  lected row from 
2f1e0 74 68 65 20 67 72 6f 75 70 2e 20 20 5e 54 68 65  the group.  ^The
2f1f0 20 48 41 56 49 4e 47 20 65 78 70 72 65 73 73 69   HAVING expressi
2f200 6f 6e 20 6d 61 79 0a 20 20 20 20 72 65 66 65 72  on may.    refer
2f210 20 74 6f 20 76 61 6c 75 65 73 2c 20 65 76 65 6e   to values, even
2f220 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
2f230 69 6f 6e 73 2c 20 74 68 61 74 20 61 72 65 20 6e  ions, that are n
2f240 6f 74 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ot in the result
2f250 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c 70 3e 5e 45  .</p>..    <p>^E
2f260 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
2f270 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
2f280 20 69 73 20 74 68 65 6e 20 65 76 61 6c 75 61 74   is then evaluat
2f290 65 64 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  ed once for each
2f2a0 0a 20 20 20 20 67 72 6f 75 70 20 6f 66 20 72 6f  .    group of ro
2f2b0 77 73 2e 20 5e 49 66 20 74 68 65 20 65 78 70 72  ws. ^If the expr
2f2c0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 61 67 67  ession is an agg
2f2d0 72 65 67 61 74 65 20 65 78 70 72 65 73 73 69 6f  regate expressio
2f2e0 6e 2c 20 69 74 20 69 73 20 0a 20 20 20 20 65 76  n, it is .    ev
2f2f0 61 6c 75 61 74 65 64 20 61 63 72 6f 73 73 20 61  aluated across a
2f300 6c 6c 20 72 6f 77 73 20 69 6e 20 74 68 65 20 67  ll rows in the g
2f310 72 6f 75 70 2e 20 5e 4f 74 68 65 72 77 69 73 65  roup. ^Otherwise
2f320 2c 20 69 74 20 69 73 20 65 76 61 6c 75 61 74 65  , it is evaluate
2f330 64 20 61 67 61 69 6e 73 74 0a 20 20 20 20 61 20  d against.    a 
2f340 73 69 6e 67 6c 65 20 61 72 62 69 74 72 61 72 69  single arbitrari
2f350 6c 79 20 63 68 6f 73 65 6e 20 72 6f 77 20 66 72  ly chosen row fr
2f360 6f 6d 20 77 69 74 68 69 6e 20 74 68 65 20 67 72  om within the gr
2f370 6f 75 70 2e 20 5e 49 66 20 74 68 65 72 65 20 69  oup. ^If there i
2f380 73 20 6d 6f 72 65 0a 20 20 20 20 74 68 61 6e 20  s more.    than 
2f390 6f 6e 65 20 6e 6f 6e 2d 61 67 67 72 65 67 61 74  one non-aggregat
2f3a0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  e expression in 
2f3b0 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74 2c 20  the result-set, 
2f3c0 74 68 65 6e 20 61 6c 6c 20 73 75 63 68 0a 20 20  then all such.  
2f3d0 20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72    expressions ar
2f3e0 65 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72 20  e evaluated for 
2f3f0 74 68 65 20 73 61 6d 65 20 72 6f 77 2e 0a 0a 20  the same row... 
2f400 20 20 20 3c 70 3e 5e 45 61 63 68 20 67 72 6f 75     <p>^Each grou
2f410 70 20 6f 66 20 69 6e 70 75 74 20 64 61 74 61 73  p of input datas
2f420 65 74 20 72 6f 77 73 20 63 6f 6e 74 72 69 62 75  et rows contribu
2f430 74 65 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  tes a single row
2f440 20 74 6f 20 74 68 65 20 0a 20 20 20 20 73 65 74   to the .    set
2f450 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 2e   of result rows.
2f460 20 5e 53 75 62 6a 65 63 74 20 74 6f 20 66 69 6c   ^Subject to fil
2f470 74 65 72 69 6e 67 20 61 73 73 6f 63 69 61 74 65  tering associate
2f480 64 20 77 69 74 68 20 74 68 65 20 44 49 53 54 49  d with the DISTI
2f490 4e 43 54 0a 20 20 20 20 6b 65 79 77 6f 72 64 2c  NCT.    keyword,
2f4a0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2f4b0 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ows returned by 
2f4c0 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
2f4d0 72 79 20 77 69 74 68 20 61 20 47 52 4f 55 50 0a  ry with a GROUP.
2f4e0 20 20 20 20 42 59 20 63 6c 61 75 73 65 20 69 73      BY clause is
2f4f0 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
2f500 20 6e 75 6d 62 65 72 20 6f 66 20 67 72 6f 75 70   number of group
2f510 73 20 6f 66 20 72 6f 77 73 20 70 72 6f 64 75 63  s of rows produc
2f520 65 64 20 62 79 20 61 70 70 6c 79 69 6e 67 0a 20  ed by applying. 
2f530 20 20 20 74 68 65 20 47 52 4f 55 50 20 42 59 20     the GROUP BY 
2f540 61 6e 64 20 48 41 56 49 4e 47 20 63 6c 61 75 73  and HAVING claus
2f550 65 73 20 74 6f 20 74 68 65 20 66 69 6c 74 65 72  es to the filter
2f560 65 64 20 69 6e 70 75 74 20 64 61 74 61 73 65 74  ed input dataset
2f570 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 74 63 6c 3e 68 64  ..</ul>..<tcl>hd
2f580 5f 66 72 61 67 6d 65 6e 74 20 62 61 72 65 61 67  _fragment bareag
2f590 67 20 7b 62 61 72 65 20 61 67 67 72 65 67 61 74  g {bare aggregat
2f5a0 65 20 74 65 72 6d 73 7d 3c 2f 74 63 6c 3e 0a 3c  e terms}</tcl>.<
2f5b0 70 3e 3c 62 3e 53 69 64 65 20 6e 6f 74 65 3a 20  p><b>Side note: 
2f5c0 42 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  Bare columns in 
2f5d0 61 6e 20 61 67 67 72 65 67 61 74 65 20 71 75 65  an aggregate que
2f5e0 72 69 65 73 2e 3c 2f 62 3e 0a 54 68 65 20 75 73  ries.</b>.The us
2f5f0 75 61 6c 20 63 61 73 65 20 69 73 20 74 68 61 74  ual case is that
2f600 20 61 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65   all column name
2f610 73 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  s in an aggregat
2f620 65 20 71 75 65 72 79 20 61 72 65 20 65 69 74 68  e query are eith
2f630 65 72 0a 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  er.arguments to 
2f640 5b 61 67 67 66 75 6e 63 7c 61 67 67 72 65 67 61  [aggfunc|aggrega
2f650 74 65 20 66 75 6e 63 74 69 6f 6e 73 5d 20 6f 72  te functions] or
2f660 20 65 6c 73 65 20 61 70 70 65 61 72 20 69 6e 20   else appear in 
2f670 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  the GROUP BY cla
2f680 75 73 65 2e 0a 41 20 72 65 73 75 6c 74 20 63 6f  use..A result co
2f690 6c 75 6d 6e 20 77 68 69 63 68 20 63 6f 6e 74 61  lumn which conta
2f6a0 69 6e 73 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ins a column nam
2f6b0 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20 77 69  e that is not wi
2f6c0 74 68 69 6e 20 61 6e 0a 61 67 67 72 65 67 61 74  thin an.aggregat
2f6d0 65 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 74  e function and t
2f6e0 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 61 70 70  hat does not app
2f6f0 65 61 72 20 69 6e 20 74 68 65 20 47 52 4f 55 50  ear in the GROUP
2f700 20 42 59 20 63 6c 61 75 73 65 20 28 69 66 0a 6f   BY clause (if.o
2f710 6e 65 20 65 78 69 73 74 73 29 20 69 73 20 63 61  ne exists) is ca
2f720 6c 6c 65 64 20 61 20 22 62 61 72 65 22 20 63 6f  lled a "bare" co
2f730 6c 75 6d 6e 2e 0a 45 78 61 6d 70 6c 65 3a 0a 3c  lumn..Example:.<
2f740 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
2f750 0a 53 45 4c 45 43 54 20 61 2c 20 62 2c 20 73 75  .SELECT a, b, su
2f760 6d 28 63 29 20 46 52 4f 4d 20 74 61 62 31 20 47  m(c) FROM tab1 G
2f770 52 4f 55 50 20 42 59 20 61 3b 0a 3c 2f 70 72 65  ROUP BY a;.</pre
2f780 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c  ></blockquote>.<
2f790 70 3e 49 6e 20 74 68 65 20 71 75 65 72 79 20 61  p>In the query a
2f7a0 62 6f 76 65 2c 20 74 68 65 20 22 61 22 20 63 6f  bove, the "a" co
2f7b0 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
2f7c0 74 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  the GROUP BY cla
2f7d0 75 73 65 0a 61 6e 64 20 73 6f 20 65 61 63 68 20  use.and so each 
2f7e0 72 6f 77 20 6f 66 20 74 68 65 20 6f 75 74 70 75  row of the outpu
2f7f0 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
2f800 66 20 74 68 65 20 64 69 73 74 69 6e 63 74 20 76  f the distinct v
2f810 61 6c 75 65 73 20 66 6f 72 0a 22 61 22 2e 20 20  alues for."a".  
2f820 54 68 65 20 22 63 22 20 63 6f 6c 75 6d 6e 20 69  The "c" column i
2f830 73 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  s contained with
2f840 69 6e 20 74 68 65 20 5b 73 75 6d 28 29 5d 20 61  in the [sum()] a
2f850 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
2f860 6e 0a 61 6e 64 20 73 6f 20 74 68 61 74 20 6f 75  n.and so that ou
2f870 74 70 75 74 20 63 6f 6c 75 6d 6e 20 69 73 20 74  tput column is t
2f880 68 65 20 73 75 6d 20 6f 66 20 61 6c 6c 20 22 63  he sum of all "c
2f890 22 20 76 61 6c 75 65 73 20 69 6e 20 72 6f 77 73  " values in rows
2f8a0 20 74 68 61 74 0a 68 61 76 65 20 74 68 65 20 73   that.have the s
2f8b0 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 22 61  ame value for "a
2f8c0 22 2e 20 20 42 75 74 20 77 68 61 74 20 69 73 20  ".  But what is 
2f8d0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
2f8e0 65 20 62 61 72 65 20 0a 63 6f 6c 75 6d 6e 20 22  e bare .column "
2f8f0 62 22 3f 20 54 68 65 20 61 6e 73 77 65 72 20 69  b"? The answer i
2f900 73 20 74 68 61 74 20 74 68 65 20 22 62 22 20 72  s that the "b" r
2f910 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 74 68  esult will be th
2f920 65 0a 76 61 6c 75 65 20 66 6f 72 20 22 62 22 20  e.value for "b" 
2f930 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  in one of the in
2f940 70 75 74 20 72 6f 77 73 20 74 68 61 74 20 66 6f  put rows that fo
2f950 72 6d 20 74 68 65 20 61 67 67 72 65 67 61 74 65  rm the aggregate
2f960 2e 0a 54 68 65 20 70 72 6f 62 6c 65 6d 20 69 73  ..The problem is
2f970 20 74 68 61 74 20 79 6f 75 20 75 73 75 61 6c 6c   that you usuall
2f980 79 20 64 6f 20 6e 6f 74 20 6b 6e 6f 77 20 77 68  y do not know wh
2f990 69 63 68 20 69 6e 70 75 74 20 72 6f 77 20 69 73  ich input row is
2f9a0 20 75 73 65 64 0a 74 6f 20 63 6f 6d 70 75 74 65   used.to compute
2f9b0 20 22 62 22 2c 20 61 6e 64 20 73 6f 20 69 6e 20   "b", and so in 
2f9c0 6d 61 6e 79 20 63 61 73 65 73 20 74 68 65 20 76  many cases the v
2f9d0 61 6c 75 65 20 66 6f 72 20 22 62 22 20 69 73 20  alue for "b" is 
2f9e0 75 6e 64 65 66 69 6e 65 64 2e 0a 3c 2f 70 3e 0a  undefined..</p>.
2f9f0 3c 70 3e 0a 53 70 65 63 69 61 6c 20 70 72 6f 63  <p>.Special proc
2fa00 65 73 73 69 6e 67 20 6f 63 63 75 72 73 20 6f 63  essing occurs oc
2fa10 63 75 72 73 20 77 68 65 6e 20 74 68 65 20 61 67  curs when the ag
2fa20 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
2fa30 20 69 73 20 0a 65 69 74 68 65 72 20 5b 6d 61 78   is .either [max
2fa40 41 67 67 46 75 6e 63 7c 6d 69 6e 28 29 5d 20 6f  AggFunc|min()] o
2fa50 72 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 61  r [minAggFunc|ma
2fa60 78 28 29 5d 2e 20 20 45 78 61 6d 70 6c 65 3a 0a  x()].  Example:.
2fa70 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
2fa80 3e 0a 53 45 4c 45 43 54 20 61 2c 20 62 2c 20 6d  >.SELECT a, b, m
2fa90 61 78 28 63 29 20 46 52 4f 4d 20 74 61 62 31 20  ax(c) FROM tab1 
2faa0 47 52 4f 55 50 20 42 59 20 61 3b 0a 3c 2f 70 72  GROUP BY a;.</pr
2fab0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
2fac0 57 68 65 6e 20 74 68 65 20 5b 6d 61 78 41 67 67  When the [maxAgg
2fad0 46 75 6e 63 7c 6d 69 6e 28 29 5d 20 6f 72 20 5b  Func|min()] or [
2fae0 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 61 78 28 29  minAggFunc|max()
2faf0 5d 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  ] aggregate func
2fb00 74 69 6f 6e 73 20 0a 61 72 65 20 75 73 65 64 20  tions .are used 
2fb10 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
2fb20 71 75 65 72 79 2c 20 61 6c 6c 20 62 61 72 65 20  query, all bare 
2fb30 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 72  columns in the r
2fb40 65 73 75 6c 74 20 73 65 74 20 0a 74 61 6b 65 20  esult set .take 
2fb50 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20  values from the 
2fb60 69 6e 70 75 74 0a 72 6f 77 20 77 68 69 63 68 20  input.row which 
2fb70 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68  also contains th
2fb80 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 20 6d 61 78  e minimum or max
2fb90 69 6d 75 6d 2e 20 20 53 6f 20 69 6e 20 74 68 65  imum.  So in the
2fba0 20 71 75 65 72 79 0a 61 62 6f 76 65 2c 20 74 68   query.above, th
2fbb0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 22  e value of the "
2fbc0 62 22 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  b" column in the
2fbd0 20 6f 75 74 70 75 74 20 77 69 6c 6c 20 62 65 20   output will be 
2fbe0 74 68 65 20 76 61 6c 75 65 20 6f 66 0a 74 68 65  the value of.the
2fbf0 20 22 62 22 20 63 6f 6c 75 6d 6e 20 69 6e 20 74   "b" column in t
2fc00 68 65 20 69 6e 70 75 74 20 72 6f 77 20 74 68 61  he input row tha
2fc10 74 20 68 61 73 20 74 68 65 20 6c 61 72 67 65 73  t has the larges
2fc20 74 20 22 63 22 20 76 61 6c 75 65 2e 0a 54 68 65  t "c" value..The
2fc30 72 65 20 69 73 20 73 74 69 6c 6c 20 61 6e 20 61  re is still an a
2fc40 6d 62 69 67 75 69 74 79 20 69 66 20 74 77 6f 20  mbiguity if two 
2fc50 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 69  or more of the i
2fc60 6e 70 75 74 20 72 6f 77 73 20 68 61 76 65 20 74  nput rows have t
2fc70 68 65 0a 73 61 6d 65 20 6d 69 6e 69 6d 75 6d 20  he.same minimum 
2fc80 6f 72 20 6d 61 78 69 6d 75 6d 20 76 61 6c 75 65  or maximum value
2fc90 20 6f 72 20 69 66 20 74 68 65 20 71 75 65 72 79   or if the query
2fca0 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
2fcb0 68 61 6e 20 6f 6e 65 0a 6d 69 6e 28 29 20 61 6e  han one.min() an
2fcc0 64 2f 6f 72 20 6d 61 78 28 29 20 61 67 67 72 65  d/or max() aggre
2fcd0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 20 4f  gate function. O
2fce0 6e 6c 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e  nly the built-in
2fcf0 20 5b 6d 69 6e 41 67 67 46 75 6e 63 7c 6d 69 6e   [minAggFunc|min
2fd00 28 29 5d 20 0a 61 6e 64 20 5b 6d 61 78 41 67 67  ()] .and [maxAgg
2fd10 46 75 6e 63 7c 6d 61 78 28 29 5d 20 66 75 6e 63  Func|max()] func
2fd20 74 69 6f 6e 73 20 77 6f 72 6b 20 74 68 69 73 20  tions work this 
2fd30 77 61 79 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 3c 62  way..</p>..<p><b
2fd40 3e 34 2e 20 52 65 6d 6f 76 61 6c 20 6f 66 20 64  >4. Removal of d
2fd50 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20 28 44  uplicate rows (D
2fd60 49 53 54 49 4e 43 54 20 70 72 6f 63 65 73 73 69  ISTINCT processi
2fd70 6e 67 29 2e 3c 2f 62 3e 0a 3c 74 63 6c 3e 68 64  ng).</b>.<tcl>hd
2fd80 5f 66 72 61 67 6d 65 6e 74 20 64 69 73 74 69 6e  _fragment distin
2fd90 63 74 3c 2f 74 63 6c 3e 0a 3c 74 63 6c 3e 68 64  ct</tcl>.<tcl>hd
2fda0 5f 6b 65 79 77 6f 72 64 73 20 7b 44 49 53 54 49  _keywords {DISTI
2fdb0 4e 43 54 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e  NCT}</tcl>..<p>^
2fdc0 4f 6e 65 20 6f 66 20 74 68 65 20 41 4c 4c 20 6f  One of the ALL o
2fdd0 72 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  r DISTINCT keywo
2fde0 72 64 73 20 6d 61 79 20 66 6f 6c 6c 6f 77 20 74  rds may follow t
2fdf0 68 65 20 53 45 4c 45 43 54 20 6b 65 79 77 6f 72  he SELECT keywor
2fe00 64 20 69 6e 20 61 20 0a 73 69 6d 70 6c 65 20 53  d in a .simple S
2fe10 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
2fe20 20 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20   ^If the simple 
2fe30 53 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45  SELECT is a SELE
2fe40 43 54 20 41 4c 4c 2c 20 74 68 65 6e 20 74 68 65  CT ALL, then the
2fe50 0a 65 6e 74 69 72 65 20 73 65 74 20 6f 66 20 72  .entire set of r
2fe60 65 73 75 6c 74 20 72 6f 77 73 20 61 72 65 20 72  esult rows are r
2fe70 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 53  eturned by the S
2fe80 45 4c 45 43 54 2e 20 5e 49 66 20 6e 65 69 74 68  ELECT. ^If neith
2fe90 65 72 20 41 4c 4c 20 6f 72 0a 44 49 53 54 49 4e  er ALL or.DISTIN
2fea0 43 54 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20  CT are present, 
2feb0 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
2fec0 72 20 69 73 20 61 73 20 69 66 20 41 4c 4c 20 77  r is as if ALL w
2fed0 65 72 65 20 73 70 65 63 69 66 69 65 64 2e 20 0a  ere specified. .
2fee0 5e 49 66 20 74 68 65 20 73 69 6d 70 6c 65 20 53  ^If the simple S
2fef0 45 4c 45 43 54 20 69 73 20 61 20 53 45 4c 45 43  ELECT is a SELEC
2ff00 54 20 44 49 53 54 49 4e 43 54 2c 20 74 68 65 6e  T DISTINCT, then
2ff10 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73 20   duplicate rows 
2ff20 61 72 65 20 72 65 6d 6f 76 65 64 0a 66 72 6f 6d  are removed.from
2ff30 20 74 68 65 20 73 65 74 20 6f 66 20 72 65 73 75   the set of resu
2ff40 6c 74 20 72 6f 77 73 20 62 65 66 6f 72 65 20 69  lt rows before i
2ff50 74 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 5e  t is returned. ^
2ff60 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73  For the purposes
2ff70 20 6f 66 0a 64 65 74 65 63 74 69 6e 67 20 64 75   of.detecting du
2ff80 70 6c 69 63 61 74 65 20 72 6f 77 73 2c 20 74 77  plicate rows, tw
2ff90 6f 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72  o NULL values ar
2ffa0 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  e considered to 
2ffb0 62 65 20 65 71 75 61 6c 2e 20 5e 54 68 65 0a 5b  be equal. ^The.[
2ffc0 68 6f 77 20 63 6f 6c 6c 61 74 69 6f 6e 20 69 73  how collation is
2ffd0 20 64 65 74 65 72 6d 69 6e 65 64 7c 75 73 75 61   determined|usua
2ffe0 6c 20 72 75 6c 65 73 5d 20 61 70 70 6c 79 20 66  l rules] apply f
2fff0 6f 72 20 73 65 6c 65 63 74 69 6e 67 20 61 20 63  or selecting a c
30000 6f 6c 6c 61 74 69 6f 6e 0a 73 65 71 75 65 6e 63  ollation.sequenc
30010 65 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  e to compare tex
30020 74 20 76 61 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e  t values...<tcl>
30030 0a 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 6f 6d  .hd_fragment com
30040 70 6f 75 6e 64 20 7b 63 6f 6d 70 6f 75 6e 64 20  pound {compound 
30050 73 65 6c 65 63 74 7d 20 7b 63 6f 6d 70 6f 75 6e  select} {compoun
30060 64 20 71 75 65 72 79 7d 20 7b 63 6f 6d 70 6f 75  d query} {compou
30070 6e 64 20 53 45 4c 45 43 54 7d 20 7b 63 6f 6d 70  nd SELECT} {comp
30080 6f 75 6e 64 20 53 45 4c 45 43 54 73 7d 0a 3c 2f  ound SELECTs}.</
30090 74 63 6c 3e 0a 3c 68 33 3e 43 6f 6d 70 6f 75 6e  tcl>.<h3>Compoun
300a0 64 20 53 65 6c 65 63 74 20 53 74 61 74 65 6d 65  d Select Stateme
300b0 6e 74 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 77 6f  nts</h3>..<p>Two
300c0 20 6f 72 20 6d 6f 72 65 20 5b 73 69 6d 70 6c 65   or more [simple
300d0 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65   SELECT] stateme
300e0 6e 74 73 20 6d 61 79 20 62 65 20 63 6f 6e 6e 65  nts may be conne
300f0 63 74 65 64 20 74 6f 67 65 74 68 65 72 20 74 6f  cted together to
30100 20 66 6f 72 6d 0a 61 20 63 6f 6d 70 6f 75 6e 64   form.a compound
30110 20 53 45 4c 45 43 54 20 75 73 69 6e 67 20 74 68   SELECT using th
30120 65 20 55 4e 49 4f 4e 2c 20 55 4e 49 4f 4e 20 41  e UNION, UNION A
30130 4c 4c 2c 20 49 4e 54 45 52 53 45 43 54 20 6f 72  LL, INTERSECT or
30140 20 45 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72   EXCEPT operator
30150 2c 0a 61 73 20 73 68 6f 77 6e 20 62 79 20 74 68  ,.as shown by th
30160 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 69 61 67  e following diag
30170 72 61 6d 3a 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75  ram:..<tcl>.Recu
30180 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67 72  rsiveBubbleDiagr
30190 61 6d 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65  am compound-sele
301a0 63 74 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  ct-stmt.</tcl>..
301b0 3c 70 3e 5e 49 6e 20 61 20 63 6f 6d 70 6f 75 6e  <p>^In a compoun
301c0 64 20 53 45 4c 45 43 54 2c 20 61 6c 6c 20 74 68  d SELECT, all th
301d0 65 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 53 45  e constituent SE
301e0 4c 45 43 54 73 20 6d 75 73 74 20 72 65 74 75 72  LECTs must retur
301f0 6e 20 74 68 65 20 73 61 6d 65 20 0a 6e 75 6d 62  n the same .numb
30200 65 72 20 6f 66 20 72 65 73 75 6c 74 20 63 6f 6c  er of result col
30210 75 6d 6e 73 2e 20 5e 41 73 20 74 68 65 20 63 6f  umns. ^As the co
30220 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 61 20 63 6f  mponents of a co
30230 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 6d 75  mpound SELECT mu
30240 73 74 0a 62 65 20 73 69 6d 70 6c 65 20 53 45 4c  st.be simple SEL
30250 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2c 20  ECT statements, 
30260 74 68 65 79 20 6d 61 79 20 6e 6f 74 20 63 6f 6e  they may not con
30270 74 61 69 6e 20 5b 4f 52 44 45 52 20 42 59 5d 20  tain [ORDER BY] 
30280 6f 72 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75 73  or [LIMIT] claus
30290 65 73 2e 0a 5e 5b 4f 52 44 45 52 20 42 59 5d 20  es..^[ORDER BY] 
302a0 61 6e 64 20 5b 4c 49 4d 49 54 5d 20 63 6c 61 75  and [LIMIT] clau
302b0 73 65 73 20 6d 61 79 20 6f 6e 6c 79 20 6f 63 63  ses may only occ
302c0 75 72 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ur at the end of
302d0 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f 6d 70   the entire comp
302e0 6f 75 6e 64 0a 53 45 4c 45 43 54 2c 20 61 6e 64  ound.SELECT, and
302f0 20 74 68 65 6e 20 6f 6e 6c 79 20 69 66 20 74 68   then only if th
30300 65 20 66 69 6e 61 6c 20 65 6c 65 6d 65 6e 74 20  e final element 
30310 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20  of the compound 
30320 69 73 20 6e 6f 74 20 61 20 5b 56 41 4c 55 45 53  is not a [VALUES
30330 5d 20 63 6c 61 75 73 65 2e 0a 0a 3c 70 3e 5e 41  ] clause...<p>^A
30340 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54   compound SELECT
30350 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 55   created using U
30360 4e 49 4f 4e 20 41 4c 4c 20 6f 70 65 72 61 74 6f  NION ALL operato
30370 72 20 72 65 74 75 72 6e 73 20 61 6c 6c 20 74 68  r returns all th
30380 65 20 72 6f 77 73 0a 66 72 6f 6d 20 74 68 65 20  e rows.from the 
30390 53 45 4c 45 43 54 20 74 6f 20 74 68 65 20 6c 65  SELECT to the le
303a0 66 74 20 6f 66 20 74 68 65 20 55 4e 49 4f 4e 20  ft of the UNION 
303b0 41 4c 4c 20 6f 70 65 72 61 74 6f 72 2c 20 61 6e  ALL operator, an
303c0 64 20 61 6c 6c 20 74 68 65 20 72 6f 77 73 0a 66  d all the rows.f
303d0 72 6f 6d 20 74 68 65 20 53 45 4c 45 43 54 20 74  rom the SELECT t
303e0 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 69  o the right of i
303f0 74 2e 20 5e 54 68 65 20 55 4e 49 4f 4e 20 6f 70  t. ^The UNION op
30400 65 72 61 74 6f 72 20 77 6f 72 6b 73 20 74 68 65  erator works the
30410 20 73 61 6d 65 20 77 61 79 20 61 73 0a 55 4e 49   same way as.UNI
30420 4f 4e 20 41 4c 4c 2c 20 65 78 63 65 70 74 20 74  ON ALL, except t
30430 68 61 74 20 64 75 70 6c 69 63 61 74 65 20 72 6f  hat duplicate ro
30440 77 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20 66  ws are removed f
30450 72 6f 6d 20 74 68 65 20 66 69 6e 61 6c 20 72 65  rom the final re
30460 73 75 6c 74 20 73 65 74 2e 0a 5e 54 68 65 20 49  sult set..^The I
30470 4e 54 45 52 53 45 43 54 20 6f 70 65 72 61 74 6f  NTERSECT operato
30480 72 20 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e  r returns the in
30490 74 65 72 73 65 63 74 69 6f 6e 20 6f 66 20 74 68  tersection of th
304a0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
304b0 20 6c 65 66 74 20 61 6e 64 0a 72 69 67 68 74 20   left and.right 
304c0 53 45 4c 45 43 54 73 2e 20 20 5e 54 68 65 20 45  SELECTs.  ^The E
304d0 58 43 45 50 54 20 6f 70 65 72 61 74 6f 72 20 72  XCEPT operator r
304e0 65 74 75 72 6e 73 20 74 68 65 20 73 75 62 73 65  eturns the subse
304f0 74 20 6f 66 20 72 6f 77 73 20 72 65 74 75 72 6e  t of rows return
30500 65 64 20 62 79 20 74 68 65 0a 6c 65 66 74 20 53  ed by the.left S
30510 45 4c 45 43 54 20 74 68 61 74 20 61 72 65 20 6e  ELECT that are n
30520 6f 74 20 61 6c 73 6f 20 72 65 74 75 72 6e 65 64  ot also returned
30530 20 62 79 20 74 68 65 20 72 69 67 68 74 2d 68 61   by the right-ha
30540 6e 64 20 53 45 4c 45 43 54 2e 20 5e 44 75 70 6c  nd SELECT. ^Dupl
30550 69 63 61 74 65 0a 72 6f 77 73 20 61 72 65 20 72  icate.rows are r
30560 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20  emoved from the 
30570 72 65 73 75 6c 74 73 20 6f 66 20 49 4e 54 45 52  results of INTER
30580 53 45 43 54 20 61 6e 64 20 45 58 43 45 50 54 20  SECT and EXCEPT 
30590 6f 70 65 72 61 74 6f 72 73 20 62 65 66 6f 72 65  operators before
305a0 20 74 68 65 0a 72 65 73 75 6c 74 20 73 65 74 20   the.result set 
305b0 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a 3c 70  is returned...<p
305c0 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f 73  >^For the purpos
305d0 65 73 20 6f 66 20 64 65 74 65 72 6d 69 6e 69 6e  es of determinin
305e0 67 20 64 75 70 6c 69 63 61 74 65 20 72 6f 77 73  g duplicate rows
305f0 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 73   for the results
30600 20 6f 66 20 63 6f 6d 70 6f 75 6e 64 0a 53 45 4c   of compound.SEL
30610 45 43 54 20 6f 70 65 72 61 74 6f 72 73 2c 20 4e  ECT operators, N
30620 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
30630 6f 6e 73 69 64 65 72 65 64 20 65 71 75 61 6c 20  onsidered equal 
30640 74 6f 20 6f 74 68 65 72 20 4e 55 4c 4c 20 76 61  to other NULL va
30650 6c 75 65 73 20 61 6e 64 0a 64 69 73 74 69 6e 63  lues and.distinc
30660 74 20 66 72 6f 6d 20 61 6c 6c 20 6e 6f 6e 2d 4e  t from all non-N
30670 55 4c 4c 20 76 61 6c 75 65 73 2e 20 5e 54 68 65  ULL values. ^The
30680 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
30690 6e 63 65 20 75 73 65 64 20 74 6f 20 63 6f 6d 70  nce used to comp
306a0 61 72 65 20 0a 74 77 6f 20 74 65 78 74 20 76 61  are .two text va
306b0 6c 75 65 73 20 69 73 20 64 65 74 65 72 6d 69 6e  lues is determin
306c0 65 64 20 61 73 20 69 66 20 74 68 65 20 63 6f 6c  ed as if the col
306d0 75 6d 6e 73 20 6f 66 20 74 68 65 20 6c 65 66 74  umns of the left
306e0 20 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 0a   and right-hand.
306f0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
30700 73 20 77 65 72 65 20 74 68 65 20 6c 65 66 74 20  s were the left 
30710 61 6e 64 20 72 69 67 68 74 2d 68 61 6e 64 20 6f  and right-hand o
30720 70 65 72 61 6e 64 73 20 6f 66 20 74 68 65 20 65  perands of the e
30730 71 75 61 6c 73 20 28 3d 29 0a 6f 70 65 72 61 74  quals (=).operat
30740 6f 72 2c 20 65 78 63 65 70 74 20 74 68 61 74 20  or, except that 
30750 67 72 65 61 74 65 72 20 70 72 65 63 65 64 65 6e  greater preceden
30760 63 65 20 69 73 20 6e 6f 74 20 61 73 73 69 67 6e  ce is not assign
30770 65 64 20 74 6f 20 61 20 63 6f 6c 6c 61 74 69 6f  ed to a collatio
30780 6e 20 0a 73 65 71 75 65 6e 63 65 20 73 70 65 63  n .sequence spec
30790 69 66 69 65 64 20 77 69 74 68 20 74 68 65 20 70  ified with the p
307a0 6f 73 74 66 69 78 20 43 4f 4c 4c 41 54 45 20 6f  ostfix COLLATE o
307b0 70 65 72 61 74 6f 72 2e 20 5e 4e 6f 20 61 66 66  perator. ^No aff
307c0 69 6e 69 74 79 0a 74 72 61 6e 73 66 6f 72 6d 61  inity.transforma
307d0 74 69 6f 6e 73 20 61 72 65 20 61 70 70 6c 69 65  tions are applie
307e0 64 20 74 6f 20 61 6e 79 20 76 61 6c 75 65 73 20  d to any values 
307f0 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 72  when comparing r
30800 6f 77 73 20 61 73 20 70 61 72 74 20 6f 66 20 61  ows as part of a
30810 0a 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54  .compound SELECT
30820 2e 20 0a 0a 3c 70 3e 5e 28 57 68 65 6e 20 74 68  . ..<p>^(When th
30830 72 65 65 20 6f 72 20 6d 6f 72 65 20 73 69 6d 70  ree or more simp
30840 6c 65 20 53 45 4c 45 43 54 73 20 61 72 65 20 63  le SELECTs are c
30850 6f 6e 6e 65 63 74 65 64 20 69 6e 74 6f 20 61 20  onnected into a 
30860 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43 54 2c  compound SELECT,
30870 0a 74 68 65 79 20 67 72 6f 75 70 20 66 72 6f 6d  .they group from
30880 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20   left to right. 
30890 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
308a0 69 66 20 22 41 22 2c 20 22 42 22 20 61 6e 64 20  if "A", "B" and 
308b0 22 43 22 20 61 72 65 20 61 6c 6c 0a 73 69 6d 70  "C" are all.simp
308c0 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  le SELECT statem
308d0 65 6e 74 73 2c 20 28 41 20 6f 70 20 42 20 6f 70  ents, (A op B op
308e0 20 43 29 20 69 73 20 70 72 6f 63 65 73 73 65 64   C) is processed
308f0 20 61 73 20 28 28 41 20 6f 70 20 42 29 20 6f 70   as ((A op B) op
30900 20 43 29 2e 29 5e 0a 0a 3c 2f 70 3e 0a 0a 3c 74   C).)^..</p>..<t
30910 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6f  cl>hd_fragment o
30920 72 64 65 72 62 79 20 7b 6f 72 64 65 72 20 62 79  rderby {order by
30930 7d 20 7b 4f 52 44 45 52 20 42 59 7d 3c 2f 74 63  } {ORDER BY}</tc
30940 6c 3e 0a 3c 68 33 3e 54 68 65 20 4f 52 44 45 52  l>.<h3>The ORDER
30950 20 42 59 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a   BY clause</h3>.
30960 0a 3c 70 3e 49 66 20 61 20 53 45 4c 45 43 54 20  .<p>If a SELECT 
30970 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 72  statement that r
30980 65 74 75 72 6e 73 20 6d 6f 72 65 20 74 68 61 6e  eturns more than
30990 20 6f 6e 65 20 72 6f 77 20 64 6f 65 73 20 6e 6f   one row does no
309a0 74 20 68 61 76 65 20 61 6e 0a 4f 52 44 45 52 20  t have an.ORDER 
309b0 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 20 6f  BY clause, the o
309c0 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68  rder in which th
309d0 65 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  e rows are retur
309e0 6e 65 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ned is undefined
309f0 2e 0a 4f 72 2c 20 69 66 20 61 20 53 45 4c 45 43  ..Or, if a SELEC
30a00 54 20 73 74 61 74 65 6d 65 6e 74 20 64 6f 65 73  T statement does
30a10 20 68 61 76 65 20 61 6e 20 4f 52 44 45 52 20 42   have an ORDER B
30a20 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e 20 74  Y clause, then t
30a30 68 65 20 6c 69 73 74 20 6f 66 0a 65 78 70 72 65  he list of.expre
30a40 73 73 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20  ssions attached 
30a50 74 6f 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  to the ORDER BY 
30a60 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6f 72  determine the or
30a70 64 65 72 20 69 6e 20 77 68 69 63 68 20 72 6f 77  der in which row
30a80 73 0a 61 72 65 20 72 65 74 75 72 6e 65 64 20 74  s.are returned t
30a90 6f 20 74 68 65 20 75 73 65 72 2e 0a 0a 3c 70 3e  o the user...<p>
30aa0 0a 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  .^In a [compound
30ab0 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65   SELECT] stateme
30ac0 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73  nt, only the las
30ad0 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73 74 20  t or right-most 
30ae0 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54 5d 0a  [simple SELECT].
30af0 6d 61 79 20 68 61 76 65 20 61 6e 20 4f 52 44 45  may have an ORDE
30b00 52 20 42 59 20 63 6c 61 75 73 65 2e 20 5e 54 68  R BY clause. ^Th
30b10 61 74 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  at ORDER BY clau
30b20 73 65 20 77 69 6c 6c 20 61 70 70 6c 79 20 61 63  se will apply ac
30b30 72 6f 73 73 20 61 6c 6c 20 65 6c 65 6d 65 6e 74  ross all element
30b40 73 20 6f 66 0a 74 68 65 20 63 6f 6d 70 6f 75 6e  s of.the compoun
30b50 64 2e 20 5e 49 66 20 74 68 65 20 72 69 67 68 74  d. ^If the right
30b60 2d 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  -most element of
30b70 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
30b80 45 43 54 5d 20 69 73 20 61 20 5b 56 41 4c 55 45  ECT] is a [VALUE
30b90 53 5d 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e 20  S] clause,.then 
30ba0 6e 6f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  no ORDER BY clau
30bb0 73 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e  se is allowed on
30bc0 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2e   that statement.
30bd0 0a 0a 0a 3c 70 3e 5e 52 6f 77 73 20 61 72 65 20  ...<p>^Rows are 
30be0 66 69 72 73 74 20 73 6f 72 74 65 64 20 62 61 73  first sorted bas
30bf0 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74  ed on the result
30c00 73 20 6f 66 0a 65 76 61 6c 75 61 74 69 6e 67 20  s of.evaluating 
30c10 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 65 78  the left-most ex
30c20 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
30c30 4f 52 44 45 52 20 42 59 20 6c 69 73 74 2c 20 74  ORDER BY list, t
30c40 68 65 6e 20 74 69 65 73 20 61 72 65 20 62 72 6f  hen ties are bro
30c50 6b 65 6e 0a 62 79 20 65 76 61 6c 75 61 74 69 6e  ken.by evaluatin
30c60 67 20 74 68 65 20 73 65 63 6f 6e 64 20 6c 65 66  g the second lef
30c70 74 2d 6d 6f 73 74 20 65 78 70 72 65 73 73 69 6f  t-most expressio
30c80 6e 20 61 6e 64 20 73 6f 20 6f 6e 2e 20 54 68 65  n and so on. The
30c90 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 0a   order in which.
30ca0 74 77 6f 20 72 6f 77 73 20 66 6f 72 20 77 68 69  two rows for whi
30cb0 63 68 20 61 6c 6c 20 4f 52 44 45 52 20 42 59 20  ch all ORDER BY 
30cc0 65 78 70 72 65 73 73 69 6f 6e 73 20 65 76 61 6c  expressions eval
30cd0 75 61 74 65 20 74 6f 20 65 71 75 61 6c 20 76 61  uate to equal va
30ce0 6c 75 65 73 20 61 72 65 0a 72 65 74 75 72 6e 65  lues are.returne
30cf0 64 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  d is undefined. 
30d00 5e 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65  ^Each ORDER BY e
30d10 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65  xpression may be
30d20 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f 6c 6c   optionally foll
30d30 6f 77 65 64 0a 62 79 20 6f 6e 65 20 6f 66 20 74  owed.by one of t
30d40 68 65 20 6b 65 79 77 6f 72 64 73 20 41 53 43 20  he keywords ASC 
30d50 28 73 6d 61 6c 6c 65 72 20 76 61 6c 75 65 73 20  (smaller values 
30d60 61 72 65 20 72 65 74 75 72 6e 65 64 20 66 69 72  are returned fir
30d70 73 74 29 20 6f 72 20 44 45 53 43 20 28 6c 61 72  st) or DESC (lar
30d80 67 65 72 0a 76 61 6c 75 65 73 20 61 72 65 20 72  ger.values are r
30d90 65 74 75 72 6e 65 64 20 66 69 72 73 74 29 2e 20  eturned first). 
30da0 5e 49 66 20 6e 65 69 74 68 65 72 20 41 53 43 20  ^If neither ASC 
30db0 6f 72 20 44 45 53 43 20 61 72 65 20 73 70 65 63  or DESC are spec
30dc0 69 66 69 65 64 2c 20 72 6f 77 73 0a 61 72 65 20  ified, rows.are 
30dd0 73 6f 72 74 65 64 20 69 6e 20 61 73 63 65 6e 64  sorted in ascend
30de0 69 6e 67 20 28 73 6d 61 6c 6c 65 72 20 76 61 6c  ing (smaller val
30df0 75 65 73 20 66 69 72 73 74 29 20 6f 72 64 65 72  ues first) order
30e00 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c 70   by default...<p
30e10 3e 45 61 63 68 20 4f 52 44 45 52 20 42 59 20 65  >Each ORDER BY e
30e20 78 70 72 65 73 73 69 6f 6e 20 69 73 20 70 72 6f  xpression is pro
30e30 63 65 73 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77  cessed as follow
30e40 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
30e50 3e 3c 70 3e 5e 49 66 20 74 68 65 20 4f 52 44 45  ><p>^If the ORDE
30e60 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
30e70 69 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 69 6e  is a constant in
30e80 74 65 67 65 72 20 4b 20 74 68 65 6e 20 74 68 65  teger K then the
30e90 0a 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 63  .expression is c
30ea0 6f 6e 73 69 64 65 72 65 64 20 61 6e 20 61 6c 69  onsidered an ali
30eb0 61 73 20 66 6f 72 20 74 68 65 20 4b 2d 74 68 20  as for the K-th 
30ec0 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65  column of the re
30ed0 73 75 6c 74 20 73 65 74 0a 28 63 6f 6c 75 6d 6e  sult set.(column
30ee0 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20 66  s are numbered f
30ef0 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
30f00 74 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  t starting with 
30f10 31 29 2e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20  1)...<li><p>^If 
30f20 74 68 65 20 4f 52 44 45 52 20 42 59 20 65 78 70  the ORDER BY exp
30f30 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 69 64  ression is an id
30f40 65 6e 74 69 66 69 65 72 20 74 68 61 74 20 63 6f  entifier that co
30f50 72 72 65 73 70 6f 6e 64 73 20 74 6f 0a 74 68 65  rresponds to.the
30f60 20 61 6c 69 61 73 20 6f 66 20 6f 6e 65 20 6f 66   alias of one of
30f70 20 74 68 65 20 6f 75 74 70 75 74 20 63 6f 6c 75   the output colu
30f80 6d 6e 73 2c 20 74 68 65 6e 20 74 68 65 20 65 78  mns, then the ex
30f90 70 72 65 73 73 69 6f 6e 20 69 73 20 63 6f 6e 73  pression is cons
30fa0 69 64 65 72 65 64 0a 61 6e 20 61 6c 69 61 73 20  idered.an alias 
30fb0 66 6f 72 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e  for that column.
30fc0 0a 0a 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77  ..<li><p>^Otherw
30fd0 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45  ise, if the ORDE
30fe0 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
30ff0 69 73 20 61 6e 79 20 6f 74 68 65 72 20 65 78 70  is any other exp
31000 72 65 73 73 69 6f 6e 2c 20 69 74 20 0a 69 73 20  ression, it .is 
31010 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20 74 68  evaluated and th
31020 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65  e returned value
31030 20 75 73 65 64 20 74 6f 20 6f 72 64 65 72 20 74   used to order t
31040 68 65 20 6f 75 74 70 75 74 20 72 6f 77 73 2e 20  he output rows. 
31050 5e 49 66 0a 74 68 65 20 53 45 4c 45 43 54 20 73  ^If.the SELECT s
31060 74 61 74 65 6d 65 6e 74 20 69 73 20 61 20 73 69  tatement is a si
31070 6d 70 6c 65 20 53 45 4c 45 43 54 2c 20 74 68 65  mple SELECT, the
31080 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6d 61  n an ORDER BY ma
31090 79 20 63 6f 6e 74 61 69 6e 20 61 6e 79 0a 61 72  y contain any.ar
310a0 62 69 74 72 61 72 79 20 65 78 70 72 65 73 73 69  bitrary expressi
310b0 6f 6e 73 2e 20 5e 48 6f 77 65 76 65 72 2c 20 69  ons. ^However, i
310c0 66 20 74 68 65 20 53 45 4c 45 43 54 20 69 73 20  f the SELECT is 
310d0 61 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45 43  a compound SELEC
310e0 54 2c 20 74 68 65 6e 0a 4f 52 44 45 52 20 42 59  T, then.ORDER BY
310f0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 68 61   expressions tha
31100 74 20 61 72 65 20 6e 6f 74 20 61 6c 69 61 73 65  t are not aliase
31110 73 20 74 6f 20 6f 75 74 70 75 74 20 63 6f 6c 75  s to output colu
31120 6d 6e 73 20 6d 75 73 74 20 62 65 20 65 78 61 63  mns must be exac
31130 74 6c 79 0a 74 68 65 20 73 61 6d 65 20 61 73 20  tly.the same as 
31140 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 75 73  an expression us
31150 65 64 20 61 73 20 61 6e 20 6f 75 74 70 75 74 20  ed as an output 
31160 63 6f 6c 75 6d 6e 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  column..</ol>..<
31170 70 3e 5e 46 6f 72 20 74 68 65 20 70 75 72 70 6f  p>^For the purpo
31180 73 65 73 20 6f 66 20 73 6f 72 74 69 6e 67 20 72  ses of sorting r
31190 6f 77 73 2c 20 76 61 6c 75 65 73 20 61 72 65 20  ows, values are 
311a0 63 6f 6d 70 61 72 65 64 20 69 6e 20 74 68 65 20  compared in the 
311b0 73 61 6d 65 20 77 61 79 0a 61 73 20 66 6f 72 20  same way.as for 
311c0 5b 63 6f 6d 70 61 72 69 73 6f 6e 20 65 78 70 72  [comparison expr
311d0 65 73 73 69 6f 6e 73 5d 2e 20 54 68 65 20 63 6f  essions]. The co
311e0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
311f0 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
31200 0a 74 77 6f 20 74 65 78 74 20 76 61 6c 75 65 73  .two text values
31210 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 61   is determined a
31220 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 6f 6c 3e  s follows:..<ol>
31230 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 49 66 20 74 68  .  <li><p>^If th
31240 65 20 4f 52 44 45 52 20 42 59 20 65 78 70 72 65  e ORDER BY expre
31250 73 73 69 6f 6e 20 69 73 20 61 73 73 69 67 6e 65  ssion is assigne
31260 64 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  d a collation se
31270 71 75 65 6e 63 65 20 75 73 69 6e 67 0a 20 20 74  quence using.  t
31280 68 65 20 70 6f 73 74 66 69 78 20 5b 43 4f 4c 4c  he postfix [COLL
31290 41 54 45 20 6f 70 65 72 61 74 6f 72 5d 2c 20 74  ATE operator], t
312a0 68 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65  hen the specifie
312b0 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
312c0 65 6e 63 65 20 69 73 0a 20 20 75 73 65 64 2e 0a  ence is.  used..
312d0 20 20 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77    <li><p>^Otherw
312e0 69 73 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45  ise, if the ORDE
312f0 52 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20  R BY expression 
31300 69 73 20 61 6e 20 61 6c 69 61 73 20 74 6f 20 61  is an alias to a
31310 6e 20 65 78 70 72 65 73 73 69 6f 6e 0a 20 20 74  n expression.  t
31320 68 61 74 20 68 61 73 20 62 65 65 6e 20 61 73 73  hat has been ass
31330 69 67 6e 65 64 20 61 20 63 6f 6c 6c 61 74 69 6f  igned a collatio
31340 6e 20 73 65 71 75 65 6e 63 65 20 75 73 69 6e 67  n sequence using
31350 20 74 68 65 20 70 6f 73 74 66 69 78 20 0a 20 20   the postfix .  
31360 5b 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  [COLLATE operato
31370 72 5d 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6c  r], then the col
31380 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
31390 61 73 73 69 67 6e 65 64 20 74 6f 20 74 68 65 20  assigned to the 
313a0 61 6c 69 61 73 65 64 0a 20 20 65 78 70 72 65 73  aliased.  expres
313b0 73 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 20 20  sion is used..  
313c0 3c 6c 69 3e 3c 70 3e 5e 4f 74 68 65 72 77 69 73  <li><p>^Otherwis
313d0 65 2c 20 69 66 20 74 68 65 20 4f 52 44 45 52 20  e, if the ORDER 
313e0 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  BY expression is
313f0 20 61 20 63 6f 6c 75 6d 6e 20 6f 72 20 61 6e 20   a column or an 
31400 61 6c 69 61 73 20 6f 66 0a 20 20 61 6e 20 65 78  alias of.  an ex
31410 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
31420 20 61 20 63 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20   a column, then 
31430 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  the default coll
31440 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
31450 6f 72 0a 20 20 74 68 65 20 63 6f 6c 75 6d 6e 20  or.  the column 
31460 69 73 20 75 73 65 64 2e 20 0a 20 20 3c 6c 69 3e  is used. .  <li>
31470 3c 70 3e 5e 4f 74 68 65 72 77 69 73 65 2c 20 74  <p>^Otherwise, t
31480 68 65 20 5b 42 49 4e 41 52 59 5d 20 63 6f 6c 6c  he [BINARY] coll
31490 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69  ation sequence i
314a0 73 20 75 73 65 64 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  s used..</ol>..<
314b0 70 3e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64  p>In a [compound
314c0 20 53 45 4c 45 43 54 5d 20 73 74 61 74 65 6d 65   SELECT] stateme
314d0 6e 74 2c 20 61 6c 6c 20 4f 52 44 45 52 20 42 59  nt, all ORDER BY
314e0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72 65   expressions are
314f0 20 68 61 6e 64 6c 65 64 0a 61 73 20 61 6c 69 61   handled.as alia
31500 73 65 73 20 66 6f 72 20 6f 6e 65 20 6f 66 20 74  ses for one of t
31510 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
31520 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 6f 75 6e  s of the compoun
31530 64 2e 0a 5e 28 49 66 20 61 6e 20 4f 52 44 45 52  d..^(If an ORDER
31540 20 42 59 20 65 78 70 72 65 73 73 69 6f 6e 20 69   BY expression i
31550 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
31560 20 61 6c 69 61 73 2c 20 74 68 65 6e 20 53 51 4c   alias, then SQL
31570 69 74 65 20 73 65 61 72 63 68 65 73 0a 74 68 65  ite searches.the
31580 20 6c 65 66 74 2d 6d 6f 73 74 20 53 45 4c 45 43   left-most SELEC
31590 54 20 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e  T in the compoun
315a0 64 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 63  d for a result c
315b0 6f 6c 75 6d 6e 20 74 68 61 74 20 6d 61 74 63 68  olumn that match
315c0 65 73 20 65 69 74 68 65 72 0a 74 68 65 20 73 65  es either.the se
315d0 63 6f 6e 64 20 6f 72 20 74 68 69 72 64 20 72 75  cond or third ru
315e0 6c 65 73 20 61 62 6f 76 65 2e 20 49 66 20 61 20  les above. If a 
315f0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
31600 74 68 65 20 73 65 61 72 63 68 20 73 74 6f 70 73  the search stops
31610 20 61 6e 64 0a 74 68 65 20 65 78 70 72 65 73 73   and.the express
31620 69 6f 6e 20 69 73 20 68 61 6e 64 6c 65 64 20 61  ion is handled a
31630 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
31640 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
31650 20 74 68 61 74 20 69 74 20 68 61 73 20 62 65 65   that it has bee
31660 6e 0a 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73  n.matched agains
31670 74 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 74 68  t. Otherwise, th
31680 65 20 6e 65 78 74 20 53 45 4c 45 43 54 20 74 6f  e next SELECT to
31690 20 74 68 65 20 72 69 67 68 74 20 69 73 20 74 72   the right is tr
316a0 69 65 64 2c 20 61 6e 64 20 73 6f 20 6f 6e 2e 29  ied, and so on.)
316b0 5e 0a 5e 49 66 20 6e 6f 20 6d 61 74 63 68 69 6e  ^.^If no matchin
316c0 67 20 65 78 70 72 65 73 73 69 6f 6e 20 63 61 6e  g expression can
316d0 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   be found in the
316e0 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20   result columns 
316f0 6f 66 20 61 6e 79 0a 63 6f 6e 73 74 69 74 75 65  of any.constitue
31700 6e 74 20 53 45 4c 45 43 54 2c 20 69 74 20 69 73  nt SELECT, it is
31710 20 61 6e 20 65 72 72 6f 72 2e 20 5e 45 61 63 68   an error. ^Each
31720 20 74 65 72 6d 20 6f 66 20 74 68 65 20 4f 52 44   term of the ORD
31730 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 0a  ER BY clause is.
31740 70 72 6f 63 65 73 73 65 64 20 73 65 70 61 72 61  processed separa
31750 74 65 6c 79 20 61 6e 64 20 6d 61 79 20 62 65 20  tely and may be 
31760 6d 61 74 63 68 65 64 20 61 67 61 69 6e 73 74 20  matched against 
31770 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 73 20 66  result columns f
31780 72 6f 6d 20 64 69 66 66 65 72 65 6e 74 0a 53 45  rom different.SE
31790 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
317a0 69 6e 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 2e  in the compound.
317b0 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
317c0 61 67 6d 65 6e 74 20 6c 69 6d 69 74 6f 66 66 73  agment limitoffs
317d0 65 74 20 7b 4c 49 4d 49 54 7d 20 7b 4f 46 46 53  et {LIMIT} {OFFS
317e0 45 54 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  ET}</tcl>.<h3>Th
317f0 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 3c 2f  e LIMIT clause</
31800 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 4c 49 4d  h3>..<p>^The LIM
31810 49 54 20 63 6c 61 75 73 65 20 69 73 20 75 73 65  IT clause is use
31820 64 20 74 6f 20 70 6c 61 63 65 20 61 6e 20 75 70  d to place an up
31830 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74 68 65  per bound on the
31840 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 0a   number of rows.
31850 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20  returned by the 
31860 65 6e 74 69 72 65 20 53 45 4c 45 43 54 20 73 74  entire SELECT st
31870 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 49 6e  atement...<p>^In
31880 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20 53 45 4c   a [compound SEL
31890 45 43 54 5d 2c 20 6f 6e 6c 79 20 74 68 65 0a 6c  ECT], only the.l
318a0 61 73 74 20 6f 72 20 72 69 67 68 74 2d 6d 6f 73  ast or right-mos
318b0 74 20 5b 73 69 6d 70 6c 65 20 53 45 4c 45 43 54  t [simple SELECT
318c0 5d 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61 20  ] may contain a 
318d0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 0a  LIMIT clause.  .
318e0 5e 49 6e 20 61 20 5b 63 6f 6d 70 6f 75 6e 64 20  ^In a [compound 
318f0 53 45 4c 45 43 54 5d 2c 20 0a 74 68 65 20 4c 49  SELECT], .the LI
31900 4d 49 54 20 63 6c 61 75 73 65 20 61 70 70 6c 69  MIT clause appli
31910 65 73 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  es to the entire
31920 20 63 6f 6d 70 6f 75 6e 64 2c 20 6e 6f 74 20 6a   compound, not j
31930 75 73 74 20 74 68 65 20 66 69 6e 61 6c 20 53 45  ust the final SE
31940 4c 45 43 54 2e 0a 5e 49 66 20 74 68 65 20 72 69  LECT..^If the ri
31950 67 68 74 2d 6d 6f 73 74 20 5b 73 69 6d 70 6c 65  ght-most [simple
31960 20 53 45 4c 45 43 54 5d 20 69 73 20 61 20 5b 56   SELECT] is a [V
31970 41 4c 55 45 53 20 63 6c 61 75 73 65 5d 20 74 68  ALUES clause] th
31980 65 6e 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  en no LIMIT clau
31990 73 65 0a 69 73 20 61 6c 6c 6f 77 65 64 2e 0a 0a  se.is allowed...
319a0 3c 70 3e 5e 41 6e 79 20 73 63 61 6c 61 72 20 65  <p>^Any scalar e
319b0 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 62 65  xpression may be
319c0 20 75 73 65 64 20 69 6e 20 74 68 65 20 0a 4c 49   used in the .LI
319d0 4d 49 54 20 63 6c 61 75 73 65 2c 20 73 6f 20 6c  MIT clause, so l
319e0 6f 6e 67 20 61 73 20 69 74 20 65 76 61 6c 75 61  ong as it evalua
319f0 74 65 73 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  tes to an intege
31a00 72 20 6f 72 20 61 20 76 61 6c 75 65 20 74 68 61  r or a value tha
31a10 74 20 63 61 6e 20 62 65 0a 6c 6f 73 73 6c 65 73  t can be.lossles
31a20 73 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  sly converted to
31a30 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 5e 49 66   an integer. ^If
31a40 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
31a50 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 4e  evaluates to a N
31a60 55 4c 4c 20 0a 76 61 6c 75 65 20 6f 72 20 61 6e  ULL .value or an
31a70 79 20 6f 74 68 65 72 20 76 61 6c 75 65 20 74 68  y other value th
31a80 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73  at cannot be los
31a90 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72 74 65  slessly converte
31aa0 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 2c  d to an integer,
31ab0 20 61 6e 0a 65 72 72 6f 72 20 69 73 20 72 65 74   an.error is ret
31ac0 75 72 6e 65 64 2e 20 5e 49 66 20 74 68 65 20 4c  urned. ^If the L
31ad0 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 20  IMIT expression 
31ae0 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 6e  evaluates to a n
31af0 65 67 61 74 69 76 65 20 76 61 6c 75 65 2c 0a 74  egative value,.t
31b00 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20  hen there is no 
31b10 75 70 70 65 72 20 62 6f 75 6e 64 20 6f 6e 20 74  upper bound on t
31b20 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
31b30 73 20 72 65 74 75 72 6e 65 64 2e 20 5e 4f 74 68  s returned. ^Oth
31b40 65 72 77 69 73 65 2c 20 74 68 65 0a 53 45 4c 45  erwise, the.SELE
31b50 43 54 20 72 65 74 75 72 6e 73 20 74 68 65 20 66  CT returns the f
31b60 69 72 73 74 20 4e 20 72 6f 77 73 20 6f 66 20 69  irst N rows of i
31b70 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 6f 6e  ts result set on
31b80 6c 79 2c 20 77 68 65 72 65 20 4e 20 69 73 20 74  ly, where N is t
31b90 68 65 20 76 61 6c 75 65 0a 74 68 61 74 20 74 68  he value.that th
31ba0 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
31bb0 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 2e  on evaluates to.
31bc0 20 5e 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c   ^Or, if the SEL
31bd0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  ECT statement wo
31be0 75 6c 64 0a 72 65 74 75 72 6e 20 6c 65 73 73 20  uld.return less 
31bf0 74 68 61 6e 20 4e 20 72 6f 77 73 20 77 69 74 68  than N rows with
31c00 6f 75 74 20 61 20 4c 49 4d 49 54 20 63 6c 61 75  out a LIMIT clau
31c10 73 65 2c 20 74 68 65 6e 20 74 68 65 20 65 6e 74  se, then the ent
31c20 69 72 65 20 72 65 73 75 6c 74 20 73 65 74 20 69  ire result set i
31c30 73 0a 72 65 74 75 72 6e 65 64 2e 20 0a 0a 3c 70  s.returned. ..<p
31c40 3e 5e 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  >^The expression
31c50 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
31c60 20 6f 70 74 69 6f 6e 61 6c 20 4f 46 46 53 45 54   optional OFFSET
31c70 20 63 6c 61 75 73 65 20 74 68 61 74 20 6d 61 79   clause that may
31c80 20 66 6f 6c 6c 6f 77 20 61 0a 4c 49 4d 49 54 20   follow a.LIMIT 
31c90 63 6c 61 75 73 65 20 6d 75 73 74 20 61 6c 73 6f  clause must also
31ca0 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 6e 20   evaluate to an 
31cb0 69 6e 74 65 67 65 72 2c 20 6f 72 20 61 20 76 61  integer, or a va
31cc0 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65 0a  lue that can be.
31cd0 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65  losslessly conve
31ce0 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
31cf0 65 72 2e 20 5e 49 66 20 61 6e 20 65 78 70 72 65  er. ^If an expre
31d00 73 73 69 6f 6e 20 68 61 73 20 61 6e 20 4f 46 46  ssion has an OFF
31d10 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65 6e  SET clause,.then
31d20 20 74 68 65 20 66 69 72 73 74 20 4d 20 72 6f 77   the first M row
31d30 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 66 72  s are omitted fr
31d40 6f 6d 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  om the result se
31d50 74 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  t returned by th
31d60 65 20 53 45 4c 45 43 54 0a 73 74 61 74 65 6d 65  e SELECT.stateme
31d70 6e 74 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  nt and the next 
31d80 4e 20 72 6f 77 73 20 61 72 65 20 72 65 74 75 72  N rows are retur
31d90 6e 65 64 2c 20 77 68 65 72 65 20 4d 20 61 6e 64  ned, where M and
31da0 20 4e 20 61 72 65 20 74 68 65 20 76 61 6c 75 65   N are the value
31db0 73 20 74 68 61 74 0a 74 68 65 20 4f 46 46 53 45  s that.the OFFSE
31dc0 54 20 61 6e 64 20 4c 49 4d 49 54 20 63 6c 61 75  T and LIMIT clau
31dd0 73 65 73 20 65 76 61 6c 75 61 74 65 20 74 6f 2c  ses evaluate to,
31de0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 5e   respectively. ^
31df0 4f 72 2c 20 69 66 20 74 68 65 20 53 45 4c 45 43  Or, if the SELEC
31e00 54 0a 77 6f 75 6c 64 20 72 65 74 75 72 6e 20 6c  T.would return l
31e10 65 73 73 20 74 68 61 6e 20 4d 2b 4e 20 72 6f 77  ess than M+N row
31e20 73 20 69 66 20 69 74 20 64 69 64 20 6e 6f 74 20  s if it did not 
31e30 68 61 76 65 20 61 20 4c 49 4d 49 54 20 63 6c 61  have a LIMIT cla
31e40 75 73 65 2c 20 74 68 65 6e 20 74 68 65 0a 66 69  use, then the.fi
31e50 72 73 74 20 4d 20 72 6f 77 73 20 61 72 65 20 73  rst M rows are s
31e60 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20 72  kipped and the r
31e70 65 6d 61 69 6e 69 6e 67 20 72 6f 77 73 20 28 69  emaining rows (i
31e80 66 20 61 6e 79 29 20 61 72 65 20 72 65 74 75 72  f any) are retur
31e90 6e 65 64 2e 20 5e 49 66 20 74 68 65 0a 4f 46 46  ned. ^If the.OFF
31ea0 53 45 54 20 63 6c 61 75 73 65 20 65 76 61 6c 75  SET clause evalu
31eb0 61 74 65 73 20 74 6f 20 61 20 6e 65 67 61 74 69  ates to a negati
31ec0 76 65 20 76 61 6c 75 65 2c 20 74 68 65 20 72 65  ve value, the re
31ed0 73 75 6c 74 73 20 61 72 65 20 74 68 65 20 73 61  sults are the sa
31ee0 6d 65 20 61 73 20 69 66 20 69 74 0a 68 61 64 20  me as if it.had 
31ef0 65 76 61 6c 75 61 74 65 64 20 74 6f 20 7a 65 72  evaluated to zer
31f00 6f 2e 0a 0a 3c 70 3e 5e 49 6e 73 74 65 61 64 20  o...<p>^Instead 
31f10 6f 66 20 61 20 73 65 70 61 72 61 74 65 20 4f 46  of a separate OF
31f20 46 53 45 54 20 63 6c 61 75 73 65 2c 20 74 68 65  FSET clause, the
31f30 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 6d 61   LIMIT clause ma
31f40 79 20 73 70 65 63 69 66 79 20 74 77 6f 0a 73 63  y specify two.sc
31f50 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 73  alar expressions
31f60 20 73 65 70 61 72 61 74 65 64 20 62 79 20 61 20   separated by a 
31f70 63 6f 6d 6d 61 2e 20 5e 49 6e 20 74 68 69 73 20  comma. ^In this 
31f80 63 61 73 65 2c 20 74 68 65 20 66 69 72 73 74 20  case, the first 
31f90 65 78 70 72 65 73 73 69 6f 6e 0a 69 73 20 75 73  expression.is us
31fa0 65 64 20 61 73 20 74 68 65 20 4f 46 46 53 45 54  ed as the OFFSET
31fb0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
31fc0 74 68 65 20 73 65 63 6f 6e 64 20 61 73 20 74 68  the second as th
31fd0 65 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  e LIMIT expressi
31fe0 6f 6e 2e 0a 54 68 69 73 20 69 73 20 63 6f 75 6e  on..This is coun
31ff0 74 65 72 2d 69 6e 74 75 69 74 69 76 65 2c 20 61  ter-intuitive, a
32000 73 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65  s when using the
32010 20 4f 46 46 53 45 54 20 63 6c 61 75 73 65 20 74   OFFSET clause t
32020 68 65 20 73 65 63 6f 6e 64 20 6f 66 0a 74 68 65  he second of.the
32030 20 74 77 6f 20 65 78 70 72 65 73 73 69 6f 6e 73   two expressions
32040 20 69 73 20 74 68 65 20 4f 46 46 53 45 54 20 61   is the OFFSET a
32050 6e 64 20 74 68 65 20 66 69 72 73 74 20 74 68 65  nd the first the
32060 20 4c 49 4d 49 54 2e 20 0a 54 68 69 73 20 72 65   LIMIT. .This re
32070 76 65 72 73 61 6c 20 6f 66 20 74 68 65 20 6f 66  versal of the of
32080 66 73 65 74 20 61 6e 64 20 6c 69 6d 69 74 20 69  fset and limit i
32090 73 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 0a 2d 20  s intentional.- 
320a0 69 74 20 6d 61 78 69 6d 69 7a 65 73 20 63 6f 6d  it maximizes com
320b0 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
320c0 6f 74 68 65 72 20 53 51 4c 20 64 61 74 61 62 61  other SQL databa
320d0 73 65 20 73 79 73 74 65 6d 73 2e 0a 48 6f 77 65  se systems..Howe
320e0 76 65 72 2c 20 74 6f 20 61 76 6f 69 64 20 63 6f  ver, to avoid co
320f0 6e 66 75 73 69 6f 6e 2c 20 70 72 6f 67 72 61 6d  nfusion, program
32100 6d 65 72 73 20 61 72 65 20 73 74 72 6f 6e 67 6c  mers are strongl
32110 79 20 65 6e 63 6f 75 72 61 67 65 64 20 74 6f 20  y encouraged to 
32120 75 73 65 0a 74 68 65 20 66 6f 72 6d 20 6f 66 20  use.the form of 
32130 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  the LIMIT clause
32140 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 22   that uses the "
32150 4f 46 46 53 45 54 22 20 6b 65 79 77 6f 72 64 20  OFFSET" keyword 
32160 61 6e 64 20 61 76 6f 69 64 0a 75 73 69 6e 67 20  and avoid.using 
32170 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 20 77  a LIMIT clause w
32180 69 74 68 20 61 20 63 6f 6d 6d 61 2d 73 65 70 61  ith a comma-sepa
32190 72 61 74 65 64 20 6f 66 66 73 65 74 2e 0a 0a 3c  rated offset...<
321a0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
321b0 76 61 6c 75 65 73 20 7b 56 41 4c 55 45 53 20 63  values {VALUES c
321c0 6c 61 75 73 65 7d 20 56 41 4c 55 45 53 3c 2f 74  lause} VALUES</t
321d0 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 56 41 4c 55  cl>.<h3>The VALU
321e0 45 53 20 63 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a  ES clause</h3>..
321f0 3c 70 3e 5e 28 54 68 65 20 70 68 72 61 73 65 20  <p>^(The phrase 
32200 22 56 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d  "VALUES(<i>expr-
32210 6c 69 73 74 3c 2f 69 3e 29 22 20 6d 65 61 6e 73  list</i>)" means
32220 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a   the same thing.
32230 61 73 20 22 53 45 4c 45 43 54 20 3c 69 3e 65 78  as "SELECT <i>ex
32240 70 72 2d 6c 69 73 74 3c 2f 69 3e 22 2e 29 5e 20  pr-list</i>".)^ 
32250 20 5e 28 54 68 65 20 70 68 72 61 73 65 0a 22 56   ^(The phrase."V
32260 41 4c 55 45 53 28 3c 69 3e 65 78 70 72 2d 6c 69  ALUES(<i>expr-li
32270 73 74 2d 31 3c 2f 69 3e 29 2c 2e 2e 2e 2c 28 3c  st-1</i>),...,(<
32280 69 3e 65 78 70 72 2d 6c 69 73 74 2d 4e 3c 2f 69  i>expr-list-N</i
32290 3e 29 22 20 6d 65 61 6e 73 20 74 68 65 20 73 61  >)" means the sa
322a0 6d 65 0a 74 68 69 6e 67 20 61 73 20 22 53 45 4c  me.thing as "SEL
322b0 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69 73 74  ECT <i>expr-list
322c0 2d 31 3c 2f 69 3e 20 55 4e 49 4f 4e 20 41 4c 4c  -1</i> UNION ALL
322d0 20 2e 2e 2e 20 55 4e 49 4f 4e 20 41 4c 4c 0a 53   ... UNION ALL.S
322e0 45 4c 45 43 54 20 3c 69 3e 65 78 70 72 2d 6c 69  ELECT <i>expr-li
322f0 73 74 2d 4e 3c 2f 69 3e 22 2e 29 5e 20 20 42 6f  st-N</i>".)^  Bo
32300 74 68 20 66 6f 72 6d 73 20 61 72 65 20 74 68 65  th forms are the
32310 20 73 61 6d 65 2c 20 65 78 63 65 70 74 20 74 68   same, except th
32320 61 74 0a 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  at.the number of
32330 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
32340 74 73 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ts in a compound
32350 20 69 73 20 6c 69 6d 69 74 65 64 20 62 79 0a 5b   is limited by.[
32360 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d  SQLITE_LIMIT_COM
32370 50 4f 55 4e 44 5f 53 45 4c 45 43 54 5d 20 77 68  POUND_SELECT] wh
32380 65 72 65 61 73 20 74 68 65 20 6e 75 6d 62 65 72  ereas the number
32390 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 56 41   of rows in a.VA
323a0 4c 55 45 53 20 63 6c 61 75 73 65 20 68 61 73 20  LUES clause has 
323b0 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 69 6d  no arbitrary lim
323c0 69 74 2e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  it...<p>There ar
323d0 65 20 73 6f 6d 65 20 72 65 73 74 72 69 63 74 69  e some restricti
323e0 6f 6e 73 20 6f 6e 20 74 68 65 20 75 73 65 20 6f  ons on the use o
323f0 66 20 61 20 56 41 4c 55 45 53 20 63 6c 61 75 73  f a VALUES claus
32400 65 20 74 68 61 74 20 61 72 65 0a 6e 6f 74 20 73  e that are.not s
32410 68 6f 77 6e 20 6f 6e 20 74 68 65 20 73 79 6e 74  hown on the synt
32420 61 78 20 64 69 61 67 72 61 6d 73 3a 0a 0a 3c 75  ax diagrams:..<u
32430 6c 3e 0a 3c 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41  l>.<li><p>.^A VA
32440 4c 55 45 53 20 63 6c 61 75 73 65 20 63 61 6e 6e  LUES clause cann
32450 6f 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  ot be followed b
32460 79 20 5b 4f 52 44 45 52 20 42 59 5d 2e 0a 0a 3c  y [ORDER BY]...<
32470 6c 69 3e 3c 70 3e 0a 5e 41 20 56 41 4c 55 45 53  li><p>.^A VALUES
32480 20 63 6c 61 75 73 65 20 63 61 6e 6e 6f 74 20 62   clause cannot b
32490 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 5b 4c  e followed by [L
324a0 49 4d 49 54 5d 2e 0a 3c 2f 75 6c 3e 0a 0a 0a 3c  IMIT]..</ul>...<
324b0 68 33 3e 54 68 65 20 57 49 54 48 20 43 6c 61 75  h3>The WITH Clau
324c0 73 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 53 45 4c  se</h3>..<p>^SEL
324d0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 6d  ECT statements m
324e0 61 79 20 62 65 20 6f 70 74 69 6f 6e 61 6c 6c 79  ay be optionally
324f0 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20 73   preceded by a s
32500 69 6e 67 6c 65 0a 5b 57 49 54 48 20 63 6c 61 75  ingle.[WITH clau
32510 73 65 5d 20 74 68 61 74 20 64 65 66 69 6e 65 73  se] that defines
32520 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 5b 63 6f   one or more [co
32530 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
32540 73 73 69 6f 6e 73 5d 0a 66 6f 72 20 75 73 65 20  ssions].for use 
32550 77 69 74 68 69 6e 20 74 68 65 20 53 45 4c 45 43  within the SELEC
32560 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 74  T statement...<t
32570 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 74  cl>hd_fragment t
32580 61 62 66 75 6e 63 31 20 7b 74 61 62 6c 65 2d 76  abfunc1 {table-v
32590 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 73 20  alued functions 
325a0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
325b0 73 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 61  se}</tcl>.<h3>Ta
325c0 62 6c 65 2d 76 61 6c 75 65 64 20 46 75 6e 63 74  ble-valued Funct
325d0 69 6f 6e 73 20 49 6e 20 54 68 65 20 46 52 4f 4d  ions In The FROM
325e0 20 43 6c 61 75 73 65 3c 2f 68 33 3e 0a 0a 3c 70   Clause</h3>..<p
325f0 3e 41 20 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  >A [virtual tabl
32600 65 5d 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  e] that contains
32610 20 5b 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73   [hidden columns
32620 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 6c 69  ] can be used li
32630 6b 65 0a 61 20 5b 74 61 62 6c 65 2d 76 61 6c 75  ke.a [table-valu
32640 65 64 20 66 75 6e 63 74 69 6f 6e 5d 20 69 6e 20  ed function] in 
32650 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 2e  the FROM clause.
32660 20 20 54 68 65 20 61 72 67 75 6d 65 6e 74 73 20    The arguments 
32670 74 6f 20 74 68 65 0a 74 61 62 6c 65 2d 76 61 6c  to the.table-val
32680 75 65 64 20 66 75 6e 63 74 69 6f 6e 20 62 65 63  ued function bec
32690 6f 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ome constraints 
326a0 6f 6e 20 74 68 65 20 48 49 44 44 45 4e 20 63 6f  on the HIDDEN co
326b0 6c 75 6d 6e 73 20 6f 66 0a 74 68 65 20 76 69 72  lumns of.the vir
326c0 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 41 64 64  tual table.  Add
326d0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
326e0 69 6f 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64  ion can be found
326f0 20 69 6e 20 74 68 65 0a 5b 74 61 62 6c 65 2d 76   in the.[table-v
32700 61 6c 75 65 64 20 66 75 6e 63 74 69 6f 6e 73 7c  alued functions|
32710 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 6f  virtual table do
32720 63 75 6d 65 6e 74 61 74 69 6f 6e 5d 2e 0a 0a 3c  cumentation]...<
32730 74 63 6c 3e 0a 23 23 23 23 23 23 23 23 23 23 23  tcl>.###########
32740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32780 23 23 23 0a 53 65 63 74 69 6f 6e 20 55 50 44 41  ###.Section UPDA
32790 54 45 20 75 70 64 61 74 65 20 7b 55 50 44 41 54  TE update {UPDAT
327a0 45 20 2a 55 50 44 41 54 45 73 7d 0a 0a 52 65 63  E *UPDATEs}..Rec
327b0 75 72 73 69 76 65 42 75 62 62 6c 65 44 69 61 67  ursiveBubbleDiag
327c0 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 0a  ram update-stmt.
327d0 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 5e 41 6e 20 55  </tcl>..<p>^An U
327e0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
327f0 69 73 20 75 73 65 64 20 74 6f 20 6d 6f 64 69 66  is used to modif
32800 79 20 61 20 73 75 62 73 65 74 20 6f 66 20 74 68  y a subset of th
32810 65 20 76 61 6c 75 65 73 20 73 74 6f 72 65 64 20  e values stored 
32820 69 6e 20 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  in .zero or more
32830 20 72 6f 77 73 20 6f 66 20 74 68 65 20 64 61 74   rows of the dat
32840 61 62 61 73 65 20 74 61 62 6c 65 20 69 64 65 6e  abase table iden
32850 74 69 66 69 65 64 20 62 79 20 74 68 65 20 0a 5b  tified by the .[
32860 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d  qualified-table-
32870 6e 61 6d 65 5d 20 73 70 65 63 69 66 69 65 64 20  name] specified 
32880 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 55  as part of the U
32890 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
328a0 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 55 50 44  ..<p>^If the UPD
328b0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 64 6f  ATE statement do
328c0 65 73 20 6e 6f 74 20 68 61 76 65 20 61 20 57 48  es not have a WH
328d0 45 52 45 20 63 6c 61 75 73 65 2c 20 61 6c 6c 20  ERE clause, all 
328e0 72 6f 77 73 20 69 6e 20 74 68 65 0a 74 61 62 6c  rows in the.tabl
328f0 65 20 61 72 65 20 6d 6f 64 69 66 69 65 64 20 62  e are modified b
32900 79 20 74 68 65 20 55 50 44 41 54 45 2e 20 5e 4f  y the UPDATE. ^O
32910 74 68 65 72 77 69 73 65 2c 20 74 68 65 20 55 50  therwise, the UP
32920 44 41 54 45 20 61 66 66 65 63 74 73 20 6f 6e 6c  DATE affects onl
32930 79 20 74 68 6f 73 65 0a 72 6f 77 73 20 66 6f 72  y those.rows for
32940 20 77 68 69 63 68 20 74 68 65 20 57 48 45 52 45   which the WHERE
32950 20 63 6c 61 75 73 65 0a 5b 62 6f 6f 6c 65 61 6e   clause.[boolean
32960 20 65 78 70 72 65 73 73 69 6f 6e 7c 62 6f 6f 6c   expression|bool
32970 65 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ean expression i
32980 73 20 74 72 75 65 5d 2e 20 5e 49 74 20 69 73 20  s true]. ^It is 
32990 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 69 66 20  not an error if 
329a0 74 68 65 0a 57 48 45 52 45 20 63 6c 61 75 73 65  the.WHERE clause
329b0 20 64 6f 65 73 20 6e 6f 74 20 65 76 61 6c 75 61   does not evalua
329c0 74 65 20 74 6f 20 74 72 75 65 20 66 6f 72 20 61  te to true for a
329d0 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61  ny row in the ta
329e0 62 6c 65 20 2d 20 74 68 69 73 20 6a 75 73 74 0a  ble - this just.
329f0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 55  means that the U
32a00 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
32a10 61 66 66 65 63 74 73 20 7a 65 72 6f 20 72 6f 77  affects zero row
32a20 73 2e 0a 0a 3c 70 3e 54 68 65 20 6d 6f 64 69 66  s...<p>The modif
32a30 69 63 61 74 69 6f 6e 73 20 6d 61 64 65 20 74 6f  ications made to
32a40 20 65 61 63 68 20 72 6f 77 20 61 66 66 65 63 74   each row affect
32a50 65 64 20 62 79 20 61 6e 20 55 50 44 41 54 45 20  ed by an UPDATE 
32a60 73 74 61 74 65 6d 65 6e 74 20 61 72 65 0a 64 65  statement are.de
32a70 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
32a80 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d 65  list of assignme
32a90 6e 74 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  nts following th
32aa0 65 20 53 45 54 20 6b 65 79 77 6f 72 64 2e 20 45  e SET keyword. E
32ab0 61 63 68 0a 61 73 73 69 67 6e 6d 65 6e 74 20 73  ach.assignment s
32ac0 70 65 63 69 66 69 65 73 20 61 20 3c 79 79 74 65  pecifies a <yyte
32ad0 72 6d 3e 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 3c 2f  rm>column-name</
32ae0 79 79 74 65 72 6d 3e 20 74 6f 20 74 68 65 20 6c  yyterm> to the l
32af0 65 66 74 20 6f 66 20 74 68 65 20 0a 65 71 75 61  eft of the .equa
32b00 6c 73 20 73 69 67 6e 20 61 6e 64 20 61 20 73 63  ls sign and a sc
32b10 61 6c 61 72 20 65 78 70 72 65 73 73 69 6f 6e 20  alar expression 
32b20 74 6f 20 74 68 65 20 72 69 67 68 74 2e 20 0a 5e  to the right. .^
32b30 46 6f 72 20 65 61 63 68 20 61 66 66 65 63 74 65  For each affecte
32b40 64 20 72 6f 77 2c 20 74 68 65 20 6e 61 6d 65 64  d row, the named
32b50 20 63 6f 6c 75 6d 6e 73 0a 61 72 65 20 73 65 74   columns.are set
32b60 20 74 6f 20 74 68 65 20 76 61 6c 75 65 73 20 66   to the values f
32b70 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61 74 69  ound by evaluati
32b80 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
32b90 64 69 6e 67 20 73 63 61 6c 61 72 20 0a 65 78 70  ding scalar .exp
32ba0 72 65 73 73 69 6f 6e 73 2e 20 5e 49 66 20 61 20  ressions. ^If a 
32bb0 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2d 6e 61  single column-na
32bc0 6d 65 20 61 70 70 65 61 72 73 20 6d 6f 72 65 20  me appears more 
32bd0 74 68 61 6e 20 6f 6e 63 65 20 69 6e 20 74 68 65  than once in the
32be0 20 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 6d   list of.assignm
32bf0 65 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  ent expressions,
32c00 20 61 6c 6c 20 62 75 74 20 74 68 65 20 72 69 67   all but the rig
32c10 68 74 6d 6f 73 74 20 6f 63 63 75 72 72 65 6e 63  htmost occurrenc
32c20 65 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 5e 43  e is ignored. ^C
32c30 6f 6c 75 6d 6e 73 0a 74 68 61 74 20 64 6f 20 6e  olumns.that do n
32c40 6f 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ot appear in the
32c50 20 6c 69 73 74 20 6f 66 20 61 73 73 69 67 6e 6d   list of assignm
32c60 65 6e 74 73 20 61 72 65 20 6c 65 66 74 20 75 6e  ents are left un
32c70 6d 6f 64 69 66 69 65 64 2e 20 5e 54 68 65 20 73  modified. ^The s
32c80 63 61 6c 61 72 0a 65 78 70 72 65 73 73 69 6f 6e  calar.expression
32c90 73 20 6d 61 79 20 72 65 66 65 72 20 74 6f 20 63  s may refer to c
32ca0 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 72 6f  olumns of the ro
32cb0 77 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 2e  w being updated.
32cc0 20 5e 49 6e 20 74 68 69 73 20 63 61 73 65 20 61   ^In this case a
32cd0 6c 6c 0a 73 63 61 6c 61 72 20 65 78 70 72 65 73  ll.scalar expres
32ce0 73 69 6f 6e 73 20 61 72 65 20 65 76 61 6c 75 61  sions are evalua
32cf0 74 65 64 20 62 65 66 6f 72 65 20 61 6e 79 20 61  ted before any a
32d00 73 73 69 67 6e 6d 65 6e 74 73 20 61 72 65 20 6d  ssignments are m
32d10 61 64 65 2e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69  ade...<p>Beginni
32d20 6e 67 20 69 6e 20 53 51 4c 69 74 65 20 5b 76 65  ng in SQLite [ve
32d30 72 73 69 6f 6e 20 33 2e 31 35 2e 30 5d 20 28 5b  rsion 3.15.0] ([
32d40 64 61 74 65 6f 66 3a 33 2e 31 35 2e 30 5d 29 2c  dateof:3.15.0]),
32d50 20 61 6e 20 61 73 73 69 67 6e 6d 65 6e 74 20 69   an assignment i
32d60 6e 0a 74 68 65 20 53 45 54 20 63 6c 61 75 73 65  n.the SET clause
32d70 20 63 61 6e 20 62 65 20 61 20 0a 5b 63 6f 6c 75   can be a .[colu
32d80 6d 6e 2d 6e 61 6d 65 2d 6c 69 73 74 7c 70 61 72  mn-name-list|par
32d90 65 6e 74 68 65 73 69 7a 65 64 20 6c 69 73 74 20  enthesized list 
32da0 6f 66 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 5d  of column names]
32db0 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 61 6e 64   on the left and
32dc0 20 61 0a 5b 72 6f 77 20 76 61 6c 75 65 5d 20 6f   a.[row value] o
32dd0 66 20 74 68 65 20 73 61 6d 65 20 73 69 7a 65 20  f the same size 
32de0 6f 6e 20 74 68 65 20 72 69 67 68 74 2e 0a 0a 0a  on the right....
32df0 3c 70 3e 5e 54 68 65 20 6f 70 74 69 6f 6e 61 6c  <p>^The optional
32e00 20 22 4f 52 20 3c 69 3e 61 63 74 69 6f 6e 3c 2f   "OR <i>action</
32e10 69 3e 22 20 63 6f 6e 66 6c 69 63 74 20 63 6c 61  i>" conflict cla
32e20 75 73 65 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  use that follows
32e30 20 74 68 65 0a 55 50 44 41 54 45 20 6b 65 79 77   the.UPDATE keyw
32e40 6f 72 64 20 61 6c 6c 6f 77 73 20 74 68 65 20 75  ord allows the u
32e50 73 65 72 20 74 6f 20 6e 6f 6d 69 6e 61 74 65 20  ser to nominate 
32e60 61 20 73 70 65 63 69 66 69 63 0a 63 6f 6e 73 74  a specific.const
32e70 72 61 69 6e 74 20 63 6f 6e 66 6c 69 63 74 20 72  raint conflict r
32e80 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69  esolution algori
32e90 74 68 6d 20 74 6f 20 75 73 65 20 64 75 72 69 6e  thm to use durin
32ea0 67 20 74 68 69 73 20 6f 6e 65 20 55 50 44 41 54  g this one UPDAT
32eb0 45 20 63 6f 6d 6d 61 6e 64 2e 0a 52 65 66 65 72  E command..Refer
32ec0 20 74 6f 20 74 68 65 20 73 65 63 74 69 6f 6e 20   to the section 
32ed0 65 6e 74 69 74 6c 65 64 20 5b 4f 4e 20 43 4f 4e  entitled [ON CON
32ee0 46 4c 49 43 54 5d 20 66 6f 72 20 61 64 64 69 74  FLICT] for addit
32ef0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
32f00 6e 2e 0a 0a 3c 68 33 3e 52 65 73 74 72 69 63 74  n...<h3>Restrict
32f10 69 6f 6e 73 20 6f 6e 20 55 50 44 41 54 45 20 53  ions on UPDATE S
32f20 74 61 74 65 6d 65 6e 74 73 20 57 69 74 68 69 6e  tatements Within
32f30 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 3c   CREATE TRIGGER<
32f40 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 6c  /h3>..<p>The fol
32f50 6c 6f 77 69 6e 67 20 61 64 64 69 74 69 6f 6e 61  lowing additiona
32f60 6c 20 73 79 6e 74 61 78 20 72 65 73 74 72 69 63  l syntax restric
32f70 74 69 6f 6e 73 20 61 70 70 6c 79 20 74 6f 20 55  tions apply to U
32f80 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73  PDATE statements
32f90 20 74 68 61 74 0a 6f 63 63 75 72 20 77 69 74 68   that.occur with
32fa0 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61  in the body of a
32fb0 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
32fc0 5d 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 0a  ] statement.  ..
32fd0 3c 75 6c 3e 0a 20 20 3c 6c 69 3e 3c 70 3e 5e 54  <ul>.  <li><p>^T
32fe0 68 65 20 3c 79 79 74 65 72 6d 3e 74 61 62 6c 65  he <yyterm>table
32ff0 2d 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 20 73  -name</yyterm> s
33000 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
33010 20 6f 66 20 61 6e 20 55 50 44 41 54 45 20 0a 20   of an UPDATE . 
33020 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 20 77       statement w
33030 69 74 68 69 6e 0a 20 20 20 20 20 20 61 20 74 72  ithin.      a tr
33040 69 67 67 65 72 20 62 6f 64 79 20 6d 75 73 74 20  igger body must 
33050 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64 2e 20  be unqualified. 
33060 5e 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  ^(In other words
33070 2c 20 74 68 65 0a 20 20 20 20 20 20 3c 69 3e 73  , the.      <i>s
33080 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 69 3e 3c 62  chema-name</i><b
33090 3e 2e 3c 2f 62 3e 20 70 72 65 66 69 78 20 6f 6e  >.</b> prefix on
330a0 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 20   the table name 
330b0 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 69 73  of the UPDATE is
330c0 0a 20 20 20 20 20 20 6e 6f 74 20 61 6c 6c 6f 77  .      not allow
330d0 65 64 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ed within trigge
330e0 72 73 2e 29 5e 20 5e 55 6e 6c 65 73 73 20 74 68  rs.)^ ^Unless th
330f0 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68  e table to which
33100 20 74 68 65 20 74 72 69 67 67 65 72 0a 20 20 20   the trigger.   
33110 20 20 20 69 73 20 61 74 74 61 63 68 65 64 20 69     is attached i
33120 73 20 69 6e 20 74 68 65 20 54 45 4d 50 20 64 61  s in the TEMP da
33130 74 61 62 61 73 65 2c 20 74 68 65 20 74 61 62 6c  tabase, the tabl
33140 65 20 62 65 69 6e 67 20 75 70 64 61 74 65 64 20  e being updated 
33150 62 79 20 74 68 65 0a 20 20 20 20 20 20 74 72 69  by the.      tri
33160 67 67 65 72 20 70 72 6f 67 72 61 6d 20 6d 75 73  gger program mus
33170 74 20 72 65 73 69 64 65 20 69 6e 20 74 68 65 20  t reside in the 
33180 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 73  same database as
33190 20 69 74 2e 20 5e 49 66 20 74 68 65 20 74 61 62   it. ^If the tab
331a0 6c 65 0a 20 20 20 20 20 20 74 6f 20 77 68 69 63  le.      to whic
331b0 68 20 74 68 65 20 74 72 69 67 67 65 72 20 69 73  h the trigger is
331c0 20 61 74 74 61 63 68 65 64 20 69 73 20 69 6e 20   attached is in 
331d0 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
331e0 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 20 20  e, then the.    
331f0 20 20 75 6e 71 75 61 6c 69 66 69 65 64 20 6e 61    unqualified na
33200 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
33210 62 65 69 6e 67 20 75 70 64 61 74 65 64 20 69 73  being updated is
33220 20 72 65 73 6f 6c 76 65 64 20 69 6e 20 74 68 65   resolved in the
33230 20 73 61 6d 65 20 77 61 79 0a 20 20 20 20 20 20   same way.      
33240 61 73 20 69 74 20 69 73 20 66 6f 72 20 61 20 74  as it is for a t
33250 6f 70 2d 6c 65 76 65 6c 20 73 74 61 74 65 6d 65  op-level stateme
33260 6e 74 20 28 62 79 20 73 65 61 72 63 68 69 6e 67  nt (by searching
33270 20 66 69 72 73 74 20 74 68 65 20 54 45 4d 50 20   first the TEMP 
33280 64 61 74 61 62 61 73 65 2c 0a 20 20 20 20 20 20  database,.      
33290 74 68 65 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  then the main da
332a0 74 61 62 61 73 65 2c 20 74 68 65 6e 20 61 6e 79  tabase, then any
332b0 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73   other databases
332c0 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68   in the order th
332d0 65 79 20 77 65 72 65 0a 20 20 20 20 20 20 61 74  ey were.      at
332e0 74 61 63 68 65 64 29 2e 0a 0a 20 20 3c 6c 69 3e  tached)...  <li>
332f0 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58 45 44 20  <p>^The INDEXED 
33300 42 59 20 61 6e 64 20 4e 4f 54 20 49 4e 44 45 58  BY and NOT INDEX
33310 45 44 20 63 6c 61 75 73 65 73 20 61 72 65 20 6e  ED clauses are n
33320 6f 74 20 61 6c 6c 6f 77 65 64 20 6f 6e 20 55 50  ot allowed on UP
33330 44 41 54 45 0a 20 20 20 20 20 20 73 74 61 74 65  DATE.      state
33340 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69  ments within tri
33350 67 67 65 72 73 2e 3c 2f 70 3e 0a 0a 20 20 3c 6c  ggers.</p>..  <l
33360 69 3e 3c 70 3e 5e 54 68 65 20 4c 49 4d 49 54 20  i><p>^The LIMIT 
33370 61 6e 64 20 4f 52 44 45 52 20 42 59 20 63 6c 61  and ORDER BY cla
33380 75 73 65 73 20 66 6f 72 20 55 50 44 41 54 45 20  uses for UPDATE 
33390 61 72 65 20 75 6e 73 75 70 70 6f 72 74 65 64 20  are unsupported 
333a0 77 69 74 68 69 6e 0a 20 20 20 20 20 20 74 72 69  within.      tri
333b0 67 67 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73  ggers, regardles
333c0 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 61  s of the compila
333d0 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 75 73 65  tion options use
333e0 64 20 74 6f 20 62 75 69 6c 64 20 53 51 4c 69 74  d to build SQLit
333f0 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 68 33 3e 4f 70  e..</ul>..<h3>Op
33400 74 69 6f 6e 61 6c 20 4c 49 4d 49 54 20 61 6e 64  tional LIMIT and
33410 20 4f 52 44 45 52 20 42 59 20 43 6c 61 75 73 65   ORDER BY Clause
33420 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 49 66 20  s</h3>..<p>^(If 
33430 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74 20  SQLite is built 
33440 77 69 74 68 20 74 68 65 20 5b 53 51 4c 49 54 45  with the [SQLITE
33450 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
33460 45 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 63 6f 6d  ELETE_LIMIT].com
33470 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
33480 20 74 68 65 6e 20 74 68 65 20 73 79 6e 74 61 78   then the syntax
33490 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
334a0 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 74 65  tatement is exte
334b0 6e 64 65 64 0a 77 69 74 68 20 6f 70 74 69 6f 6e  nded.with option
334c0 61 6c 20 4f 52 44 45 52 20 42 59 20 61 6e 64 20  al ORDER BY and 
334d0 4c 49 4d 49 54 20 63 6c 61 75 73 65 73 29 5e 20  LIMIT clauses)^ 
334e0 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as follows:</p>.
334f0 0a 3c 74 63 6c 3e 42 75 62 62 6c 65 44 69 61 67  .<tcl>BubbleDiag
33500 72 61 6d 20 75 70 64 61 74 65 2d 73 74 6d 74 2d  ram update-stmt-
33510 6c 69 6d 69 74 65 64 3c 2f 74 63 6c 3e 0a 0a 3c  limited</tcl>..<
33520 70 3e 5e 49 66 20 61 6e 20 55 50 44 41 54 45 20  p>^If an UPDATE 
33530 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 61 20  statement has a 
33540 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
33550 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
33560 20 6f 66 20 72 6f 77 73 20 74 68 61 74 0a 77 69   of rows that.wi
33570 6c 6c 20 62 65 20 75 70 64 61 74 65 64 20 69 73  ll be updated is
33580 20 66 6f 75 6e 64 20 62 79 20 65 76 61 6c 75 61   found by evalua
33590 74 69 6e 67 20 74 68 65 20 61 63 63 6f 6d 70 61  ting the accompa
335a0 6e 79 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e  nying expression
335b0 20 61 6e 64 20 63 61 73 74 69 6e 67 0a 69 74 20   and casting.it 
335c0 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  to an integer va
335d0 6c 75 65 2e 20 5e 41 20 6e 65 67 61 74 69 76 65  lue. ^A negative
335e0 20 76 61 6c 75 65 20 69 73 20 69 6e 74 65 72 70   value is interp
335f0 72 65 74 65 64 20 61 73 20 22 6e 6f 20 6c 69 6d  reted as "no lim
33600 69 74 22 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65  it"...<p>^If the
33610 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
33620 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20 6e  n evaluates to n
33630 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75  on-negative valu
33640 65 20 3c 69 3e 4e 3c 2f 69 3e 20 61 6e 64 20 74  e <i>N</i> and t
33650 68 65 0a 55 50 44 41 54 45 20 73 74 61 74 65 6d  he.UPDATE statem
33660 65 6e 74 20 68 61 73 20 61 6e 20 4f 52 44 45 52  ent has an ORDER
33670 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65 6e   BY clause, then
33680 20 61 6c 6c 20 72 6f 77 73 20 74 68 61 74 20 77   all rows that w
33690 6f 75 6c 64 20 62 65 20 75 70 64 61 74 65 64 20  ould be updated 
336a0 69 6e 0a 74 68 65 20 61 62 73 65 6e 63 65 20 6f  in.the absence o
336b0 66 20 74 68 65 20 4c 49 4d 49 54 20 63 6c 61 75  f the LIMIT clau
336c0 73 65 20 61 72 65 20 73 6f 72 74 65 64 20 61 63  se are sorted ac
336d0 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 4f  cording to the O
336e0 52 44 45 52 20 42 59 20 61 6e 64 20 74 68 65 0a  RDER BY and the.
336f0 66 69 72 73 74 20 3c 69 3e 4e 3c 2f 69 3e 20 75  first <i>N</i> u
33700 70 64 61 74 65 64 2e 20 5e 28 49 66 20 74 68 65  pdated. ^(If the
33710 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
33720 74 20 61 6c 73 6f 20 68 61 73 20 61 6e 20 4f 46  t also has an OF
33730 46 53 45 54 20 63 6c 61 75 73 65 2c 0a 74 68 65  FSET clause,.the
33740 6e 20 69 74 20 69 73 20 73 69 6d 69 6c 61 72 6c  n it is similarl
33750 79 20 65 76 61 6c 75 61 74 65 64 20 61 6e 64 20  y evaluated and 
33760 63 61 73 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  cast to an integ
33770 65 72 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  er value. If the
33780 20 4f 46 46 53 45 54 0a 65 78 70 72 65 73 73 69   OFFSET.expressi
33790 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f 20  on evaluates to 
337a0 61 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76  a non-negative v
337b0 61 6c 75 65 20 3c 69 3e 4d 3c 2f 69 3e 2c 20 74  alue <i>M</i>, t
337c0 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 3c 69  hen the first <i
337d0 3e 4d 3c 2f 69 3e 0a 72 6f 77 73 20 61 72 65 20  >M</i>.rows are 
337e0 73 6b 69 70 70 65 64 20 61 6e 64 20 74 68 65 20  skipped and the 
337f0 66 6f 6c 6c 6f 77 69 6e 67 20 3c 69 3e 4e 3c 2f  following <i>N</
33800 69 3e 20 72 6f 77 73 20 75 70 64 61 74 65 64 20  i> rows updated 
33810 69 6e 73 74 65 61 64 2e 29 5e 0a 0a 3c 70 3e 5e  instead.)^..<p>^
33820 49 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  If the UPDATE st
33830 61 74 65 6d 65 6e 74 20 68 61 73 20 6e 6f 20 4f  atement has no O
33840 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c 20  RDER BY clause, 
33850 74 68 65 6e 20 61 6c 6c 20 72 6f 77 73 20 74 68  then all rows th
33860 61 74 0a 77 6f 75 6c 64 20 62 65 20 75 70 64 61  at.would be upda
33870 74 65 64 20 69 6e 20 74 68 65 20 61 62 73 65 6e  ted in the absen
33880 63 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20  ce of the LIMIT 
33890 63 6c 61 75 73 65 20 61 72 65 20 61 73 73 65 6d  clause are assem
338a0 62 6c 65 64 20 69 6e 20 61 6e 0a 61 72 62 69 74  bled in an.arbit
338b0 72 61 72 79 20 6f 72 64 65 72 20 62 65 66 6f 72  rary order befor
338c0 65 20 61 70 70 6c 79 69 6e 67 20 74 68 65 20 4c  e applying the L
338d0 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20  IMIT and OFFSET 
338e0 63 6c 61 75 73 65 73 20 74 6f 20 64 65 74 65 72  clauses to deter
338f0 6d 69 6e 65 20 0a 77 68 69 63 68 20 61 72 65 20  mine .which are 
33900 61 63 74 75 61 6c 6c 79 20 75 70 64 61 74 65 64  actually updated
33910 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 4f 52 44 45  ...<p>^(The ORDE
33920 52 20 42 59 20 63 6c 61 75 73 65 20 6f 6e 20 61  R BY clause on a
33930 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  n UPDATE stateme
33940 6e 74 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  nt is used only 
33950 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
33960 63 68 0a 72 6f 77 73 20 66 61 6c 6c 20 77 69 74  ch.rows fall wit
33970 68 69 6e 20 74 68 65 20 4c 49 4d 49 54 2e 20 54  hin the LIMIT. T
33980 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63  he order in whic
33990 68 20 72 6f 77 73 20 61 72 65 20 6d 6f 64 69 66  h rows are modif
339a0 69 65 64 20 69 73 20 61 72 62 69 74 72 61 72 79  ied is arbitrary
339b0 0a 61 6e 64 20 69 73 20 6e 6f 74 20 69 6e 66 6c  .and is not infl
339c0 75 65 6e 63 65 64 20 62 79 20 74 68 65 20 4f 52  uenced by the OR
339d0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 29 5e  DER BY clause.)^
339e0 0a 0a 3c 74 63 6c 3e 0a 23 23 23 23 23 23 23 23  ..<tcl>.########
339f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33a00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33a10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33a30 23 23 23 23 23 23 0a 53 65 63 74 69 6f 6e 20 56  ######.Section V
33a40 41 43 55 55 4d 20 76 61 63 75 75 6d 20 56 41 43  ACUUM vacuum VAC
33a50 55 55 4d 0a 0a 52 65 63 75 72 73 69 76 65 42 75  UUM..RecursiveBu
33a60 62 62 6c 65 44 69 61 67 72 61 6d 20 76 61 63 75  bbleDiagram vacu
33a70 75 6d 2d 73 74 6d 74 0a 3c 2f 74 63 6c 3e 0a 0a  um-stmt.</tcl>..
33a80 3c 70 3e 0a 20 20 54 68 65 20 56 41 43 55 55 4d  <p>.  The VACUUM
33a90 20 63 6f 6d 6d 61 6e 64 20 72 65 62 75 69 6c 64   command rebuild
33aa0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
33ab0 69 6c 65 2c 20 72 65 70 61 63 6b 69 6e 67 20 69  ile, repacking i
33ac0 74 20 69 6e 74 6f 20 61 20 6d 69 6e 69 6d 61 6c  t into a minimal
33ad0 0a 20 20 61 6d 6f 75 6e 74 20 6f 66 20 64 69 73  .  amount of dis
33ae0 6b 20 73 70 61 63 65 2e 20 54 68 65 72 65 20 61  k space. There a
33af0 72 65 20 73 65 76 65 72 61 6c 20 0a 20 20 72 65  re several .  re
33b00 61 73 6f 6e 73 20 61 6e 20 61 70 70 6c 69 63 61  asons an applica
33b10 74 69 6f 6e 20 6d 69 67 68 74 20 64 6f 20 74 68  tion might do th
33b20 69 73 3a 0a 0a 3c 75 6c 3e 0a 20 20 3c 6c 69 3e  is:..<ul>.  <li>
33b30 20 3c 70 3e 20 5e 55 6e 6c 65 73 73 20 53 51 4c   <p> ^Unless SQL
33b40 69 74 65 20 69 73 20 72 75 6e 6e 69 6e 67 20 69  ite is running i
33b50 6e 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 3d 46  n "auto_vacuum=F
33b60 55 4c 4c 22 20 6d 6f 64 65 2c 20 77 68 65 6e 20  ULL" mode, when 
33b70 61 20 6c 61 72 67 65 0a 20 20 20 20 20 61 6d 6f  a large.     amo
33b80 75 6e 74 20 6f 66 20 64 61 74 61 20 69 73 20 64  unt of data is d
33b90 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65 20  eleted from the 
33ba0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74  database file it
33bb0 20 6c 65 61 76 65 73 20 62 65 68 69 6e 64 20 65   leaves behind e
33bc0 6d 70 74 79 0a 20 20 20 20 20 73 70 61 63 65 2c  mpty.     space,
33bd0 20 6f 72 20 22 66 72 65 65 22 20 64 61 74 61 62   or "free" datab
33be0 61 73 65 20 70 61 67 65 73 2e 20 54 68 69 73 20  ase pages. This 
33bf0 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61  means the databa
33c00 73 65 20 66 69 6c 65 20 6d 69 67 68 74 0a 20 20  se file might.  
33c10 20 20 20 62 65 20 6c 61 72 67 65 72 20 74 68 61     be larger tha
33c20 6e 20 73 74 72 69 63 74 6c 79 20 6e 65 63 65 73  n strictly neces
33c30 73 61 72 79 2e 20 5e 52 75 6e 6e 69 6e 67 20 56  sary. ^Running V
33c40 41 43 55 55 4d 20 74 6f 20 72 65 62 75 69 6c 64  ACUUM to rebuild
33c50 20 74 68 65 20 0a 20 20 20 20 20 64 61 74 61 62   the .     datab
33c60 61 73 65 20 72 65 63 6c 61 69 6d 73 20 74 68 69  ase reclaims thi
33c70 73 20 73 70 61 63 65 20 61 6e 64 20 72 65 64 75  s space and redu
33c80 63 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ces the size of 
33c90 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
33ca0 65 2e 0a 0a 20 20 3c 6c 69 3e 20 3c 70 3e 20 5e  e...  <li> <p> ^
33cb0 46 72 65 71 75 65 6e 74 20 69 6e 73 65 72 74 73  Frequent inserts
33cc0 2c 20 75 70 64 61 74 65 73 2c 20 61 6e 64 20 64  , updates, and d
33cd0 65 6c 65 74 65 73 20 63 61 6e 20 63 61 75 73 65  eletes can cause
33ce0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
33cf0 6c 65 0a 20 20 20 20 20 74 6f 20 62 65 63 6f 6d  le.     to becom
33d00 65 20 66 72 61 67 6d 65 6e 74 65 64 20 2d 20 77  e fragmented - w
33d10 68 65 72 65 20 64 61 74 61 20 66 6f 72 20 61 20  here data for a 
33d20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 6f 72 20  single table or 
33d30 69 6e 64 65 78 20 69 73 20 73 63 61 74 74 65 72  index is scatter
33d40 65 64 20 0a 20 20 20 20 20 61 72 6f 75 6e 64 20  ed .     around 
33d50 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
33d60 65 2e 20 5e 52 75 6e 6e 69 6e 67 20 56 41 43 55  e. ^Running VACU
33d70 55 4d 20 65 6e 73 75 72 65 73 20 74 68 61 74 20  UM ensures that 
33d80 65 61 63 68 20 74 61 62 6c 65 20 61 6e 64 0a 20  each table and. 
33d90 20 20 20 20 69 6e 64 65 78 20 69 73 20 6c 61 72      index is lar
33da0 67 65 6c 79 20 73 74 6f 72 65 64 20 63 6f 6e 74  gely stored cont
33db0 69 67 75 6f 75 73 6c 79 20 77 69 74 68 69 6e 20  iguously within 
33dc0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
33dd0 65 2e 20 5e 49 6e 20 73 6f 6d 65 0a 20 20 20 20  e. ^In some.    
33de0 20 63 61 73 65 73 2c 20 56 41 43 55 55 4d 20 6d   cases, VACUUM m
33df0 61 79 20 61 6c 73 6f 20 72 65 64 75 63 65 20 74  ay also reduce t
33e00 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 72  he number of par
33e10 74 69 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61  tially filled pa
33e20 67 65 73 20 69 6e 0a 20 20 20 20 20 74 68 65 20  ges in.     the 
33e30 64 61 74 61 62 61 73 65 2c 20 72 65 64 75 63 69  database, reduci
33e40 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  ng the size of t
33e50 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
33e60 20 66 75 72 74 68 65 72 2e 0a 0a 20 20 3c 6c 69   further...  <li
33e70 3e 20 3c 70 3e 20 5e 4e 6f 72 6d 61 6c 6c 79 2c  > <p> ^Normally,
33e80 20 74 68 65 20 64 61 74 61 62 61 73 65 20 5b 70   the database [p
33e90 61 67 65 5f 73 69 7a 65 5d 20 61 6e 64 20 77 68  age_size] and wh
33ea0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
33eb0 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 73   database.     s
33ec0 75 70 70 6f 72 74 73 20 5b 61 75 74 6f 5f 76 61  upports [auto_va
33ed0 63 75 75 6d 5d 20 6d 75 73 74 20 62 65 20 63 6f  cuum] must be co
33ee0 6e 66 69 67 75 72 65 64 20 62 65 66 6f 72 65 20  nfigured before 
33ef0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
33f00 65 20 69 73 0a 20 20 20 20 20 61 63 74 75 61 6c  e is.     actual
33f10 6c 79 20 63 72 65 61 74 65 64 2e 20 5e 48 6f 77  ly created. ^How
33f20 65 76 65 72 2c 20 77 68 65 6e 20 6e 6f 74 20 69  ever, when not i
33f30 6e 20 5b 77 72 69 74 65 2d 61 68 65 61 64 20 6c  n [write-ahead l
33f40 6f 67 5d 20 6d 6f 64 65 2c 20 74 68 65 20 0a 20  og] mode, the . 
33f50 20 20 20 20 5b 70 61 67 65 5f 73 69 7a 65 5d 20      [page_size] 
33f60 61 6e 64 2f 6f 72 20 5b 61 75 74 6f 5f 76 61 63  and/or [auto_vac
33f70 75 75 6d 5d 20 70 72 6f 70 65 72 74 69 65 73 20  uum] properties 
33f80 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  of an existing d
33f90 61 74 61 62 61 73 65 20 6d 61 79 20 62 65 0a 20  atabase may be. 
33fa0 20 20 20 20 63 68 61 6e 67 65 64 20 62 79 20 75      changed by u
33fb0 73 69 6e 67 20 74 68 65 20 5b 70 61 67 65 5f 73  sing the [page_s
33fc0 69 7a 65 20 70 72 61 67 6d 61 7c 70 61 67 65 5f  ize pragma|page_
33fd0 73 69 7a 65 5d 20 20 61 6e 64 2f 6f 72 20 0a 20  size]  and/or . 
33fe0 20 20 20 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d      [auto_vacuum
33ff0 7c 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63  |pragma auto_vac
34000 75 75 6d 5d 20 70 72 61 67 6d 61 73 20 61 6e 64  uum] pragmas and
34010 20 74 68 65 6e 20 69 6d 6d 65 64 69 61 74 65 6c   then immediatel
34020 79 20 56 41 43 55 55 4d 69 6e 67 0a 20 20 20 20  y VACUUMing.    
34030 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 5e   the database. ^
34040 57 68 65 6e 20 69 6e 20 5b 77 72 69 74 65 2d 61  When in [write-a
34050 68 65 61 64 20 6c 6f 67 5d 20 6d 6f 64 65 2c 20  head log] mode, 
34060 6f 6e 6c 79 20 74 68 65 20 5b 61 75 74 6f 5f 76  only the [auto_v
34070 61 63 75 75 6d 5d 0a 20 20 20 20 20 73 75 70 70  acuum].     supp
34080 6f 72 74 20 70 72 6f 70 65 72 74 79 20 63 61 6e  ort property can
34090 20 62 65 20 63 68 61 6e 67 65 64 20 75 73 69 6e   be changed usin
340a0 67 20 56 41 43 55 55 4d 2e 0a 3c 2f 75 6c 3e 0a  g VACUUM..</ul>.
340b0 0a 3c 70 3e 5e 42 79 20 64 65 66 61 75 6c 74 2c  .<p>^By default,
340c0 20 56 41 43 55 55 4d 20 6f 6e 6c 79 20 77 6f 72   VACUUM only wor
340d0 6b 73 20 6f 6e 6c 79 20 6f 6e 20 74 68 65 20 6d  ks only on the m
340e0 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a 5e 5b  ain database..^[
340f0 41 54 54 41 43 48 7c 41 74 74 61 63 68 65 64 20  ATTACH|Attached 
34100 64 61 74 61 62 61 73 65 73 5d 20 63 61 6e 20 62  databases] can b
34110 65 20 76 61 63 75 75 6d 65 64 20 62 79 20 61 70  e vacuumed by ap
34120 70 65 6e 64 69 6e 67 20 74 68 65 20 61 70 70 72  pending the appr
34130 6f 70 72 69 61 74 65 0a 3c 79 79 74 65 72 6d 3e  opriate.<yyterm>
34140 73 63 68 65 6d 61 2d 6e 61 6d 65 3c 2f 79 79 74  schema-name</yyt
34150 65 72 6d 3e 20 74 6f 20 74 68 65 20 56 41 43 55  erm> to the VACU
34160 55 4d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  UM statement...<
34170 70 3e 3c 62 3e 43 6f 6d 70 61 74 69 62 69 6c 69  p><b>Compatibili
34180 74 79 20 57 61 72 6e 69 6e 67 3a 3c 2f 62 3e 20  ty Warning:</b> 
34190 54 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 76  The ability to v
341a0 61 63 75 75 6d 20 61 74 74 61 63 68 65 64 20 64  acuum attached d
341b0 61 74 61 62 61 73 65 73 20 77 61 73 0a 61 64 64  atabases was.add
341c0 65 64 20 69 6e 20 5b 76 65 72 73 69 6f 6e 20 33  ed in [version 3
341d0 2e 31 35 2e 30 5d 20 28 5b 64 61 74 65 6f 66 3a  .15.0] ([dateof:
341e0 33 2e 31 35 2e 30 5d 29 2e 20 20 50 72 69 6f 72  3.15.0]).  Prior
341f0 20 74 6f 20 74 68 61 74 2c 20 61 20 0a 3c 79 79   to that, a .<yy
34200 74 65 72 6d 3e 73 63 68 65 6d 61 2d 6e 61 6d 65  term>schema-name
34210 3c 2f 79 79 74 65 72 6d 3e 20 61 64 64 65 64 20  </yyterm> added 
34220 74 6f 20 74 68 65 0a 56 41 43 55 55 4d 20 73 74  to the.VACUUM st
34230 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 62 65  atement would be
34240 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65   silently ignore
34250 64 20 61 6e 64 20 74 68 65 20 22 6d 61 69 6e 22  d and the "main"
34260 20 73 63 68 65 6d 61 20 77 6f 75 6c 64 20 62 65   schema would be
34270 0a 76 61 63 75 75 6d 65 64 2e 3c 2f 70 3e 0a 0a  .vacuumed.</p>..
34280 3c 70 3e 5e 54 68 65 20 56 41 43 55 55 4d 20 63  <p>^The VACUUM c
34290 6f 6d 6d 61 6e 64 20 77 6f 72 6b 73 20 62 79 20  ommand works by 
342a0 63 6f 70 79 69 6e 67 20 74 68 65 20 63 6f 6e 74  copying the cont
342b0 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61  ents of the data
342c0 62 61 73 65 20 69 6e 74 6f 0a 61 20 74 65 6d 70  base into.a temp
342d0 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 20 66  orary database f
342e0 69 6c 65 20 61 6e 64 20 74 68 65 6e 20 6f 76 65  ile and then ove
342f0 72 77 72 69 74 69 6e 67 20 74 68 65 20 6f 72 69  rwriting the ori
34300 67 69 6e 61 6c 20 77 69 74 68 20 74 68 65 20 0a  ginal with the .
34310 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
34320 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e 20  temporary file. 
34330 5e 57 68 65 6e 20 6f 76 65 72 77 72 69 74 69 6e  ^When overwritin
34340 67 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 2c 20  g the original, 
34350 61 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e  a rollback.journ
34360 61 6c 20 6f 72 20 5b 77 72 69 74 65 2d 61 68 65  al or [write-ahe
34370 61 64 20 6c 6f 67 5d 20 57 41 4c 20 66 69 6c 65  ad log] WAL file
34380 20 69 73 20 75 73 65 64 20 6a 75 73 74 20 61 73   is used just as
34390 20 69 74 20 77 6f 75 6c 64 20 62 65 20 66 6f 72   it would be for
343a0 20 61 6e 79 0a 6f 74 68 65 72 20 64 61 74 61 62   any.other datab
343b0 61 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ase transaction.
343c0 20 5e 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61   ^This means tha
343d0 74 20 77 68 65 6e 20 56 41 43 55 55 4d 69 6e 67  t when VACUUMing
343e0 20 61 20 64 61 74 61 62 61 73 65 2c 20 0a 61 73   a database, .as
343f0 20 6d 75 63 68 20 61 73 20 74 77 69 63 65 20 74   much as twice t
34400 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6f  he size of the o
34410 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65  riginal database
34420 20 66 69 6c 65 20 69 73 20 72 65 71 75 69 72 65   file is require
34430 64 20 69 6e 20 66 72 65 65 0a 64 69 73 6b 20 73  d in free.disk s
34440 70 61 63 65 2e 0a 0a 3c 70 3e 5e 54 68 65 20 56  pace...<p>^The V
34450 41 43 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 6d 61  ACUUM command ma
34460 79 20 63 68 61 6e 67 65 20 74 68 65 20 5b 52 4f  y change the [RO
34470 57 49 44 20 7c 20 52 4f 57 49 44 73 5d 20 6f 66  WID | ROWIDs] of
34480 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e 79 0a   entries in any.
34490 74 61 62 6c 65 73 20 74 68 61 74 20 64 6f 20 6e  tables that do n
344a0 6f 74 20 68 61 76 65 20 61 6e 20 65 78 70 6c 69  ot have an expli
344b0 63 69 74 20 5b 49 4e 54 45 47 45 52 20 50 52 49  cit [INTEGER PRI
344c0 4d 41 52 59 20 4b 45 59 5d 2e 0a 3c 2f 70 3e 0a  MARY KEY]..</p>.
344d0 0a 3c 70 3e 5e 41 20 56 41 43 55 55 4d 20 77 69  .<p>^A VACUUM wi
344e0 6c 6c 20 66 61 69 6c 20 69 66 20 74 68 65 72 65  ll fail if there
344f0 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 72 61 6e   is an open tran
34500 73 61 63 74 69 6f 6e 2c 20 6f 72 20 69 66 20 74  saction, or if t
34510 68 65 72 65 20 61 72 65 20 6f 6e 65 20 6f 72 0a  here are one or.
34520 6d 6f 72 65 20 61 63 74 69 76 65 20 53 51 4c 20  more active SQL 
34530 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 20  statements when 
34540 69 74 20 69 73 20 72 75 6e 2e 0a 0a 3c 70 3e 5e  it is run...<p>^
34550 28 41 6e 20 61 6c 74 65 72 6e 61 74 69 76 65 20  (An alternative 
34560 74 6f 20 75 73 69 6e 67 20 74 68 65 20 56 41 43  to using the VAC
34570 55 55 4d 20 63 6f 6d 6d 61 6e 64 20 74 6f 0a 72  UUM command to.r
34580 65 63 6c 61 69 6d 20 73 70 61 63 65 20 61 66 74  eclaim space aft
34590 65 72 20 64 61 74 61 20 68 61 73 20 62 65 65 6e  er data has been
345a0 20 64 65 6c 65 74 65 64 20 69 73 20 61 75 74 6f   deleted is auto
345b0 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2c 20 65 6e  -vacuum mode, en
345c0 61 62 6c 65 64 20 75 73 69 6e 67 0a 74 68 65 20  abled using.the 
345d0 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 70 72  [auto_vacuum] pr
345e0 61 67 6d 61 2e 29 5e 20 5e 57 68 65 6e 20 5b 61  agma.)^ ^When [a
345f0 75 74 6f 5f 76 61 63 75 75 6d 5d 20 69 73 20 65  uto_vacuum] is e
34600 6e 61 62 6c 65 64 20 66 6f 72 20 61 20 64 61 74  nabled for a dat
34610 61 62 61 73 65 0a 66 72 65 65 20 70 61 67 65 73  abase.free pages
34620 20 6d 61 79 20 62 65 20 72 65 63 6c 61 69 6d 65   may be reclaime
34630 64 20 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67  d after deleting
34640 20 64 61 74 61 2c 20 63 61 75 73 69 6e 67 20 74   data, causing t
34650 68 65 20 66 69 6c 65 20 74 6f 20 73 68 72 69 6e  he file to shrin
34660 6b 2c 0a 77 69 74 68 6f 75 74 20 72 65 62 75 69  k,.without rebui
34670 6c 64 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65  lding the entire
34680 20 64 61 74 61 62 61 73 65 20 75 73 69 6e 67 20   database using 
34690 56 41 43 55 55 4d 2e 20 20 5e 48 6f 77 65 76 65  VACUUM.  ^Howeve
346a0 72 2c 20 75 73 69 6e 67 0a 5b 61 75 74 6f 5f 76  r, using.[auto_v
346b0 61 63 75 75 6d 5d 20 63 61 6e 20 6c 65 61 64 20  acuum] can lead 
346c0 74 6f 20 65 78 74 72 61 20 64 61 74 61 62 61 73  to extra databas
346d0 65 20 66 69 6c 65 20 66 72 61 67 6d 65 6e 74 61  e file fragmenta
346e0 74 69 6f 6e 2e 20 20 5e 41 6e 64 20 5b 61 75 74  tion.  ^And [aut
346f0 6f 5f 76 61 63 75 75 6d 5d 0a 64 6f 65 73 20 6e  o_vacuum].does n
34700 6f 74 20 63 6f 6d 70 61 63 74 20 70 61 72 74 69  ot compact parti
34710 61 6c 6c 79 20 66 69 6c 6c 65 64 20 70 61 67 65  ally filled page
34720 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
34730 65 20 61 73 20 56 41 43 55 55 4d 20 64 6f 65 73  e as VACUUM does
34740 2e 0a 0a 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 0a  ...</p>...<tcl>.
34750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 53  ##############.S
347a0 65 63 74 69 6f 6e 20 7b 49 4e 44 45 58 45 44 20  ection {INDEXED 
347b0 42 59 7d 20 69 6e 64 65 78 65 64 62 79 20 7b 7b  BY} indexedby {{
347c0 49 4e 44 45 58 45 44 20 42 59 7d 20 7b 4e 4f 54  INDEXED BY} {NOT
347d0 20 49 4e 44 45 58 45 44 7d 7d 0a 0a 3c 2f 74 63   INDEXED}}..</tc
347e0 6c 3e 0a 3c 70 3e 5e 54 68 65 20 49 4e 44 45 58  l>.<p>^The INDEX
347f0 45 44 20 42 59 20 70 68 72 61 73 65 20 66 6f 72  ED BY phrase for
34800 63 65 73 20 74 68 65 20 5b 53 51 4c 69 74 65 20  ces the [SQLite 
34810 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 5d 20 74  query planner] t
34820 6f 20 75 73 65 20 61 0a 70 61 72 74 69 63 75 6c  o use a.particul
34830 61 72 20 6e 61 6d 65 64 20 69 6e 64 65 78 20 6f  ar named index o
34840 6e 20 61 20 5b 44 45 4c 45 54 45 5d 2c 20 5b 53  n a [DELETE], [S
34850 45 4c 45 43 54 5d 2c 20 6f 72 20 5b 55 50 44 41  ELECT], or [UPDA
34860 54 45 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 54  TE] statement..T
34870 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
34880 72 61 73 65 20 69 73 20 61 6e 20 53 51 4c 69 74  rase is an SQLit
34890 65 20 65 78 74 65 6e 73 69 6f 6e 20 61 6e 64 0a  e extension and.
348a0 69 73 20 6e 6f 74 20 70 6f 72 74 61 62 6c 65 20  is not portable 
348b0 74 6f 20 6f 74 68 65 72 20 53 51 4c 20 64 61 74  to other SQL dat
348c0 61 62 61 73 65 20 65 6e 67 69 6e 65 73 2e 3c 2f  abase engines.</
348d0 70 3e 0a 0a 3c 74 63 6c 3e 0a 52 65 63 75 72 73  p>..<tcl>.Recurs
348e0 69 76 65 42 75 62 62 6c 65 44 69 61 67 72 61 6d  iveBubbleDiagram
348f0 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c 65   qualified-table
34900 2d 6e 61 6d 65 0a 3c 2f 74 63 6c 3e 0a 0a 3c 70  -name.</tcl>..<p
34910 3e 5e 54 68 65 20 22 49 4e 44 45 58 45 44 20 42  >^The "INDEXED B
34920 59 20 3c 79 79 74 65 72 6d 3e 69 6e 64 65 78 2d  Y <yyterm>index-
34930 6e 61 6d 65 3c 2f 79 79 74 65 72 6d 3e 22 20 70  name</yyterm>" p
34940 68 72 61 73 65 20 73 70 65 63 69 66 69 65 73 20  hrase specifies 
34950 0a 74 68 61 74 20 74 68 65 20 6e 61 6d 65 64 20  .that the named 
34960 69 6e 64 65 78 0a 6d 75 73 74 20 62 65 20 75 73  index.must be us
34970 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c  ed in order to l
34980 6f 6f 6b 20 75 70 20 76 61 6c 75 65 73 20 6f 6e  ook up values on
34990 20 74 68 65 20 70 72 65 63 65 64 69 6e 67 20 74   the preceding t
349a0 61 62 6c 65 2e 0a 5e 49 66 20 3c 79 79 74 65 72  able..^If <yyter
349b0 6d 3e 69 6e 64 65 78 2d 6e 61 6d 65 3c 2f 79 79  m>index-name</yy
349c0 74 65 72 6d 3e 20 64 6f 65 73 20 6e 6f 74 20 65  term> does not e
349d0 78 69 73 74 20 6f 72 20 63 61 6e 6e 6f 74 20 62  xist or cannot b
349e0 65 20 75 73 65 64 20 0a 66 6f 72 20 74 68 65 20  e used .for the 
349f0 71 75 65 72 79 2c 20 74 68 65 6e 20 74 68 65 20  query, then the 
34a00 70 72 65 70 61 72 61 74 69 6f 6e 20 6f 66 20 74  preparation of t
34a10 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
34a20 20 66 61 69 6c 73 2e 0a 5e 28 54 68 65 20 22 4e   fails..^(The "N
34a30 4f 54 20 49 4e 44 45 58 45 44 22 20 63 6c 61 75  OT INDEXED" clau
34a40 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68 61  se specifies tha
34a50 74 20 6e 6f 20 69 6e 64 65 78 20 73 68 61 6c 6c  t no index shall
34a60 20 62 65 20 75 73 65 64 20 77 68 65 6e 0a 61 63   be used when.ac
34a70 63 65 73 73 69 6e 67 20 74 68 65 20 70 72 65 63  cessing the prec
34a80 65 64 69 6e 67 20 74 61 62 6c 65 2c 20 69 6e 63  eding table, inc
34a90 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69  luding implied i
34aa0 6e 64 69 63 65 73 20 63 72 65 61 74 65 20 62 79  ndices create by
34ab0 0a 55 4e 49 51 55 45 20 61 6e 64 20 50 52 49 4d  .UNIQUE and PRIM
34ac0 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  ARY KEY constrai
34ad0 6e 74 73 2e 20 20 48 6f 77 65 76 65 72 2c 20 74  nts.  However, t
34ae0 68 65 20 5b 72 6f 77 69 64 5d 0a 63 61 6e 20 73  he [rowid].can s
34af0 74 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20  till be used to 
34b00 6c 6f 6f 6b 20 75 70 20 65 6e 74 72 69 65 73 20  look up entries 
34b10 65 76 65 6e 20 77 68 65 6e 20 22 4e 4f 54 20 49  even when "NOT I
34b20 4e 44 45 58 45 44 22 20 69 73 20 73 70 65 63 69  NDEXED" is speci
34b30 66 69 65 64 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  fied.)^</p>..<p>
34b40 53 6f 6d 65 20 53 51 4c 20 64 61 74 61 62 61 73  Some SQL databas
34b50 65 20 65 6e 67 69 6e 65 73 20 70 72 6f 76 69 64  e engines provid
34b60 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 20 22  e non-standard "
34b70 68 69 6e 74 22 20 6d 65 63 68 61 6e 69 73 6d 73  hint" mechanisms
34b80 20 77 68 69 63 68 0a 63 61 6e 20 62 65 20 75 73   which.can be us
34b90 65 64 20 74 6f 20 67 69 76 65 20 74 68 65 20 71  ed to give the q
34ba0 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20 63  uery optimizer c
34bb0 6c 75 65 73 20 61 62 6f 75 74 20 77 68 61 74 20  lues about what 
34bc0 69 6e 64 69 63 65 73 20 69 74 20 73 68 6f 75 6c  indices it shoul
34bd0 64 0a 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  d.use for a part
34be0 69 63 75 6c 61 72 20 73 74 61 74 65 6d 65 6e 74  icular statement
34bf0 2e 20 20 54 68 65 20 49 4e 44 45 58 20 42 59 20  .  The INDEX BY 
34c00 63 6c 61 75 73 65 20 6f 66 20 53 51 4c 69 74 65  clause of SQLite
34c10 20 69 73 20 0a 3c 65 6d 3e 6e 6f 74 3c 2f 65 6d   is .<em>not</em
34c20 3e 20 61 20 68 69 6e 74 69 6e 67 20 6d 65 63 68  > a hinting mech
34c30 61 6e 69 73 6d 20 61 6e 64 20 69 74 20 73 68 6f  anism and it sho
34c40 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20  uld not be used 
34c50 61 73 20 73 75 63 68 2e 0a 5e 54 68 65 20 49 4e  as such..^The IN
34c60 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
34c70 64 6f 65 73 20 6e 6f 74 20 67 69 76 65 20 74 68  does not give th
34c80 65 20 6f 70 74 69 6d 69 7a 65 72 20 68 69 6e 74  e optimizer hint
34c90 73 20 61 62 6f 75 74 20 77 68 69 63 68 20 69 6e  s about which in
34ca0 64 65 78 0a 74 6f 20 75 73 65 3b 20 69 74 20 67  dex.to use; it g
34cb0 69 76 65 73 20 74 68 65 20 6f 70 74 69 6d 69 7a  ives the optimiz
34cc0 65 72 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74  er a requirement
34cd0 20 6f 66 20 77 68 69 63 68 20 69 6e 64 65 78 20   of which index 
34ce0 74 6f 20 75 73 65 2e 0a 5e 49 66 20 74 68 65 20  to use..^If the 
34cf0 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 20  query optimizer 
34d00 69 73 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65  is unable to use
34d10 20 74 68 65 20 69 6e 64 65 78 20 73 70 65 63 69   the index speci
34d20 66 69 65 64 20 62 79 20 74 68 65 0a 49 4e 44 45  fied by the.INDE
34d30 58 20 42 59 20 63 6c 61 75 73 65 2c 20 74 68 65  X BY clause, the
34d40 6e 20 74 68 65 20 71 75 65 72 79 20 77 69 6c 6c  n the query will
34d50 20 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65 72   fail with an er
34d60 72 6f 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ror.</p>..<p>The
34d70 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
34d80 73 65 20 69 73 20 3c 65 6d 3e 6e 6f 74 3c 2f 65  se is <em>not</e
34d90 6d 3e 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20  m> intended for 
34da0 75 73 65 20 69 6e 20 74 75 6e 69 6e 67 0a 74 68  use in tuning.th
34db0 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 66  e performance of
34dc0 20 61 20 71 75 65 72 79 2e 20 20 54 68 65 20 69   a query.  The i
34dd0 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 49 4e 44  ntent of the IND
34de0 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 69  EXED BY clause i
34df0 73 0a 74 6f 20 72 61 69 73 65 20 61 20 72 75 6e  s.to raise a run
34e00 2d 74 69 6d 65 20 65 72 72 6f 72 20 69 66 20 61  -time error if a
34e10 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 2c 20   schema change, 
34e20 73 75 63 68 20 61 73 20 64 72 6f 70 70 69 6e 67  such as dropping
34e30 20 6f 72 0a 63 72 65 61 74 69 6e 67 20 61 6e 20   or.creating an 
34e40 69 6e 64 65 78 2c 20 63 61 75 73 65 73 20 74 68  index, causes th
34e50 65 20 71 75 65 72 79 20 70 6c 61 6e 20 66 6f 72  e query plan for
34e60 20 61 20 74 69 6d 65 2d 73 65 6e 73 69 74 69 76   a time-sensitiv
34e70 65 20 71 75 65 72 79 0a 74 6f 20 63 68 61 6e 67  e query.to chang
34e80 65 2e 20 20 54 68 65 20 49 4e 44 45 58 45 44 20  e.  The INDEXED 
34e90 42 59 20 63 6c 61 75 73 65 20 69 73 20 64 65 73  BY clause is des
34ea0 69 67 6e 65 64 20 74 6f 20 68 65 6c 70 20 64 65  igned to help de
34eb0 74 65 63 74 0a 75 6e 64 65 73 69 72 61 62 6c 65  tect.undesirable
34ec0 20 71 75 65 72 79 20 70 6c 61 6e 20 63 68 61 6e   query plan chan
34ed0 67 65 73 20 64 75 72 69 6e 67 20 72 65 67 72 65  ges during regre
34ee0 73 73 69 6f 6e 20 74 65 73 74 69 6e 67 2e 0a 41  ssion testing..A
34ef0 70 70 6c 69 63 61 74 69 6f 6e 20 0a 64 65 76 65  pplication .deve
34f00 6c 6f 70 65 72 73 20 61 72 65 20 61 64 6d 6f 6e  lopers are admon
34f10 69 73 68 65 64 20 74 6f 20 6f 6d 69 74 20 61 6c  ished to omit al
34f20 6c 20 75 73 65 20 6f 66 20 49 4e 44 45 58 45 44  l use of INDEXED
34f30 20 42 59 20 64 75 72 69 6e 67 0a 61 70 70 6c 69   BY during.appli
34f40 63 61 74 69 6f 6e 20 64 65 73 69 67 6e 2c 20 69  cation design, i
34f50 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
34f60 65 73 74 69 6e 67 2c 20 61 6e 64 20 74 75 6e 69  esting, and tuni
34f70 6e 67 2e 20 20 49 66 0a 49 4e 44 45 58 45 44 20  ng.  If.INDEXED 
34f80 42 59 20 69 73 20 74 6f 20 62 65 20 75 73 65 64  BY is to be used
34f90 20 61 74 20 61 6c 6c 2c 20 69 74 20 73 68 6f 75   at all, it shou
34fa0 6c 64 20 62 65 20 69 6e 73 65 72 74 65 64 20 61  ld be inserted a
34fb0 74 20 74 68 65 20 76 65 72 79 0a 65 6e 64 20 6f  t the very.end o
34fc0 66 20 74 68 65 20 64 65 76 65 6c 6f 70 6d 65 6e  f the developmen
34fd0 74 20 70 72 6f 63 65 73 73 20 77 68 65 6e 20 22  t process when "
34fe0 6c 6f 63 6b 69 6e 67 20 64 6f 77 6e 22 20 61 20  locking down" a 
34ff0 64 65 73 69 67 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33  design.</p>..<h3
35000 3e 53 65 65 20 41 6c 73 6f 3a 3c 2f 68 33 3e 0a  >See Also:</h3>.
35010 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65  .<ol>.<li><p>The
35020 20 5b 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20   [query planner 
35030 63 68 65 63 6b 6c 69 73 74 5d 20 64 65 73 63 72  checklist] descr
35040 69 62 65 73 20 73 74 65 70 73 20 74 68 61 74 20  ibes steps that 
35050 61 70 70 6c 69 63 61 74 69 6f 6e 0a 64 65 76 65  application.deve
35060 6c 6f 70 65 72 73 20 73 68 6f 75 6c 64 20 66 6f  lopers should fo
35070 6c 6c 6f 77 69 6e 67 20 74 6f 20 68 65 6c 70 20  llowing to help 
35080 72 65 73 6f 6c 76 65 20 71 75 65 72 79 20 70 6c  resolve query pl
35090 61 6e 6e 65 72 20 70 72 6f 62 6c 65 6d 73 2e 0a  anner problems..
350a0 4e 6f 74 69 63 65 20 74 68 65 20 74 68 61 74 20  Notice the that 
350b0 74 68 65 20 75 73 65 20 6f 66 20 49 4e 44 45 58  the use of INDEX
350c0 45 44 20 42 59 20 69 73 20 61 20 6c 61 73 74 20  ED BY is a last 
350d0 72 65 73 6f 72 74 2c 20 74 6f 20 62 65 20 75 73  resort, to be us
350e0 65 64 20 6f 6e 6c 79 0a 77 68 65 6e 20 61 6c 6c  ed only.when all
350f0 20 6f 74 68 65 72 20 6d 65 61 73 75 72 65 73 20   other measures 
35100 66 61 69 6c 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c  fail.</p>..<li><
35110 70 3e 5b 75 70 6c 75 73 63 6f 6e 74 72 6f 6c 7c  p>[upluscontrol|
35120 54 68 65 20 75 6e 61 72 79 20 22 2b 22 20 6f 70  The unary "+" op
35130 65 72 61 74 6f 72 5d 0a 63 61 6e 20 62 65 20 75  erator].can be u
35140 73 65 64 20 74 6f 20 64 69 73 71 75 61 6c 69 66  sed to disqualif
35150 79 20 74 65 72 6d 73 20 69 6e 20 74 68 65 20 57  y terms in the W
35160 48 45 52 45 20 63 6c 61 75 73 65 20 66 72 6f 6d  HERE clause from
35170 20 75 73 65 20 62 79 20 69 6e 64 69 63 65 73 2e   use by indices.
35180 0a 43 61 72 65 66 75 6c 20 75 73 65 20 6f 66 20  .Careful use of 
35190 75 6e 61 72 79 20 2b 20 63 61 6e 20 73 6f 6d 65  unary + can some
351a0 74 69 6d 65 73 20 68 65 6c 70 20 70 72 65 76 65  times help preve
351b0 6e 74 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  nt the query pla
351c0 6e 6e 65 72 20 66 72 6f 6d 0a 63 68 6f 6f 73 69  nner from.choosi
351d0 6e 67 20 61 20 70 6f 6f 72 20 69 6e 64 65 78 20  ng a poor index 
351e0 77 69 74 68 6f 75 74 20 72 65 73 74 72 69 63 74  without restrict
351f0 69 6e 67 20 69 74 20 74 6f 20 75 73 69 6e 67 20  ing it to using 
35200 6f 6e 65 20 73 70 65 63 69 66 69 63 20 69 6e 64  one specific ind
35210 65 78 2e 0a 43 61 72 65 66 75 6c 20 70 6c 61 63  ex..Careful plac
35220 65 6d 65 6e 74 20 6f 66 20 75 6e 61 72 79 20 2b  ement of unary +
35230 20 6f 70 65 72 61 74 6f 72 73 20 69 73 20 61 20   operators is a 
35240 62 65 74 74 65 72 20 6d 65 74 68 6f 64 20 66 6f  better method fo
35250 72 20 63 6f 6e 74 72 6f 6c 6c 69 6e 67 20 0a 77  r controlling .w
35260 68 69 63 68 20 69 6e 64 69 63 65 73 20 61 72 65  hich indices are
35270 20 75 73 65 64 20 62 79 20 61 20 71 75 65 72 79   used by a query
35280 2e 3c 2f 70 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68  .</p>..<li><p>Th
35290 65 20 5b 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f  e [sqlite3_stmt_
352a0 73 74 61 74 75 73 28 29 5d 20 43 2f 43 2b 2b 20  status()] C/C++ 
352b0 69 6e 74 65 72 66 61 63 65 20 74 6f 67 65 74 68  interface togeth
352c0 65 72 20 77 69 74 68 20 74 68 65 0a 5b 53 51 4c  er with the.[SQL
352d0 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46  ITE_STMTSTATUS_F
352e0 55 4c 4c 53 43 41 4e 5f 53 54 45 50 5d 20 61 6e  ULLSCAN_STEP] an
352f0 64 20 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  d [SQLITE_STMTST
35300 41 54 55 53 5f 53 4f 52 54 5d 20 76 65 72 62 73  ATUS_SORT] verbs
35310 0a 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20  .can be used to 
35320 64 65 74 65 63 74 20 61 74 20 72 75 6e 2d 74 69  detect at run-ti
35330 6d 65 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73  me when an SQL s
35340 74 61 74 65 6d 65 6e 74 20 69 73 20 6e 6f 74 0a  tatement is not.
35350 6d 61 6b 69 6e 67 20 65 66 66 65 63 74 69 76 65  making effective
35360 20 75 73 65 20 6f 66 20 69 6e 64 69 63 65 73 2e   use of indices.
35370 20 20 4d 61 6e 79 20 61 70 70 6c 69 63 61 74 69    Many applicati
35380 6f 6e 73 20 6d 61 79 20 70 72 65 66 65 72 20 74  ons may prefer t
35390 6f 0a 75 73 65 20 74 68 65 20 5b 73 71 6c 69 74  o.use the [sqlit
353a0 65 33 5f 73 74 6d 74 5f 73 74 61 74 75 73 28 29  e3_stmt_status()
353b0 5d 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 64  ] interface to d
353c0 65 74 65 63 74 20 69 6e 64 65 78 20 6d 69 73 75  etect index misu
353d0 73 65 0a 72 61 74 68 65 72 20 74 68 61 6e 20 74  se.rather than t
353e0 68 65 20 49 4e 44 45 58 45 44 20 42 59 20 70 68  he INDEXED BY ph
353f0 72 61 73 65 20 64 65 73 63 72 69 62 65 64 20 68  rase described h
35400 65 72 65 2e 3c 2f 70 3e 0a 3c 2f 6f 6c 3e 0a 0a  ere.</p>.</ol>..
35410 3c 74 63 6c 3e 0a 73 65 74 20 6b 65 79 77 6f 72  <tcl>.set keywor
35420 64 5f 6c 69 73 74 20 5b 6c 73 6f 72 74 20 7b 0a  d_list [lsort {.
35430 20 20 20 41 42 4f 52 54 0a 20 20 20 41 43 54 49     ABORT.   ACTI
35440 4f 4e 0a 20 20 20 41 44 44 0a 20 20 20 41 46 54  ON.   ADD.   AFT
35450 45 52 0a 20 20 20 41 4c 4c 0a 20 20 20 41 4c 54  ER.   ALL.   ALT
35460 45 52 0a 20 20 20 41 4e 41 4c 59 5a 45 0a 20 20  ER.   ANALYZE.  
35470 20 41 4e 44 0a 20 20 20 41 53 0a 20 20 20 41 53   AND.   AS.   AS
35480 43 0a 20 20 20 41 54 54 41 43 48 0a 20 20 20 41  C.   ATTACH.   A
35490 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20  UTOINCREMENT.   
354a0 42 45 46 4f 52 45 0a 20 20 20 42 45 47 49 4e 0a  BEFORE.   BEGIN.
354b0 20 20 20 42 45 54 57 45 45 4e 0a 20 20 20 42 59     BETWEEN.   BY
354c0 0a 20 20 20 43 41 53 43 41 44 45 0a 20 20 20 43  .   CASCADE.   C
354d0 41 53 45 0a 20 20 20 43 41 53 54 0a 20 20 20 43  ASE.   CAST.   C
354e0 48 45 43 4b 0a 20 20 20 43 4f 4c 4c 41 54 45 0a  HECK.   COLLATE.
354f0 20 20 20 43 4f 4c 55 4d 4e 0a 20 20 20 43 4f 4d     COLUMN.   COM
35500 4d 49 54 0a 20 20 20 43 4f 4e 46 4c 49 43 54 0a  MIT.   CONFLICT.
35510 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 0a 20 20     CONSTRAINT.  
35520 20 43 52 45 41 54 45 0a 20 20 20 43 52 4f 53 53   CREATE.   CROSS
35530 0a 20 20 20 43 55 52 52 45 4e 54 0a 20 20 20 43  .   CURRENT.   C
35540 55 52 52 45 4e 54 5f 44 41 54 45 0a 20 20 20 43  URRENT_DATE.   C
35550 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 43  URRENT_TIME.   C
35560 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
35570 0a 20 20 20 44 41 54 41 42 41 53 45 0a 20 20 20  .   DATABASE.   
35580 44 45 46 41 55 4c 54 0a 20 20 20 44 45 46 45 52  DEFAULT.   DEFER
35590 52 45 44 0a 20 20 20 44 45 46 45 52 52 41 42 4c  RED.   DEFERRABL
355a0 45 0a 20 20 20 44 45 4c 45 54 45 0a 20 20 20 44  E.   DELETE.   D
355b0 45 53 43 0a 20 20 20 44 45 54 41 43 48 0a 20 20  ESC.   DETACH.  
355c0 20 44 49 53 54 49 4e 43 54 0a 20 20 20 44 4f 0a   DISTINCT.   DO.
355d0 20 20 20 44 52 4f 50 0a 20 20 20 45 4e 44 0a 20     DROP.   END. 
355e0 20 20 45 41 43 48 0a 20 20 20 45 4c 53 45 0a 20    EACH.   ELSE. 
355f0 20 20 45 53 43 41 50 45 0a 20 20 20 45 58 43 45    ESCAPE.   EXCE
35600 50 54 0a 20 20 20 45 58 43 4c 55 53 49 56 45 0a  PT.   EXCLUSIVE.
35610 20 20 20 45 58 49 53 54 53 0a 20 20 20 45 58 50     EXISTS.   EXP
35620 4c 41 49 4e 0a 20 20 20 46 41 49 4c 0a 20 20 20  LAIN.   FAIL.   
35630 46 49 4c 54 45 52 0a 20 20 20 46 4f 4c 4c 4f 57  FILTER.   FOLLOW
35640 49 4e 47 0a 20 20 20 46 4f 52 0a 20 20 20 46 4f  ING.   FOR.   FO
35650 52 45 49 47 4e 0a 20 20 20 46 52 4f 4d 0a 20 20  REIGN.   FROM.  
35660 20 46 55 4c 4c 0a 20 20 20 47 4c 4f 42 0a 20 20   FULL.   GLOB.  
35670 20 47 52 4f 55 50 0a 20 20 20 48 41 56 49 4e 47   GROUP.   HAVING
35680 0a 20 20 20 49 46 0a 20 20 20 49 47 4e 4f 52 45  .   IF.   IGNORE
35690 0a 20 20 20 49 4d 4d 45 44 49 41 54 45 0a 20 20  .   IMMEDIATE.  
356a0 20 49 4e 0a 20 20 20 49 4e 44 45 58 0a 20 20 20   IN.   INDEX.   
356b0 49 4e 44 45 58 45 44 0a 20 20 20 49 4e 49 54 49  INDEXED.   INITI
356c0 41 4c 4c 59 0a 20 20 20 49 4e 4e 45 52 0a 20 20  ALLY.   INNER.  
356d0 20 49 4e 53 45 52 54 0a 20 20 20 49 4e 53 54 45   INSERT.   INSTE
356e0 41 44 0a 20 20 20 49 4e 54 45 52 53 45 43 54 0a  AD.   INTERSECT.
356f0 20 20 20 49 4e 54 4f 0a 20 20 20 49 53 0a 20 20     INTO.   IS.  
35700 20 49 53 4e 55 4c 4c 0a 20 20 20 4a 4f 49 4e 0a   ISNULL.   JOIN.
35710 20 20 20 4b 45 59 0a 20 20 20 4c 45 46 54 0a 20     KEY.   LEFT. 
35720 20 20 4c 49 4b 45 0a 20 20 20 4c 49 4d 49 54 0a    LIKE.   LIMIT.
35730 20 20 20 4d 41 54 43 48 0a 20 20 20 4e 41 54 55     MATCH.   NATU
35740 52 41 4c 0a 20 20 20 4e 4f 0a 20 20 20 4e 4f 54  RAL.   NO.   NOT
35750 0a 20 20 20 4e 4f 54 48 49 4e 47 0a 20 20 20 4e  .   NOTHING.   N
35760 4f 54 4e 55 4c 4c 0a 20 20 20 4e 55 4c 4c 0a 20  OTNULL.   NULL. 
35770 20 20 4f 46 0a 20 20 20 4f 46 46 53 45 54 0a 20    OF.   OFFSET. 
35780 20 20 4f 4e 0a 20 20 20 4f 52 0a 20 20 20 4f 52    ON.   OR.   OR
35790 44 45 52 0a 20 20 20 4f 55 54 45 52 0a 20 20 20  DER.   OUTER.   
357a0 4f 56 45 52 0a 20 20 20 50 41 52 54 49 54 49 4f  OVER.   PARTITIO
357b0 4e 0a 20 20 20 50 4c 41 4e 0a 20 20 20 50 52 41  N.   PLAN.   PRA
357c0 47 4d 41 0a 20 20 20 50 52 45 43 45 44 49 4e 47  GMA.   PRECEDING
357d0 0a 20 20 20 50 52 49 4d 41 52 59 0a 20 20 20 51  .   PRIMARY.   Q
357e0 55 45 52 59 0a 20 20 20 52 41 49 53 45 0a 20 20  UERY.   RAISE.  
357f0 20 52 41 4e 47 45 0a 20 20 20 52 45 43 55 52 53   RANGE.   RECURS
35800 49 56 45 0a 20 20 20 52 45 46 45 52 45 4e 43 45  IVE.   REFERENCE
35810 53 0a 20 20 20 52 45 47 45 58 50 0a 20 20 20 52  S.   REGEXP.   R
35820 45 49 4e 44 45 58 0a 20 20 20 52 45 4c 45 41 53  EINDEX.   RELEAS
35830 45 0a 20 20 20 52 45 4e 41 4d 45 0a 20 20 20 52  E.   RENAME.   R
35840 45 50 4c 41 43 45 0a 20 20 20 52 45 53 54 52 49  EPLACE.   RESTRI
35850 43 54 0a 20 20 20 52 49 47 48 54 0a 20 20 20 52  CT.   RIGHT.   R
35860 4f 4c 4c 42 41 43 4b 0a 20 20 20 52 4f 57 0a 20  OLLBACK.   ROW. 
35870 20 20 52 4f 57 53 0a 20 20 20 53 41 56 45 50 4f    ROWS.   SAVEPO
35880 49 4e 54 0a 20 20 20 53 45 4c 45 43 54 0a 20 20  INT.   SELECT.  
35890 20 53 45 54 0a 20 20 20 54 41 42 4c 45 0a 20 20   SET.   TABLE.  
358a0 20 54 45 4d 50 0a 20 20 20 54 45 4d 50 4f 52 41   TEMP.   TEMPORA
358b0 52 59 0a 20 20 20 54 48 45 4e 0a 20 20 20 54 4f  RY.   THEN.   TO
358c0 0a 20 20 20 54 52 41 4e 53 41 43 54 49 4f 4e 0a  .   TRANSACTION.
358d0 20 20 20 54 52 49 47 47 45 52 0a 20 20 20 55 4e     TRIGGER.   UN
358e0 42 4f 55 4e 44 45 44 0a 20 20 20 55 4e 49 4f 4e  BOUNDED.   UNION
358f0 0a 20 20 20 55 4e 49 51 55 45 0a 20 20 20 55 50  .   UNIQUE.   UP
35900 44 41 54 45 0a 20 20 20 55 53 49 4e 47 0a 20 20  DATE.   USING.  
35910 20 56 41 43 55 55 4d 0a 20 20 20 56 41 4c 55 45   VACUUM.   VALUE
35920 53 0a 20 20 20 56 49 45 57 0a 20 20 20 56 49 52  S.   VIEW.   VIR
35930 54 55 41 4c 0a 20 20 20 57 48 45 4e 0a 20 20 20  TUAL.   WHEN.   
35940 57 48 45 52 45 0a 20 20 20 57 49 4e 44 4f 57 0a  WHERE.   WINDOW.
35950 20 20 20 57 49 54 48 0a 20 20 20 57 49 54 48 4f     WITH.   WITHO
35960 55 54 0a 7d 5d 0a 0a 68 64 5f 70 75 74 73 20 7b  UT.}]..hd_puts {
35970 3c 44 49 56 20 63 6c 61 73 73 3d 22 70 64 66 5f  <DIV class="pdf_
35980 73 65 63 74 69 6f 6e 22 3e 7d 0a 53 65 63 74 69  section">}.Secti
35990 6f 6e 20 7b 53 51 4c 69 74 65 20 4b 65 79 77 6f  on {SQLite Keywo
359a0 72 64 73 7d 20 6b 65 79 77 6f 72 64 73 20 7b 7b  rds} keywords {{
359b0 2a 53 51 4c 20 6b 65 79 77 6f 72 64 7d 20 7b 53  *SQL keyword} {S
359c0 51 4c 20 6b 65 79 77 6f 72 64 73 7d 7d 0a 68 64  QL keywords}}.hd
359d0 5f 70 75 74 73 20 7b 3c 2f 44 49 56 3e 7d 0a 3c  _puts {</DIV>}.<
359e0 2f 74 63 6c 3e 0a 0a 3c 70 3e 54 68 65 20 53 51  /tcl>..<p>The SQ
359f0 4c 20 73 74 61 6e 64 61 72 64 20 73 70 65 63 69  L standard speci
35a00 66 69 65 73 20 61 20 6c 61 72 67 65 20 6e 75 6d  fies a large num
35a10 62 65 72 20 6f 66 20 6b 65 79 77 6f 72 64 73 20  ber of keywords 
35a20 77 68 69 63 68 20 6d 61 79 20 6e 6f 74 0a 62 65  which may not.be
35a30 20 75 73 65 64 20 61 73 20 74 68 65 20 6e 61 6d   used as the nam
35a40 65 73 20 6f 66 20 74 61 62 6c 65 73 2c 20 69 6e  es of tables, in
35a50 64 69 63 65 73 2c 20 63 6f 6c 75 6d 6e 73 2c 20  dices, columns, 
35a60 64 61 74 61 62 61 73 65 73 2c 20 75 73 65 72 2d  databases, user-
35a70 64 65 66 69 6e 65 64 0a 66 75 6e 63 74 69 6f 6e  defined.function
35a80 73 2c 20 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 76  s, collations, v
35a90 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64  irtual table mod
35aa0 75 6c 65 73 2c 20 6f 72 20 61 6e 79 20 6f 74 68  ules, or any oth
35ab0 65 72 20 6e 61 6d 65 64 20 6f 62 6a 65 63 74 2e  er named object.
35ac0 0a 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79  .The list of key
35ad0 77 6f 72 64 73 20 69 73 20 73 6f 20 6c 6f 6e 67  words is so long
35ae0 20 74 68 61 74 20 66 65 77 20 70 65 6f 70 6c 65   that few people
35af0 20 63 61 6e 20 72 65 6d 65 6d 62 65 72 20 74 68   can remember th
35b00 65 6d 20 61 6c 6c 2e 0a 46 6f 72 20 6d 6f 73 74  em all..For most
35b10 20 53 51 4c 20 63 6f 64 65 2c 20 79 6f 75 72 20   SQL code, your 
35b20 73 61 66 65 73 74 20 62 65 74 20 69 73 20 74 6f  safest bet is to
35b30 20 6e 65 76 65 72 20 75 73 65 20 61 6e 79 20 45   never use any E
35b40 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 0a  nglish language.
35b50 77 6f 72 64 20 61 73 20 74 68 65 20 6e 61 6d 65  word as the name
35b60 20 6f 66 20 61 20 75 73 65 72 2d 64 65 66 69 6e   of a user-defin
35b70 65 64 20 6f 62 6a 65 63 74 2e 3c 2f 70 3e 0a 0a  ed object.</p>..
35b80 3c 70 3e 49 66 20 79 6f 75 20 77 61 6e 74 20 74  <p>If you want t
35b90 6f 20 75 73 65 20 61 20 6b 65 79 77 6f 72 64 20  o use a keyword 
35ba0 61 73 20 61 20 6e 61 6d 65 2c 20 79 6f 75 20 6e  as a name, you n
35bb0 65 65 64 20 74 6f 20 71 75 6f 74 65 20 69 74 2e  eed to quote it.
35bc0 20 20 54 68 65 72 65 0a 61 72 65 20 66 6f 75 72    There.are four
35bd0 20 77 61 79 73 20 6f 66 20 71 75 6f 74 69 6e 67   ways of quoting
35be0 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 53 51 4c   keywords in SQL
35bf0 69 74 65 3a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 3c 62  ite:</p>..<p>.<b
35c00 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 74 61 62 6c  lockquote>.<tabl
35c10 65 3e 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c 69  e>.<tr>.<td vali
35c20 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 27 6b 65 79  gn="top"><b>'key
35c30 77 6f 72 64 27 3c 2f 62 3e 3c 2f 74 64 3e 3c 74  word'</b></td><t
35c40 64 20 77 69 64 74 68 3d 22 32 30 22 3e 3c 2f 74  d width="20"></t
35c50 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77 6f  d>..<td>^A keywo
35c60 72 64 20 69 6e 20 73 69 6e 67 6c 65 20 71 75 6f  rd in single quo
35c70 74 65 73 20 69 73 20 61 20 73 74 72 69 6e 67 20  tes is a string 
35c80 6c 69 74 65 72 61 6c 2e 3c 2f 74 64 3e 3c 2f 74  literal.</td></t
35c90 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20 76 61 6c  r>..<tr>.<td val
35ca0 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e 22 6b 65  ign="top"><b>"ke
35cb0 79 77 6f 72 64 22 3c 2f 62 3e 3c 2f 74 64 3e 3c  yword"</b></td><
35cc0 74 64 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41  td></td>..<td>^A
35cd0 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f 75 62   keyword in doub
35ce0 6c 65 2d 71 75 6f 74 65 73 20 69 73 20 61 6e 20  le-quotes is an 
35cf0 69 64 65 6e 74 69 66 69 65 72 2e 3c 2f 74 64 3e  identifier.</td>
35d00 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c 74 64 20  </tr>..<tr>.<td 
35d10 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e 3c 62 3e  valign="top"><b>
35d20 26 23 39 31 3b 6b 65 79 77 6f 72 64 26 23 39 33  &#91;keyword&#93
35d30 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64 3e 3c 2f  ;</b></td><td></
35d40 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b 65 79 77  td>..<td>^A keyw
35d50 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20  ord enclosed in 
35d60 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 20  square brackets 
35d70 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20 69  is .        an i
35d80 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69 73  dentifier.  This
35d90 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72 64   is not standard
35da0 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f 74   SQL.  This quot
35db0 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20 20  ing mechanism.  
35dc0 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79        is used by
35dd0 20 4d 53 20 41 63 63 65 73 73 20 61 6e 64 20 53   MS Access and S
35de0 51 4c 20 53 65 72 76 65 72 20 61 6e 64 20 69 73  QL Server and is
35df0 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c   included in SQL
35e00 69 74 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20  ite for.        
35e10 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f  compatibility.</
35e20 74 64 3e 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 09 3c  td></tr>..<tr>.<
35e30 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 3e  td valign="top">
35e40 3c 62 3e 26 23 39 36 3b 6b 65 79 77 6f 72 64 26  <b>&#96;keyword&
35e50 23 39 36 3b 3c 2f 62 3e 3c 2f 74 64 3e 3c 74 64  #96;</b></td><td
35e60 3e 3c 2f 74 64 3e 0a 09 3c 74 64 3e 5e 41 20 6b  ></td>..<td>^A k
35e70 65 79 77 6f 72 64 20 65 6e 63 6c 6f 73 65 64 20  eyword enclosed 
35e80 69 6e 20 67 72 61 76 65 20 61 63 63 65 6e 74 73  in grave accents
35e90 20 28 41 53 43 49 49 20 63 6f 64 65 20 39 36 29   (ASCII code 96)
35ea0 20 69 73 20 0a 20 20 20 20 20 20 20 20 61 6e 20   is .        an 
35eb0 69 64 65 6e 74 69 66 69 65 72 2e 20 20 54 68 69  identifier.  Thi
35ec0 73 20 69 73 20 6e 6f 74 20 73 74 61 6e 64 61 72  s is not standar
35ed0 64 20 53 51 4c 2e 20 20 54 68 69 73 20 71 75 6f  d SQL.  This quo
35ee0 74 69 6e 67 20 6d 65 63 68 61 6e 69 73 6d 0a 20  ting mechanism. 
35ef0 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62         is used b
35f00 79 20 4d 79 53 51 4c 20 61 6e 64 20 69 73 20 69  y MySQL and is i
35f10 6e 63 6c 75 64 65 64 20 69 6e 20 53 51 4c 69 74  ncluded in SQLit
35f20 65 20 66 6f 72 0a 20 20 20 20 20 20 20 20 63 6f  e for.        co
35f30 6d 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 74 64  mpatibility.</td
35f40 3e 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  ></tr>.</table>.
35f50 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 3c 2f  </blockquote>.</
35f60 70 3e 0a 0a 3c 70 3e 46 6f 72 20 72 65 73 69 6c  p>..<p>For resil
35f70 69 65 6e 63 65 20 77 68 65 6e 20 63 6f 6e 66 72  ience when confr
35f80 6f 6e 74 65 64 20 77 69 74 68 20 68 69 73 74 6f  onted with histo
35f90 72 69 63 61 6c 20 53 51 4c 20 73 74 61 74 65 6d  rical SQL statem
35fa0 65 6e 74 73 2c 20 53 51 4c 69 74 65 0a 77 69 6c  ents, SQLite.wil
35fb0 6c 20 73 6f 6d 65 74 69 6d 65 73 20 62 65 6e 64  l sometimes bend
35fc0 20 74 68 65 20 71 75 6f 74 69 6e 67 20 72 75 6c   the quoting rul
35fd0 65 73 20 61 62 6f 76 65 3a 3c 2f 70 3e 0a 0a 3c  es above:</p>..<
35fe0 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 5e 49 66 20 61  ul>.<li><p>^If a
35ff0 20 6b 65 79 77 6f 72 64 20 69 6e 20 73 69 6e 67   keyword in sing
36000 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a 20 3c  le.quotes (ex: <
36010 62 3e 27 6b 65 79 27 3c 2f 62 3e 20 6f 72 20 3c  b>'key'</b> or <
36020 62 3e 27 67 6c 6f 62 27 3c 2f 62 3e 29 20 69 73  b>'glob'</b>) is
36030 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e 74 65   used in a conte
36040 78 74 20 77 68 65 72 65 0a 61 6e 20 69 64 65 6e  xt where.an iden
36050 74 69 66 69 65 72 20 69 73 20 61 6c 6c 6f 77 65  tifier is allowe
36060 64 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74  d but where a st
36070 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 73 20  ring literal is 
36080 6e 6f 74 20 61 6c 6c 6f 77 65 64 2c 20 74 68 65  not allowed, the
36090 6e 0a 74 68 65 20 74 6f 6b 65 6e 20 69 73 20 75  n.the token is u
360a0 6e 64 65 72 73 74 6f 6f 64 20 74 6f 20 62 65 20  nderstood to be 
360b0 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 69 6e  an identifier in
360c0 73 74 65 61 64 20 6f 66 20 61 20 73 74 72 69 6e  stead of a strin
360d0 67 20 6c 69 74 65 72 61 6c 2e 0a 3c 2f 70 3e 3c  g literal..</p><
360e0 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 5e 49 66  /li>..<li><p>^If
360f0 20 61 20 6b 65 79 77 6f 72 64 20 69 6e 20 64 6f   a keyword in do
36100 75 62 6c 65 0a 71 75 6f 74 65 73 20 28 65 78 3a  uble.quotes (ex:
36110 20 3c 62 3e 22 6b 65 79 22 3c 2f 62 3e 20 6f 72   <b>"key"</b> or
36120 20 3c 62 3e 22 67 6c 6f 62 22 3c 2f 62 3e 29 20   <b>"glob"</b>) 
36130 69 73 20 75 73 65 64 20 69 6e 20 61 20 63 6f 6e  is used in a con
36140 74 65 78 74 20 77 68 65 72 65 0a 69 74 20 63 61  text where.it ca
36150 6e 6e 6f 74 20 62 65 20 72 65 73 6f 6c 76 65 64  nnot be resolved
36160 20 74 6f 20 61 6e 20 69 64 65 6e 74 69 66 69 65   to an identifie
36170 72 20 62 75 74 20 77 68 65 72 65 20 61 20 73 74  r but where a st
36180 72 69 6e 67 20 6c 69 74 65 72 61 6c 0a 69 73 20  ring literal.is 
36190 61 6c 6c 6f 77 65 64 2c 20 74 68 65 6e 20 74 68  allowed, then th
361a0 65 20 74 6f 6b 65 6e 20 69 73 20 75 6e 64 65 72  e token is under
361b0 73 74 6f 6f 64 20 74 6f 20 62 65 20 61 20 73 74  stood to be a st
361c0 72 69 6e 67 20 6c 69 74 65 72 61 6c 20 69 6e 73  ring literal ins
361d0 74 65 61 64 0a 6f 66 20 61 6e 20 69 64 65 6e 74  tead.of an ident
361e0 69 66 69 65 72 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a  ifier.</p></li>.
361f0 3c 2f 75 6c 3e 0a 0a 3c 70 3e 50 72 6f 67 72 61  </ul>..<p>Progra
36200 6d 6d 65 72 73 20 61 72 65 20 63 61 75 74 69 6f  mmers are cautio
36210 6e 65 64 20 6e 6f 74 20 74 6f 20 75 73 65 20 74  ned not to use t
36220 68 65 20 74 77 6f 20 65 78 63 65 70 74 69 6f 6e  he two exception
36230 73 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74  s described in.t
36240 68 65 20 70 72 65 76 69 6f 75 73 20 62 75 6c 6c  he previous bull
36250 65 74 73 2e 20 20 57 65 20 65 6d 70 68 61 73 69  ets.  We emphasi
36260 7a 65 20 74 68 61 74 20 74 68 65 79 20 65 78 69  ze that they exi
36270 73 74 20 6f 6e 6c 79 20 73 6f 20 74 68 61 74 20  st only so that 
36280 6f 6c 64 0a 61 6e 64 20 69 6c 6c 2d 66 6f 72 6d  old.and ill-form
36290 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
362a0 73 20 77 69 6c 6c 20 72 75 6e 20 63 6f 72 72 65  s will run corre
362b0 63 74 6c 79 2e 20 20 46 75 74 75 72 65 20 76 65  ctly.  Future ve
362c0 72 73 69 6f 6e 73 20 6f 66 0a 53 51 4c 69 74 65  rsions of.SQLite
362d0 20 6d 69 67 68 74 20 72 61 69 73 65 20 65 72 72   might raise err
362e0 6f 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61  ors instead of a
362f0 63 63 65 70 74 69 6e 67 20 74 68 65 20 6d 61 6c  ccepting the mal
36300 66 6f 72 6d 65 64 0a 73 74 61 74 65 6d 65 6e 74  formed.statement
36310 73 20 63 6f 76 65 72 65 64 20 62 79 20 74 68 65  s covered by the
36320 20 65 78 63 65 70 74 69 6f 6e 73 20 61 62 6f 76   exceptions abov
36330 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69  e.</p>..<p>.SQLi
36340 74 65 20 61 64 64 73 20 6e 65 77 20 6b 65 79 77  te adds new keyw
36350 6f 72 64 73 20 66 72 6f 6d 20 74 69 6d 65 20 74  ords from time t
36360 6f 20 74 69 6d 65 20 77 68 65 6e 20 69 74 20 74  o time when it t
36370 61 6b 65 73 20 6f 6e 20 6e 65 77 20 66 65 61 74  akes on new feat
36380 75 72 65 73 2e 0a 53 6f 20 74 6f 20 70 72 65 76  ures..So to prev
36390 65 6e 74 20 79 6f 75 72 20 63 6f 64 65 20 66 72  ent your code fr
363a0 6f 6d 20 62 65 69 6e 67 20 62 72 6f 6b 65 6e 20  om being broken 
363b0 62 79 20 66 75 74 75 72 65 20 65 6e 68 61 6e 63  by future enhanc
363c0 65 6d 65 6e 74 73 2c 20 79 6f 75 20 73 68 6f 75  ements, you shou
363d0 6c 64 0a 6e 6f 72 6d 61 6c 6c 79 20 71 75 6f 74  ld.normally quot
363e0 65 20 61 6e 79 20 69 64 65 6e 74 69 66 69 65 72  e any identifier
363f0 20 74 68 61 74 20 69 73 20 61 6e 20 45 6e 67 6c   that is an Engl
36400 69 73 68 20 6c 61 6e 67 75 61 67 65 20 77 6f 72  ish language wor
36410 64 2c 20 65 76 65 6e 20 69 66 0a 79 6f 75 20 64  d, even if.you d
36420 6f 20 6e 6f 74 20 68 61 76 65 20 74 6f 2e 0a 3c  o not have to..<
36430 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 6c 69 73  /p>..<p>.The lis
36440 74 20 62 65 6c 6f 77 20 73 68 6f 77 73 20 61 6c  t below shows al
36450 6c 20 70 6f 73 73 69 62 6c 65 20 6b 65 79 77 6f  l possible keywo
36460 72 64 73 20 75 73 65 64 20 62 79 20 61 6e 79 20  rds used by any 
36470 62 75 69 6c 64 20 6f 66 0a 53 51 4c 69 74 65 20  build of.SQLite 
36480 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 5b 63  regardless of [c
36490 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
364a0 6f 6e 73 5d 2e 20 20 0a 4d 6f 73 74 20 72 65 61  ons].  .Most rea
364b0 73 6f 6e 61 62 6c 65 20 63 6f 6e 66 69 67 75 72  sonable configur
364c0 61 74 69 6f 6e 73 20 75 73 65 20 6d 6f 73 74 20  ations use most 
364d0 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 73 65 20  or all of these 
364e0 6b 65 79 77 6f 72 64 73 2c 0a 62 75 74 20 73 6f  keywords,.but so
364f0 6d 65 20 6b 65 79 77 6f 72 64 73 20 6d 61 79 20  me keywords may 
36500 62 65 20 6f 6d 69 74 74 65 64 20 77 68 65 6e 20  be omitted when 
36510 53 51 4c 20 6c 61 6e 67 75 61 67 65 20 66 65 61  SQL language fea
36520 74 75 72 65 73 20 61 72 65 0a 64 69 73 61 62 6c  tures are.disabl
36530 65 64 2e 0a 41 70 70 6c 69 63 61 74 69 6f 6e 73  ed..Applications
36540 20 63 61 6e 20 75 73 65 20 74 68 65 0a 5b 73 71   can use the.[sq
36550 6c 69 74 65 33 5f 6b 65 79 77 6f 72 64 5f 63 6f  lite3_keyword_co
36560 75 6e 74 28 29 5d 2c 20 5b 73 71 6c 69 74 65 33  unt()], [sqlite3
36570 5f 6b 65 79 77 6f 72 64 5f 6e 61 6d 65 28 29 5d  _keyword_name()]
36580 2c 20 61 6e 64 0a 5b 73 71 6c 69 74 65 33 5f 6b  , and.[sqlite3_k
36590 65 79 77 6f 72 64 5f 63 68 65 63 6b 28 29 5d 20  eyword_check()] 
365a0 69 6e 74 65 72 66 61 63 65 73 20 74 6f 20 64 65  interfaces to de
365b0 74 65 72 6d 69 6e 65 20 74 68 65 20 6b 65 79 77  termine the keyw
365c0 6f 72 64 73 0a 72 65 63 6f 67 6e 69 7a 65 64 20  ords.recognized 
365d0 62 79 20 53 51 4c 69 74 65 20 61 74 20 72 75 6e  by SQLite at run
365e0 2d 74 69 6d 65 2e 0a 5e 28 52 65 67 61 72 64 6c  -time..^(Regardl
365f0 65 73 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 69  ess of the compi
36600 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
36610 61 74 69 6f 6e 2c 20 61 6e 79 20 69 64 65 6e 74  ation, any ident
36620 69 66 69 65 72 20 74 68 61 74 20 69 73 20 6e 6f  ifier that is no
36630 74 20 6f 6e 0a 74 68 65 20 66 6f 6c 6c 6f 77 69  t on.the followi
36640 6e 67 20 3c 74 63 6c 3e 68 64 5f 70 75 74 73 20  ng <tcl>hd_puts 
36650 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 79 77 6f 72  [llength $keywor
36660 64 5f 6c 69 73 74 5d 3c 2f 74 63 6c 3e 20 65 6c  d_list]</tcl> el
36670 65 6d 65 6e 74 0a 6c 69 73 74 20 69 73 20 6e 6f  ement.list is no
36680 74 20 61 20 6b 65 79 77 6f 72 64 20 74 6f 20 74  t a keyword to t
36690 68 65 20 53 51 4c 20 70 61 72 73 65 72 20 69 6e  he SQL parser in
366a0 20 53 51 4c 69 74 65 3a 0a 3c 2f 70 3e 0a 0a 3c   SQLite:.</p>..<
366b0 6f 6c 3e 0a 3c 74 63 6c 3e 0a 73 65 74 20 6c 78  ol>.<tcl>.set lx
366c0 20 7b 7d 0a 66 6f 72 65 61 63 68 20 77 6f 72 64   {}.foreach word
366d0 20 5b 6c 73 6f 72 74 20 24 6b 65 79 77 6f 72 64   [lsort $keyword
366e0 5f 6c 69 73 74 5d 20 7b 0a 20 20 68 64 5f 70 75  _list] {.  hd_pu
366f0 74 73 6e 6c 20 22 3c 6c 69 3e 24 77 6f 72 64 3c  tsnl "<li>$word<
36700 2f 6c 69 3e 22 0a 7d 0a 68 64 5f 70 75 74 73 6e  /li>".}.hd_putsn
36710 6c 20 22 3c 2f 6f 6c 3e 29 5e 22 0a 3c 2f 74 63  l "</ol>)^".</tc
36720 6c 3e 0a                                         l>.