Documentation Source Text
Hex Artifact Content
Not logged in

Artifact a7001f134e2f341c3b46fad9623556260530904b:


0000: 0a 23 20 54 68 69 73 20 66 69 6c 65 20 63 6f 6e  .# This file con
0010: 74 61 69 6e 73 20 74 68 65 20 64 61 74 61 20 75  tains the data u
0020: 73 65 64 20 62 79 20 74 68 65 20 74 68 72 65 65  sed by the three
0030: 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20   syntax diagram 
0040: 72 65 6e 64 65 72 69 6e 67 0a 23 20 70 72 6f 67  rendering.# prog
0050: 72 61 6d 73 3a 0a 23 0a 23 20 20 20 62 75 62 62  rams:.#.#   bubb
0060: 6c 65 2d 67 65 6e 65 72 61 74 6f 72 2e 74 63 6c  le-generator.tcl
0070: 0a 23 20 20 20 62 75 62 62 6c 65 2d 67 65 6e 65  .#   bubble-gene
0080: 72 61 74 6f 72 2d 62 6e 66 2e 74 63 6c 0a 23 20  rator-bnf.tcl.# 
0090: 20 20 62 75 62 62 6c 65 2d 67 65 6e 65 72 61 74    bubble-generat
00a0: 6f 72 2d 62 6e 66 2e 74 63 6c 0a 23 0a 0a 23 20  or-bnf.tcl.#..# 
00b0: 47 72 61 70 68 73 3a 0a 23 0a 73 65 74 20 61 6c  Graphs:.#.set al
00c0: 6c 5f 67 72 61 70 68 73 20 7b 0a 20 20 73 71 6c  l_graphs {.  sql
00d0: 2d 73 74 6d 74 2d 6c 69 73 74 20 7b 0a 20 20 20  -stmt-list {.   
00e0: 20 74 6f 70 6c 6f 6f 70 20 7b 6f 70 74 78 20 73   toploop {optx s
00f0: 71 6c 2d 73 74 6d 74 7d 20 3b 0a 20 20 7d 0a 20  ql-stmt} ;.  }. 
0100: 20 73 71 6c 2d 73 74 6d 74 20 7b 0a 20 20 20 20   sql-stmt {.    
0110: 6c 69 6e 65 0a 20 20 20 20 20 20 7b 6f 70 74 20  line.      {opt 
0120: 45 58 50 4c 41 49 4e 20 7b 6f 70 74 20 51 55 45  EXPLAIN {opt QUE
0130: 52 59 20 50 4c 41 4e 7d 7d 0a 20 20 20 20 20 20  RY PLAN}}.      
0140: 7b 6f 72 0a 20 20 20 20 20 20 20 20 20 61 6c 74  {or.         alt
0150: 65 72 2d 74 61 62 6c 65 2d 73 74 6d 74 0a 20 20  er-table-stmt.  
0160: 20 20 20 20 20 20 20 61 6e 61 6c 79 7a 65 2d 73         analyze-s
0170: 74 6d 74 0a 20 20 20 20 20 20 20 20 20 61 74 74  tmt.         att
0180: 61 63 68 2d 73 74 6d 74 0a 20 20 20 20 20 20 20  ach-stmt.       
0190: 20 20 62 65 67 69 6e 2d 73 74 6d 74 0a 20 20 20    begin-stmt.   
01a0: 20 20 20 20 20 20 63 6f 6d 6d 69 74 2d 73 74 6d        commit-stm
01b0: 74 0a 20 20 20 20 20 20 20 20 20 63 72 65 61 74  t.         creat
01c0: 65 2d 69 6e 64 65 78 2d 73 74 6d 74 0a 20 20 20  e-index-stmt.   
01d0: 20 20 20 20 20 20 63 72 65 61 74 65 2d 74 61 62        create-tab
01e0: 6c 65 2d 73 74 6d 74 0a 20 20 20 20 20 20 20 20  le-stmt.        
01f0: 20 63 72 65 61 74 65 2d 74 72 69 67 67 65 72 2d   create-trigger-
0200: 73 74 6d 74 0a 20 20 20 20 20 20 20 20 20 63 72  stmt.         cr
0210: 65 61 74 65 2d 76 69 65 77 2d 73 74 6d 74 0a 20  eate-view-stmt. 
0220: 20 20 20 20 20 20 20 20 63 72 65 61 74 65 2d 76          create-v
0230: 69 72 74 75 61 6c 2d 74 61 62 6c 65 2d 73 74 6d  irtual-table-stm
0240: 74 0a 20 20 20 20 20 20 20 20 20 64 65 6c 65 74  t.         delet
0250: 65 2d 73 74 6d 74 0a 20 20 20 20 20 20 20 20 20  e-stmt.         
0260: 64 65 6c 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69  delete-stmt-limi
0270: 74 65 64 0a 20 20 20 20 20 20 20 20 20 64 65 74  ted.         det
0280: 61 63 68 2d 73 74 6d 74 0a 20 20 20 20 20 20 20  ach-stmt.       
0290: 20 20 64 72 6f 70 2d 69 6e 64 65 78 2d 73 74 6d    drop-index-stm
02a0: 74 0a 20 20 20 20 20 20 20 20 20 64 72 6f 70 2d  t.         drop-
02b0: 74 61 62 6c 65 2d 73 74 6d 74 0a 20 20 20 20 20  table-stmt.     
02c0: 20 20 20 20 64 72 6f 70 2d 74 72 69 67 67 65 72      drop-trigger
02d0: 2d 73 74 6d 74 0a 20 20 20 20 20 20 20 20 20 64  -stmt.         d
02e0: 72 6f 70 2d 76 69 65 77 2d 73 74 6d 74 0a 20 20  rop-view-stmt.  
02f0: 20 20 20 20 20 20 20 69 6e 73 65 72 74 2d 73 74         insert-st
0300: 6d 74 0a 20 20 20 20 20 20 20 20 20 70 72 61 67  mt.         prag
0310: 6d 61 2d 73 74 6d 74 0a 20 20 20 20 20 20 20 20  ma-stmt.        
0320: 20 72 65 69 6e 64 65 78 2d 73 74 6d 74 0a 20 20   reindex-stmt.  
0330: 20 20 20 20 20 20 20 72 65 6c 65 61 73 65 2d 73         release-s
0340: 74 6d 74 0a 20 20 20 20 20 20 20 20 20 72 6f 6c  tmt.         rol
0350: 6c 62 61 63 6b 2d 73 74 6d 74 0a 20 20 20 20 20  lback-stmt.     
0360: 20 20 20 20 73 61 76 65 70 6f 69 6e 74 2d 73 74      savepoint-st
0370: 6d 74 0a 20 20 20 20 20 20 20 20 20 73 65 6c 65  mt.         sele
0380: 63 74 2d 73 74 6d 74 0a 20 20 20 20 20 20 20 20  ct-stmt.        
0390: 20 75 70 64 61 74 65 2d 73 74 6d 74 0a 20 20 20   update-stmt.   
03a0: 20 20 20 20 20 20 75 70 64 61 74 65 2d 73 74 6d        update-stm
03b0: 74 2d 6c 69 6d 69 74 65 64 0a 20 20 20 20 20 20  t-limited.      
03c0: 20 20 20 76 61 63 75 75 6d 2d 73 74 6d 74 0a 20     vacuum-stmt. 
03d0: 20 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 6c 74       }.  }.  alt
03e0: 65 72 2d 74 61 62 6c 65 2d 73 74 6d 74 20 7b 0a  er-table-stmt {.
03f0: 20 20 20 20 73 74 61 63 6b 0a 20 20 20 20 20 20      stack.      
0400: 20 7b 6c 69 6e 65 20 41 4c 54 45 52 20 54 41 42   {line ALTER TAB
0410: 4c 45 20 7b 6f 70 74 78 20 2f 64 61 74 61 62 61  LE {optx /databa
0420: 73 65 2d 6e 61 6d 65 20 2e 7d 20 2f 74 61 62 6c  se-name .} /tabl
0430: 65 2d 6e 61 6d 65 7d 0a 20 20 20 20 20 20 20 7b  e-name}.       {
0440: 74 61 69 6c 62 72 61 6e 63 68 0a 20 20 20 20 20  tailbranch.     
0450: 20 20 20 20 20 7b 6c 69 6e 65 20 52 45 4e 41 4d       {line RENAM
0460: 45 20 54 4f 20 2f 6e 65 77 2d 74 61 62 6c 65 2d  E TO /new-table-
0470: 6e 61 6d 65 7d 0a 20 20 20 20 20 20 20 20 20 20  name}.          
0480: 7b 6c 69 6e 65 20 41 44 44 20 7b 6f 70 74 78 20  {line ADD {optx 
0490: 43 4f 4c 55 4d 4e 7d 20 63 6f 6c 75 6d 6e 2d 64  COLUMN} column-d
04a0: 65 66 7d 0a 20 20 20 20 20 20 20 7d 0a 20 20 7d  ef}.       }.  }
04b0: 0a 20 20 61 6e 61 6c 79 7a 65 2d 73 74 6d 74 20  .  analyze-stmt 
04c0: 7b 0a 20 20 20 20 20 6c 69 6e 65 20 41 4e 41 4c  {.     line ANAL
04d0: 59 5a 45 20 7b 6f 72 20 6e 69 6c 20 2f 64 61 74  YZE {or nil /dat
04e0: 61 62 61 73 65 2d 6e 61 6d 65 20 2f 74 61 62 6c  abase-name /tabl
04f0: 65 2d 6f 72 2d 69 6e 64 65 78 2d 6e 61 6d 65 0a  e-or-index-name.
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0510: 20 20 20 20 7b 6c 69 6e 65 20 2f 64 61 74 61 62      {line /datab
0520: 61 73 65 2d 6e 61 6d 65 20 2e 20 2f 74 61 62 6c  ase-name . /tabl
0530: 65 2d 6f 72 2d 69 6e 64 65 78 2d 6e 61 6d 65 7d  e-or-index-name}
0540: 7d 0a 20 20 7d 0a 20 20 61 74 74 61 63 68 2d 73  }.  }.  attach-s
0550: 74 6d 74 20 7b 0a 20 20 20 20 20 6c 69 6e 65 20  tmt {.     line 
0560: 41 54 54 41 43 48 20 7b 6f 72 20 44 41 54 41 42  ATTACH {or DATAB
0570: 41 53 45 20 6e 69 6c 7d 20 65 78 70 72 20 41 53  ASE nil} expr AS
0580: 20 2f 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 0a   /database-name.
0590: 20 20 7d 0a 20 20 62 65 67 69 6e 2d 73 74 6d 74    }.  begin-stmt
05a0: 20 7b 0a 20 20 20 20 20 6c 69 6e 65 20 42 45 47   {.     line BEG
05b0: 49 4e 20 7b 6f 72 20 6e 69 6c 20 44 45 46 45 52  IN {or nil DEFER
05c0: 52 45 44 20 49 4d 4d 45 44 49 41 54 45 20 45 58  RED IMMEDIATE EX
05d0: 43 4c 55 53 49 56 45 7d 0a 20 20 20 20 20 20 20  CLUSIVE}.       
05e0: 20 20 20 7b 6f 70 74 78 20 54 52 41 4e 53 41 43     {optx TRANSAC
05f0: 54 49 4f 4e 7d 0a 20 20 7d 0a 20 20 63 6f 6d 6d  TION}.  }.  comm
0600: 69 74 2d 73 74 6d 74 20 7b 0a 20 20 20 20 20 6c  it-stmt {.     l
0610: 69 6e 65 20 7b 6f 72 20 43 4f 4d 4d 49 54 20 45  ine {or COMMIT E
0620: 4e 44 7d 20 7b 6f 70 74 78 20 54 52 41 4e 53 41  ND} {optx TRANSA
0630: 43 54 49 4f 4e 7d 0a 20 20 7d 0a 20 20 72 6f 6c  CTION}.  }.  rol
0640: 6c 62 61 63 6b 2d 73 74 6d 74 20 7b 0a 20 20 20  lback-stmt {.   
0650: 20 20 6c 69 6e 65 20 52 4f 4c 4c 42 41 43 4b 20    line ROLLBACK 
0660: 7b 6f 70 74 78 20 54 52 41 4e 53 41 43 54 49 4f  {optx TRANSACTIO
0670: 4e 7d 0a 20 20 20 20 20 20 20 20 7b 6f 70 74 78  N}.        {optx
0680: 20 54 4f 20 7b 6f 70 74 78 20 53 41 56 45 50 4f   TO {optx SAVEPO
0690: 49 4e 54 7d 20 2f 73 61 76 65 70 6f 69 6e 74 2d  INT} /savepoint-
06a0: 6e 61 6d 65 7d 0a 20 20 7d 0a 20 20 73 61 76 65  name}.  }.  save
06b0: 70 6f 69 6e 74 2d 73 74 6d 74 20 7b 0a 20 20 20  point-stmt {.   
06c0: 20 20 6c 69 6e 65 20 53 41 56 45 50 4f 49 4e 54    line SAVEPOINT
06d0: 20 2f 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65   /savepoint-name
06e0: 0a 20 20 7d 0a 20 20 72 65 6c 65 61 73 65 2d 73  .  }.  release-s
06f0: 74 6d 74 20 7b 0a 20 20 20 20 20 6c 69 6e 65 20  tmt {.     line 
0700: 52 45 4c 45 41 53 45 20 7b 6f 70 74 78 20 53 41  RELEASE {optx SA
0710: 56 45 50 4f 49 4e 54 7d 20 2f 73 61 76 65 70 6f  VEPOINT} /savepo
0720: 69 6e 74 2d 6e 61 6d 65 0a 20 20 7d 0a 20 20 63  int-name.  }.  c
0730: 72 65 61 74 65 2d 69 6e 64 65 78 2d 73 74 6d 74  reate-index-stmt
0740: 20 7b 0a 20 20 20 20 73 74 61 63 6b 0a 20 20 20   {.    stack.   
0750: 20 20 20 20 7b 6c 69 6e 65 20 43 52 45 41 54 45      {line CREATE
0760: 20 7b 6f 70 74 20 55 4e 49 51 55 45 7d 20 49 4e   {opt UNIQUE} IN
0770: 44 45 58 20 7b 6f 70 74 20 49 46 20 4e 4f 54 20  DEX {opt IF NOT 
0780: 45 58 49 53 54 53 7d 7d 0a 20 20 20 20 20 20 20  EXISTS}}.       
0790: 7b 6c 69 6e 65 20 7b 6f 70 74 78 20 2f 64 61 74  {line {optx /dat
07a0: 61 62 61 73 65 2d 6e 61 6d 65 20 2e 7d 20 2f 69  abase-name .} /i
07b0: 6e 64 65 78 2d 6e 61 6d 65 0a 20 20 20 20 20 20  ndex-name.      
07c0: 20 20 20 20 20 20 20 4f 4e 20 2f 74 61 62 6c 65         ON /table
07d0: 2d 6e 61 6d 65 20 28 20 7b 6c 6f 6f 70 20 69 6e  -name ( {loop in
07e0: 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 20 2c 7d 20  dexed-column ,} 
07f0: 29 7d 0a 20 20 7d 0a 20 20 69 6e 64 65 78 65 64  )}.  }.  indexed
0800: 2d 63 6f 6c 75 6d 6e 20 7b 0a 20 20 20 20 20 20  -column {.      
0810: 6c 69 6e 65 20 2f 63 6f 6c 75 6d 6e 2d 6e 61 6d  line /column-nam
0820: 65 20 7b 6f 70 74 78 20 43 4f 4c 4c 41 54 45 20  e {optx COLLATE 
0830: 2f 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 7d  /collation-name}
0840: 20 7b 6f 72 20 41 53 43 20 44 45 53 43 20 6e 69   {or ASC DESC ni
0850: 6c 7d 20 0a 20 20 7d 0a 20 20 63 72 65 61 74 65  l} .  }.  create
0860: 2d 74 61 62 6c 65 2d 73 74 6d 74 20 7b 0a 20 20  -table-stmt {.  
0870: 20 20 73 74 61 63 6b 0a 20 20 20 20 20 20 20 7b    stack.       {
0880: 6c 69 6e 65 20 43 52 45 41 54 45 20 7b 6f 72 20  line CREATE {or 
0890: 7b 7d 20 54 45 4d 50 20 54 45 4d 50 4f 52 41 52  {} TEMP TEMPORAR
08a0: 59 7d 20 54 41 42 4c 45 20 7b 6f 70 74 20 49 46  Y} TABLE {opt IF
08b0: 20 4e 4f 54 20 45 58 49 53 54 53 7d 7d 0a 20 20   NOT EXISTS}}.  
08c0: 20 20 20 20 20 7b 6c 69 6e 65 20 7b 6f 70 74 78       {line {optx
08d0: 20 2f 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 20   /database-name 
08e0: 2e 7d 20 2f 74 61 62 6c 65 2d 6e 61 6d 65 0a 20  .} /table-name. 
08f0: 20 20 20 20 20 20 20 20 20 7b 74 61 69 6c 62 72           {tailbr
0900: 61 6e 63 68 0a 20 20 20 20 20 20 20 20 20 20 20  anch.           
0910: 20 7b 6c 69 6e 65 20 28 20 7b 6c 6f 6f 70 20 63   {line ( {loop c
0920: 6f 6c 75 6d 6e 2d 64 65 66 20 2c 7d 20 7b 6c 6f  olumn-def ,} {lo
0930: 6f 70 20 7b 7d 20 7b 2c 20 74 61 62 6c 65 2d 63  op {} {, table-c
0940: 6f 6e 73 74 72 61 69 6e 74 7d 7d 20 29 7d 0a 20  onstraint}} )}. 
0950: 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65             {line
0960: 20 41 53 20 73 65 6c 65 63 74 2d 73 74 6d 74 7d   AS select-stmt}
0970: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
0980: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 63 6f 6c 75      }.  }.  colu
0990: 6d 6e 2d 64 65 66 20 7b 0a 20 20 20 20 6c 69 6e  mn-def {.    lin
09a0: 65 20 2f 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 7b  e /column-name {
09b0: 6f 72 20 74 79 70 65 2d 6e 61 6d 65 20 6e 69 6c  or type-name nil
09c0: 7d 20 7b 6c 6f 6f 70 20 6e 69 6c 20 7b 6e 69 6c  } {loop nil {nil
09d0: 20 63 6f 6c 75 6d 6e 2d 63 6f 6e 73 74 72 61 69   column-constrai
09e0: 6e 74 20 6e 69 6c 7d 7d 0a 20 20 7d 0a 20 20 74  nt nil}}.  }.  t
09f0: 79 70 65 2d 6e 61 6d 65 20 7b 0a 20 20 20 20 20  ype-name {.     
0a00: 6c 69 6e 65 20 7b 6c 6f 6f 70 20 2f 6e 61 6d 65  line {loop /name
0a10: 20 7b 7d 7d 20 7b 6f 72 20 7b 7d 0a 20 20 20 20   {}} {or {}.    
0a20: 20 20 20 20 7b 6c 69 6e 65 20 28 20 73 69 67 6e      {line ( sign
0a30: 65 64 2d 6e 75 6d 62 65 72 20 29 7d 0a 20 20 20  ed-number )}.   
0a40: 20 20 20 20 20 7b 6c 69 6e 65 20 28 20 73 69 67       {line ( sig
0a50: 6e 65 64 2d 6e 75 6d 62 65 72 20 2c 20 73 69 67  ned-number , sig
0a60: 6e 65 64 2d 6e 75 6d 62 65 72 20 29 7d 0a 20 20  ned-number )}.  
0a70: 20 20 20 7d 0a 20 20 7d 0a 20 20 63 6f 6c 75 6d     }.  }.  colum
0a80: 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 20 7b 0a 20  n-constraint {. 
0a90: 20 20 20 73 74 61 63 6b 0a 20 20 20 20 20 20 7b     stack.      {
0aa0: 6f 70 74 78 20 43 4f 4e 53 54 52 41 49 4e 54 20  optx CONSTRAINT 
0ab0: 2f 6e 61 6d 65 7d 0a 20 20 20 20 20 20 7b 6f 72  /name}.      {or
0ac0: 0a 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20  .         {line 
0ad0: 50 52 49 4d 41 52 59 20 4b 45 59 20 7b 6f 72 20  PRIMARY KEY {or 
0ae0: 6e 69 6c 20 41 53 43 20 44 45 53 43 7d 20 0a 20  nil ASC DESC} . 
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
0b00: 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 7b 6f  nflict-clause {o
0b10: 70 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  pt AUTOINCREMENT
0b20: 7d 0a 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  }.         }.   
0b30: 20 20 20 20 20 20 7b 6c 69 6e 65 20 4e 4f 54 20        {line NOT 
0b40: 4e 55 4c 4c 20 63 6f 6e 66 6c 69 63 74 2d 63 6c  NULL conflict-cl
0b50: 61 75 73 65 7d 0a 20 20 20 20 20 20 20 20 20 7b  ause}.         {
0b60: 6c 69 6e 65 20 55 4e 49 51 55 45 20 63 6f 6e 66  line UNIQUE conf
0b70: 6c 69 63 74 2d 63 6c 61 75 73 65 7d 0a 20 20 20  lict-clause}.   
0b80: 20 20 20 20 20 20 7b 6c 69 6e 65 20 43 48 45 43        {line CHEC
0b90: 4b 20 28 20 65 78 70 72 20 29 7d 0a 20 20 20 20  K ( expr )}.    
0ba0: 20 20 20 20 20 7b 6c 69 6e 65 20 44 45 46 41 55       {line DEFAU
0bb0: 4c 54 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  LT .            
0bc0: 7b 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  {or.            
0bd0: 20 20 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65      signed-numbe
0be0: 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
0bf0: 20 20 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 0a    literal-value.
0c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c10: 7b 6c 69 6e 65 20 28 20 65 78 70 72 20 29 7d 0a  {line ( expr )}.
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
0c30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0c40: 20 20 7b 6c 69 6e 65 20 43 4f 4c 4c 41 54 45 20    {line COLLATE 
0c50: 2f 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 7d  /collation-name}
0c60: 0a 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20  .         {line 
0c70: 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75  foreign-key-clau
0c80: 73 65 7d 0a 20 20 20 20 20 20 7d 0a 20 20 7d 0a  se}.      }.  }.
0c90: 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 20    signed-number 
0ca0: 7b 0a 20 20 20 20 20 6c 69 6e 65 20 7b 6f 72 20  {.     line {or 
0cb0: 6e 69 6c 20 2b 20 2d 7d 20 2f 6e 75 6d 65 72 69  nil + -} /numeri
0cc0: 63 2d 6c 69 74 65 72 61 6c 0a 20 20 7d 0a 20 20  c-literal.  }.  
0cd0: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
0ce0: 20 7b 0a 20 20 20 20 20 73 74 61 63 6b 0a 20 20   {.     stack.  
0cf0: 20 20 20 20 20 7b 6f 70 74 78 20 43 4f 4e 53 54       {optx CONST
0d00: 52 41 49 4e 54 20 2f 6e 61 6d 65 7d 0a 20 20 20  RAINT /name}.   
0d10: 20 20 20 20 7b 6f 72 0a 20 20 20 20 20 20 20 20      {or.        
0d20: 20 20 7b 6c 69 6e 65 20 7b 6f 72 20 7b 6c 69 6e    {line {or {lin
0d30: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 7d 20 55  e PRIMARY KEY} U
0d40: 4e 49 51 55 45 7d 0a 20 20 20 20 20 20 20 20 20  NIQUE}.         
0d50: 20 20 20 20 20 20 20 28 20 7b 6c 6f 6f 70 20 69         ( {loop i
0d60: 6e 64 65 78 65 64 2d 63 6f 6c 75 6d 6e 20 2c 7d  ndexed-column ,}
0d70: 20 29 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75   ) conflict-clau
0d80: 73 65 7d 0a 20 20 20 20 20 20 20 20 20 20 7b 6c  se}.          {l
0d90: 69 6e 65 20 43 48 45 43 4b 20 28 20 65 78 70 72  ine CHECK ( expr
0da0: 20 29 7d 0a 20 20 20 20 20 20 20 20 20 20 7b 6c   )}.          {l
0db0: 69 6e 65 20 46 4f 52 45 49 47 4e 20 4b 45 59 20  ine FOREIGN KEY 
0dc0: 28 20 7b 6c 6f 6f 70 20 2f 63 6f 6c 75 6d 6e 2d  ( {loop /column-
0dd0: 6e 61 6d 65 20 2c 7d 20 29 20 66 6f 72 65 69 67  name ,} ) foreig
0de0: 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 20 7d 0a 20  n-key-clause }. 
0df0: 20 20 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66 6f        }.  }.  fo
0e00: 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61 75 73 65  reign-key-clause
0e10: 20 7b 0a 20 20 20 20 20 20 73 74 61 63 6b 20 0a   {.      stack .
0e20: 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 52 45          {line RE
0e30: 46 45 52 45 4e 43 45 53 20 2f 66 6f 72 65 69 67  FERENCES /foreig
0e40: 6e 2d 74 61 62 6c 65 20 7b 6f 70 74 78 20 28 20  n-table {optx ( 
0e50: 7b 6c 6f 6f 70 20 2f 63 6f 6c 75 6d 6e 2d 6e 61  {loop /column-na
0e60: 6d 65 20 2c 7d 20 29 7d 7d 0a 20 20 20 20 20 20  me ,} )}}.      
0e70: 20 20 7b 6f 70 74 78 20 0a 20 20 20 20 20 20 20    {optx .       
0e80: 20 20 20 7b 6c 6f 6f 70 0a 20 20 20 20 20 20 20     {loop.       
0e90: 20 20 20 20 20 20 7b 6f 72 20 0a 20 20 20 20 20        {or .     
0ea0: 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65             {line
0eb0: 20 4f 4e 20 7b 6f 72 20 44 45 4c 45 54 45 20 55   ON {or DELETE U
0ec0: 50 44 41 54 45 7d 0a 20 20 20 20 20 20 20 20 20  PDATE}.         
0ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ee0: 7b 6f 72 20 7b 6c 69 6e 65 20 53 45 54 20 4e 55  {or {line SET NU
0ef0: 4c 4c 7d 20 7b 6c 69 6e 65 20 53 45 54 20 44 45  LL} {line SET DE
0f00: 46 41 55 4c 54 7d 0a 20 20 20 20 20 20 20 20 20  FAULT}.         
0f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f20: 20 20 20 20 43 41 53 43 41 44 45 20 52 45 53 54      CASCADE REST
0f30: 52 49 43 54 20 7b 6c 69 6e 65 20 4e 4f 20 41 43  RICT {line NO AC
0f40: 54 49 4f 4e 7d 0a 20 20 20 20 20 20 20 20 20 20  TION}.          
0f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
0f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0f70: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   }.             
0f80: 20 20 20 7b 6c 69 6e 65 20 4d 41 54 43 48 20 2f     {line MATCH /
0f90: 6e 61 6d 65 7d 0a 20 20 20 20 20 20 20 20 20 20  name}.          
0fa0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
0fb0: 20 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 7d    {}.          }
0fc0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
0fd0: 20 20 20 7b 6f 70 74 78 0a 20 20 20 20 20 20 20     {optx.       
0fe0: 20 20 20 7b 6c 69 6e 65 20 7b 6f 70 74 78 20 4e     {line {optx N
0ff0: 4f 54 7d 20 44 45 46 45 52 52 41 42 4c 45 20 0a  OT} DEFERRABLE .
1000: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 72               {or
1010: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
1020: 20 20 7b 6c 69 6e 65 20 49 4e 49 54 49 41 4c 4c    {line INITIALL
1030: 59 20 44 45 46 45 52 52 45 44 7d 0a 20 20 20 20  Y DEFERRED}.    
1040: 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e              {lin
1050: 65 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d 45  e INITIALLY IMME
1060: 44 49 41 54 45 7d 0a 20 20 20 20 20 20 20 20 20  DIATE}.         
1070: 20 20 20 20 20 20 20 7b 7d 0a 20 20 20 20 20 20         {}.      
1080: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
1090: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 6e     }.          n
10a0: 69 6c 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 7d  il.        }.  }
10b0: 0a 20 20 63 6f 6e 66 6c 69 63 74 2d 63 6c 61 75  .  conflict-clau
10c0: 73 65 20 7b 0a 20 20 20 20 6f 70 74 20 7b 6c 69  se {.    opt {li
10d0: 6e 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7b  ne ON CONFLICT {
10e0: 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 41 42 4f 52  or ROLLBACK ABOR
10f0: 54 20 46 41 49 4c 20 49 47 4e 4f 52 45 20 52 45  T FAIL IGNORE RE
1100: 50 4c 41 43 45 7d 7d 0a 20 20 7d 0a 20 20 63 72  PLACE}}.  }.  cr
1110: 65 61 74 65 2d 74 72 69 67 67 65 72 2d 73 74 6d  eate-trigger-stm
1120: 74 20 7b 0a 20 20 20 20 73 74 61 63 6b 0a 20 20  t {.    stack.  
1130: 20 20 20 20 20 7b 6c 69 6e 65 20 43 52 45 41 54       {line CREAT
1140: 45 20 7b 6f 72 20 7b 7d 20 54 45 4d 50 20 54 45  E {or {} TEMP TE
1150: 4d 50 4f 52 41 52 59 7d 20 54 52 49 47 47 45 52  MPORARY} TRIGGER
1160: 20 7b 6f 70 74 20 49 46 20 4e 4f 54 20 45 58 49   {opt IF NOT EXI
1170: 53 54 53 7d 7d 0a 20 20 20 20 20 20 20 7b 6c 69  STS}}.       {li
1180: 6e 65 20 7b 6f 70 74 78 20 2f 64 61 74 61 62 61  ne {optx /databa
1190: 73 65 2d 6e 61 6d 65 20 2e 7d 20 2f 74 72 69 67  se-name .} /trig
11a0: 67 65 72 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20  ger-name.       
11b0: 20 20 20 20 20 20 7b 6f 72 20 42 45 46 4f 52 45        {or BEFORE
11c0: 20 41 46 54 45 52 20 7b 6c 69 6e 65 20 49 4e 53   AFTER {line INS
11d0: 54 45 41 44 20 4f 46 7d 20 6e 69 6c 7d 0a 20 20  TEAD OF} nil}.  
11e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 7b 6c       }.       {l
11f0: 69 6e 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  ine.            
1200: 20 7b 6f 72 20 44 45 4c 45 54 45 20 49 4e 53 45   {or DELETE INSE
1210: 52 54 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  RT .            
1220: 20 20 20 20 20 7b 6c 69 6e 65 20 55 50 44 41 54       {line UPDAT
1230: 45 20 7b 6f 70 74 20 4f 46 20 7b 6c 6f 6f 70 20  E {opt OF {loop 
1240: 2f 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 2c 7d 20  /column-name ,} 
1250: 7d 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }}.             
1260: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  }.             O
1270: 4e 20 2f 74 61 62 6c 65 2d 6e 61 6d 65 0a 20 20  N /table-name.  
1280: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 7b 6c       }.       {l
1290: 69 6e 65 20 7b 6f 70 74 78 20 46 4f 52 20 45 41  ine {optx FOR EA
12a0: 43 48 20 52 4f 57 7d 0a 20 20 20 20 20 20 20 20  CH ROW}.        
12b0: 20 20 20 20 20 7b 6f 70 74 78 20 57 48 45 4e 20       {optx WHEN 
12c0: 65 78 70 72 7d 0a 20 20 20 20 20 20 20 7d 0a 20  expr}.       }. 
12d0: 20 20 20 20 20 20 7b 6c 69 6e 65 20 42 45 47 49        {line BEGI
12e0: 4e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  N.             {
12f0: 6c 6f 6f 70 20 0a 20 20 20 20 20 20 20 20 20 20  loop .          
1300: 20 20 20 20 20 20 7b 6c 69 6e 65 20 7b 6f 72 20        {line {or 
1310: 75 70 64 61 74 65 2d 73 74 6d 74 20 69 6e 73 65  update-stmt inse
1320: 72 74 2d 73 74 6d 74 20 64 65 6c 65 74 65 2d 73  rt-stmt delete-s
1330: 74 6d 74 20 73 65 6c 65 63 74 2d 73 74 6d 74 7d  tmt select-stmt}
1340: 20 3b 7d 20 0a 20 20 20 20 20 20 20 20 20 20 20   ;} .           
1350: 20 20 20 20 20 6e 69 6c 0a 20 20 20 20 20 20 20       nil.       
1360: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1370: 20 20 20 20 20 45 4e 44 0a 20 20 20 20 20 20 20       END.       
1380: 7d 0a 20 20 7d 0a 20 20 63 72 65 61 74 65 2d 76  }.  }.  create-v
1390: 69 65 77 2d 73 74 6d 74 20 7b 0a 20 20 20 20 73  iew-stmt {.    s
13a0: 74 61 63 6b 0a 20 20 20 20 20 20 20 7b 6c 69 6e  tack.       {lin
13b0: 65 20 43 52 45 41 54 45 20 7b 6f 72 20 7b 7d 20  e CREATE {or {} 
13c0: 54 45 4d 50 20 54 45 4d 50 4f 52 41 52 59 7d 20  TEMP TEMPORARY} 
13d0: 56 49 45 57 20 7b 6f 70 74 20 49 46 20 4e 4f 54  VIEW {opt IF NOT
13e0: 20 45 58 49 53 54 53 7d 7d 0a 20 20 20 20 20 20   EXISTS}}.      
13f0: 20 7b 6c 69 6e 65 20 7b 6f 70 74 78 20 2f 64 61   {line {optx /da
1400: 74 61 62 61 73 65 2d 6e 61 6d 65 20 2e 7d 20 2f  tabase-name .} /
1410: 76 69 65 77 2d 6e 61 6d 65 20 41 53 20 73 65 6c  view-name AS sel
1420: 65 63 74 2d 73 74 6d 74 7d 0a 20 20 7d 0a 20 20  ect-stmt}.  }.  
1430: 63 72 65 61 74 65 2d 76 69 72 74 75 61 6c 2d 74  create-virtual-t
1440: 61 62 6c 65 2d 73 74 6d 74 20 7b 0a 20 20 20 20  able-stmt {.    
1450: 73 74 61 63 6b 0a 20 20 20 20 20 20 20 7b 6c 69  stack.       {li
1460: 6e 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41  ne CREATE VIRTUA
1470: 4c 20 54 41 42 4c 45 20 7b 6f 70 74 78 20 2f 64  L TABLE {optx /d
1480: 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 2e 7d 20  atabase-name .} 
1490: 2f 74 61 62 6c 65 2d 6e 61 6d 65 7d 0a 20 20 20  /table-name}.   
14a0: 20 20 20 20 7b 6c 69 6e 65 20 55 53 49 4e 47 20      {line USING 
14b0: 2f 6d 6f 64 75 6c 65 2d 6e 61 6d 65 20 7b 6f 70  /module-name {op
14c0: 74 78 20 28 20 7b 6c 6f 6f 70 20 2f 6d 6f 64 75  tx ( {loop /modu
14d0: 6c 65 2d 61 72 67 75 6d 65 6e 74 20 2c 7d 20 29  le-argument ,} )
14e0: 7d 7d 0a 20 20 7d 0a 20 20 64 65 6c 65 74 65 2d  }}.  }.  delete-
14f0: 73 74 6d 74 20 7b 0a 20 20 20 20 6c 69 6e 65 20  stmt {.    line 
1500: 44 45 4c 45 54 45 20 46 52 4f 4d 20 71 75 61 6c  DELETE FROM qual
1510: 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65  ified-table-name
1520: 20 7b 6f 70 74 78 20 57 48 45 52 45 20 65 78 70   {optx WHERE exp
1530: 72 7d 0a 20 20 7d 0a 20 20 64 65 6c 65 74 65 2d  r}.  }.  delete-
1540: 73 74 6d 74 2d 6c 69 6d 69 74 65 64 20 7b 0a 20  stmt-limited {. 
1550: 20 20 20 73 74 61 63 6b 0a 20 20 20 20 20 20 20     stack.       
1560: 20 7b 6c 69 6e 65 20 44 45 4c 45 54 45 20 46 52   {line DELETE FR
1570: 4f 4d 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62  OM qualified-tab
1580: 6c 65 2d 6e 61 6d 65 20 7b 6f 70 74 78 20 57 48  le-name {optx WH
1590: 45 52 45 20 65 78 70 72 7d 7d 0a 20 20 20 20 20  ERE expr}}.     
15a0: 20 20 20 7b 6f 70 74 78 0a 20 20 20 20 20 20 20     {optx.       
15b0: 20 20 20 20 20 7b 73 74 61 63 6b 0a 20 20 20 20       {stack.    
15c0: 20 20 20 20 20 20 20 20 20 20 7b 6f 70 74 78 20            {optx 
15d0: 4f 52 44 45 52 20 42 59 20 7b 6c 6f 6f 70 20 6f  ORDER BY {loop o
15e0: 72 64 65 72 69 6e 67 2d 74 65 72 6d 20 2c 7d 7d  rdering-term ,}}
15f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
1600: 6c 69 6e 65 20 4c 49 4d 49 54 20 2f 65 78 70 72  line LIMIT /expr
1610: 20 7b 6f 70 74 78 20 7b 6f 72 20 4f 46 46 53 45   {optx {or OFFSE
1620: 54 20 2c 7d 20 2f 65 78 70 72 7d 7d 0a 20 20 20  T ,} /expr}}.   
1630: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1640: 20 20 20 7d 0a 20 20 7d 0a 20 20 64 65 74 61 63     }.  }.  detac
1650: 68 2d 73 74 6d 74 20 7b 0a 20 20 20 20 6c 69 6e  h-stmt {.    lin
1660: 65 20 44 45 54 41 43 48 20 7b 6f 70 74 78 20 44  e DETACH {optx D
1670: 41 54 41 42 41 53 45 7d 20 2f 64 61 74 61 62 61  ATABASE} /databa
1680: 73 65 2d 6e 61 6d 65 0a 20 20 7d 0a 20 20 64 72  se-name.  }.  dr
1690: 6f 70 2d 69 6e 64 65 78 2d 73 74 6d 74 20 7b 0a  op-index-stmt {.
16a0: 20 20 20 20 6c 69 6e 65 20 44 52 4f 50 20 49 4e      line DROP IN
16b0: 44 45 58 20 7b 6f 70 74 78 20 49 46 20 45 58 49  DEX {optx IF EXI
16c0: 53 54 53 7d 20 7b 6f 70 74 78 20 2f 64 61 74 61  STS} {optx /data
16d0: 62 61 73 65 2d 6e 61 6d 65 20 2e 7d 20 2f 69 6e  base-name .} /in
16e0: 64 65 78 2d 6e 61 6d 65 0a 20 20 7d 0a 20 20 64  dex-name.  }.  d
16f0: 72 6f 70 2d 74 61 62 6c 65 2d 73 74 6d 74 20 7b  rop-table-stmt {
1700: 0a 20 20 20 20 6c 69 6e 65 20 44 52 4f 50 20 54  .    line DROP T
1710: 41 42 4c 45 20 7b 6f 70 74 78 20 49 46 20 45 58  ABLE {optx IF EX
1720: 49 53 54 53 7d 20 7b 6f 70 74 78 20 2f 64 61 74  ISTS} {optx /dat
1730: 61 62 61 73 65 2d 6e 61 6d 65 20 2e 7d 20 2f 74  abase-name .} /t
1740: 61 62 6c 65 2d 6e 61 6d 65 0a 20 20 7d 0a 20 20  able-name.  }.  
1750: 64 72 6f 70 2d 74 72 69 67 67 65 72 2d 73 74 6d  drop-trigger-stm
1760: 74 20 7b 0a 20 20 20 20 6c 69 6e 65 20 44 52 4f  t {.    line DRO
1770: 50 20 54 52 49 47 47 45 52 20 7b 6f 70 74 78 20  P TRIGGER {optx 
1780: 49 46 20 45 58 49 53 54 53 7d 20 7b 6f 70 74 78  IF EXISTS} {optx
1790: 20 2f 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 20   /database-name 
17a0: 2e 7d 20 2f 74 72 69 67 67 65 72 2d 6e 61 6d 65  .} /trigger-name
17b0: 0a 20 20 7d 0a 20 20 64 72 6f 70 2d 76 69 65 77  .  }.  drop-view
17c0: 2d 73 74 6d 74 20 7b 0a 20 20 20 20 6c 69 6e 65  -stmt {.    line
17d0: 20 44 52 4f 50 20 56 49 45 57 20 7b 6f 70 74 78   DROP VIEW {optx
17e0: 20 49 46 20 45 58 49 53 54 53 7d 20 7b 6f 70 74   IF EXISTS} {opt
17f0: 78 20 2f 64 61 74 61 62 61 73 65 2d 6e 61 6d 65  x /database-name
1800: 20 2e 7d 20 2f 76 69 65 77 2d 6e 61 6d 65 0a 20   .} /view-name. 
1810: 20 7d 0a 20 20 65 78 70 72 20 7b 0a 20 20 20 20   }.  expr {.    
1820: 6f 72 0a 20 20 20 20 20 7b 6c 69 6e 65 20 6c 69  or.     {line li
1830: 74 65 72 61 6c 2d 76 61 6c 75 65 7d 0a 20 20 20  teral-value}.   
1840: 20 20 7b 6c 69 6e 65 20 62 69 6e 64 2d 70 61 72    {line bind-par
1850: 61 6d 65 74 65 72 7d 0a 20 20 20 20 20 7b 6c 69  ameter}.     {li
1860: 6e 65 20 7b 6f 70 74 78 20 7b 6f 70 74 78 20 2f  ne {optx {optx /
1870: 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 2e 7d  database-name .}
1880: 20 2f 74 61 62 6c 65 2d 6e 61 6d 65 20 2e 7d 20   /table-name .} 
1890: 2f 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 7d 0a 20 20  /column-name}.  
18a0: 20 20 20 7b 6c 69 6e 65 20 2f 75 6e 61 72 79 2d     {line /unary-
18b0: 6f 70 65 72 61 74 6f 72 20 65 78 70 72 7d 0a 20  operator expr}. 
18c0: 20 20 20 20 7b 6c 69 6e 65 20 65 78 70 72 20 2f      {line expr /
18d0: 62 69 6e 61 72 79 2d 6f 70 65 72 61 74 6f 72 20  binary-operator 
18e0: 65 78 70 72 7d 0a 20 20 20 20 20 7b 6c 69 6e 65  expr}.     {line
18f0: 20 2f 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 20   /function-name 
1900: 28 20 7b 6f 72 20 7b 6c 69 6e 65 20 7b 6f 70 74  ( {or {line {opt
1910: 78 20 44 49 53 54 49 4e 43 54 7d 20 7b 74 6f 70  x DISTINCT} {top
1920: 6c 6f 6f 70 20 65 78 70 72 20 2c 7d 7d 20 7b 7d  loop expr ,}} {}
1930: 20 2a 7d 20 29 7d 0a 20 20 20 20 20 7b 6c 69 6e   *} )}.     {lin
1940: 65 20 28 20 65 78 70 72 20 29 7d 0a 20 20 20 20  e ( expr )}.    
1950: 20 7b 6c 69 6e 65 20 43 41 53 54 20 28 20 65 78   {line CAST ( ex
1960: 70 72 20 41 53 20 74 79 70 65 2d 6e 61 6d 65 20  pr AS type-name 
1970: 29 7d 0a 20 20 20 20 20 7b 6c 69 6e 65 20 65 78  )}.     {line ex
1980: 70 72 20 43 4f 4c 4c 41 54 45 20 2f 63 6f 6c 6c  pr COLLATE /coll
1990: 61 74 69 6f 6e 2d 6e 61 6d 65 7d 0a 20 20 20 20  ation-name}.    
19a0: 20 7b 6c 69 6e 65 20 65 78 70 72 20 7b 6f 70 74   {line expr {opt
19b0: 78 20 4e 4f 54 7d 20 7b 6f 72 20 4c 49 4b 45 20  x NOT} {or LIKE 
19c0: 47 4c 4f 42 20 52 45 47 45 58 50 20 4d 41 54 43  GLOB REGEXP MATC
19d0: 48 7d 20 65 78 70 72 0a 20 20 20 20 20 20 20 20  H} expr.        
19e0: 20 20 20 7b 6f 70 74 78 20 45 53 43 41 50 45 20     {optx ESCAPE 
19f0: 65 78 70 72 7d 7d 0a 20 20 20 20 20 7b 6c 69 6e  expr}}.     {lin
1a00: 65 20 65 78 70 72 20 7b 6f 72 20 49 53 4e 55 4c  e expr {or ISNUL
1a10: 4c 20 4e 4f 54 4e 55 4c 4c 20 7b 6c 69 6e 65 20  L NOTNULL {line 
1a20: 4e 4f 54 20 4e 55 4c 4c 7d 7d 7d 0a 20 20 20 20  NOT NULL}}}.    
1a30: 20 7b 6c 69 6e 65 20 65 78 70 72 20 49 53 20 7b   {line expr IS {
1a40: 6f 70 74 78 20 4e 4f 54 7d 20 65 78 70 72 7d 0a  optx NOT} expr}.
1a50: 20 20 20 20 20 7b 6c 69 6e 65 20 65 78 70 72 20       {line expr 
1a60: 7b 6f 70 74 78 20 4e 4f 54 7d 20 42 45 54 57 45  {optx NOT} BETWE
1a70: 45 4e 20 65 78 70 72 20 41 4e 44 20 65 78 70 72  EN expr AND expr
1a80: 7d 0a 20 20 20 20 20 7b 6c 69 6e 65 20 65 78 70  }.     {line exp
1a90: 72 20 7b 6f 70 74 78 20 4e 4f 54 7d 20 49 4e 20  r {optx NOT} IN 
1aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 72  .            {or
1ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ac0: 7b 6c 69 6e 65 20 28 20 7b 6f 72 20 7b 7d 20 73  {line ( {or {} s
1ad0: 65 6c 65 63 74 2d 73 74 6d 74 20 7b 6c 6f 6f 70  elect-stmt {loop
1ae0: 20 65 78 70 72 20 2c 7d 7d 20 29 7d 0a 20 20 20   expr ,}} )}.   
1af0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e              {lin
1b00: 65 20 7b 6f 70 74 78 20 2f 64 61 74 61 62 61 73  e {optx /databas
1b10: 65 2d 6e 61 6d 65 20 2e 7d 20 2f 74 61 62 6c 65  e-name .} /table
1b20: 2d 6e 61 6d 65 7d 0a 20 20 20 20 20 20 20 20 20  -name}.         
1b30: 20 20 20 7d 0a 20 20 20 20 20 7d 0a 20 20 20 20     }.     }.    
1b40: 20 7b 6c 69 6e 65 20 7b 6f 70 74 78 20 7b 6f 70   {line {optx {op
1b50: 74 78 20 4e 4f 54 7d 20 45 58 49 53 54 53 7d 20  tx NOT} EXISTS} 
1b60: 28 20 73 65 6c 65 63 74 2d 73 74 6d 74 20 29 7d  ( select-stmt )}
1b70: 0a 20 20 20 20 20 7b 6c 69 6e 65 20 43 41 53 45  .     {line CASE
1b80: 20 7b 6f 70 74 78 20 65 78 70 72 7d 20 7b 6c 6f   {optx expr} {lo
1b90: 6f 70 20 7b 6c 69 6e 65 20 57 48 45 4e 20 65 78  op {line WHEN ex
1ba0: 70 72 20 54 48 45 4e 20 65 78 70 72 7d 20 7b 7d  pr THEN expr} {}
1bb0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 7b 6f 70  }.           {op
1bc0: 74 78 20 45 4c 53 45 20 65 78 70 72 7d 20 45 4e  tx ELSE expr} EN
1bd0: 44 7d 0a 20 20 20 20 20 7b 6c 69 6e 65 20 72 61  D}.     {line ra
1be0: 69 73 65 2d 66 75 6e 63 74 69 6f 6e 7d 0a 20 20  ise-function}.  
1bf0: 7d 0a 20 20 72 61 69 73 65 2d 66 75 6e 63 74 69  }.  raise-functi
1c00: 6f 6e 20 7b 0a 20 20 20 20 20 6c 69 6e 65 20 52  on {.     line R
1c10: 41 49 53 45 20 28 20 0a 20 20 20 20 20 20 20 20  AISE ( .        
1c20: 20 20 20 7b 6f 72 20 49 47 4e 4f 52 45 0a 20 20     {or IGNORE.  
1c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69               {li
1c40: 6e 65 20 7b 6f 72 20 52 4f 4c 4c 42 41 43 4b 20  ne {or ROLLBACK 
1c50: 41 42 4f 52 54 20 46 41 49 4c 7d 20 2c 20 2f 65  ABORT FAIL} , /e
1c60: 72 72 6f 72 2d 6d 65 73 73 61 67 65 20 7d 0a 20  rror-message }. 
1c70: 20 20 20 20 20 20 20 20 20 20 7d 20 29 0a 20 20            } ).  
1c80: 7d 0a 20 20 6c 69 74 65 72 61 6c 2d 76 61 6c 75  }.  literal-valu
1c90: 65 20 7b 0a 20 20 20 20 6f 72 0a 20 20 20 20 20  e {.    or.     
1ca0: 7b 6c 69 6e 65 20 2f 6e 75 6d 65 72 69 63 2d 6c  {line /numeric-l
1cb0: 69 74 65 72 61 6c 7d 0a 20 20 20 20 20 7b 6c 69  iteral}.     {li
1cc0: 6e 65 20 2f 73 74 72 69 6e 67 2d 6c 69 74 65 72  ne /string-liter
1cd0: 61 6c 7d 0a 20 20 20 20 20 7b 6c 69 6e 65 20 2f  al}.     {line /
1ce0: 62 6c 6f 62 2d 6c 69 74 65 72 61 6c 7d 0a 20 20  blob-literal}.  
1cf0: 20 20 20 7b 6c 69 6e 65 20 4e 55 4c 4c 7d 0a 20     {line NULL}. 
1d00: 20 20 20 20 7b 6c 69 6e 65 20 43 55 52 52 45 4e      {line CURREN
1d10: 54 5f 54 49 4d 45 7d 0a 20 20 20 20 20 7b 6c 69  T_TIME}.     {li
1d20: 6e 65 20 43 55 52 52 45 4e 54 5f 44 41 54 45 7d  ne CURRENT_DATE}
1d30: 0a 20 20 20 20 20 7b 6c 69 6e 65 20 43 55 52 52  .     {line CURR
1d40: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 7d 0a 20  ENT_TIMESTAMP}. 
1d50: 20 7d 0a 20 20 6e 75 6d 65 72 69 63 2d 6c 69 74   }.  numeric-lit
1d60: 65 72 61 6c 20 7b 0a 20 20 20 20 6c 69 6e 65 20  eral {.    line 
1d70: 7b 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  {or.            
1d80: 7b 6c 69 6e 65 20 7b 6c 6f 6f 70 20 2f 64 69 67  {line {loop /dig
1d90: 69 74 20 6e 69 6c 7d 20 7b 6f 70 74 20 2f 64 65  it nil} {opt /de
1da0: 63 69 6d 61 6c 2d 70 6f 69 6e 74 20 7b 6c 6f 6f  cimal-point {loo
1db0: 70 20 6e 69 6c 20 2f 64 69 67 69 74 7d 7d 7d 0a  p nil /digit}}}.
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e              {lin
1dd0: 65 20 2f 64 65 63 69 6d 61 6c 2d 70 6f 69 6e 74  e /decimal-point
1de0: 20 7b 6c 6f 6f 70 20 2f 64 69 67 69 74 20 6e 69   {loop /digit ni
1df0: 6c 7d 7d 0a 20 20 20 20 20 20 20 20 20 7d 0a 20  l}}.         }. 
1e00: 20 20 20 20 20 20 20 20 7b 6f 70 74 20 45 20 7b          {opt E {
1e10: 6f 72 20 6e 69 6c 20 2b 20 2d 7d 20 7b 6c 6f 6f  or nil + -} {loo
1e20: 70 20 2f 64 69 67 69 74 20 6e 69 6c 7d 7d 0a 20  p /digit nil}}. 
1e30: 20 7d 0a 20 20 69 6e 73 65 72 74 2d 73 74 6d 74   }.  insert-stmt
1e40: 20 7b 0a 20 20 20 20 73 74 61 63 6b 0a 20 20 20   {.    stack.   
1e50: 20 20 20 20 7b 6c 69 6e 65 0a 20 20 20 20 20 20      {line.      
1e60: 20 20 20 20 7b 6f 72 20 0a 20 20 20 20 20 20 20      {or .       
1e70: 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 49 4e 53         {line INS
1e80: 45 52 54 20 7b 6f 70 74 20 4f 52 20 7b 6f 72 20  ERT {opt OR {or 
1e90: 52 4f 4c 4c 42 41 43 4b 20 41 42 4f 52 54 20 52  ROLLBACK ABORT R
1ea0: 45 50 4c 41 43 45 20 46 41 49 4c 20 49 47 4e 4f  EPLACE FAIL IGNO
1eb0: 52 45 7d 7d 7d 0a 20 20 20 20 20 20 20 20 20 20  RE}}}.          
1ec0: 20 20 20 20 52 45 50 4c 41 43 45 0a 20 20 20 20      REPLACE.    
1ed0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1ee0: 20 20 49 4e 54 4f 20 7b 6f 70 74 78 20 2f 64 61    INTO {optx /da
1ef0: 74 61 62 61 73 65 2d 6e 61 6d 65 20 2e 7d 20 2f  tabase-name .} /
1f00: 74 61 62 6c 65 2d 6e 61 6d 65 0a 20 20 20 20 20  table-name.     
1f10: 20 20 7d 0a 20 20 20 20 20 20 20 7b 74 61 69 6c    }.       {tail
1f20: 62 72 61 6e 63 68 0a 20 20 20 20 20 20 20 20 20  branch.         
1f30: 20 7b 6c 69 6e 65 20 0a 20 20 20 20 20 20 20 20   {line .        
1f40: 20 20 20 20 20 20 20 20 7b 6f 70 74 78 20 28 20          {optx ( 
1f50: 7b 6c 6f 6f 70 20 2f 63 6f 6c 75 6d 6e 2d 6e 61  {loop /column-na
1f60: 6d 65 20 2c 7d 20 29 7d 0a 20 20 20 20 20 20 20  me ,} )}.       
1f70: 20 20 20 20 20 20 20 20 20 7b 74 61 69 6c 62 72           {tailbr
1f80: 61 6e 63 68 0a 20 20 20 20 20 20 20 20 20 20 20  anch.           
1f90: 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 56           {line V
1fa0: 41 4c 55 45 53 20 28 20 7b 6c 6f 6f 70 20 65 78  ALUES ( {loop ex
1fb0: 70 72 20 2c 7d 20 29 7d 0a 20 20 20 20 20 20 20  pr ,} )}.       
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 6c               sel
1fd0: 65 63 74 2d 73 74 6d 74 0a 20 20 20 20 20 20 20  ect-stmt.       
1fe0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1ff0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
2000: 20 7b 6c 69 6e 65 20 44 45 46 41 55 4c 54 20 56   {line DEFAULT V
2010: 41 4c 55 45 53 7d 0a 20 20 20 20 20 20 20 7d 0a  ALUES}.       }.
2020: 20 20 7d 0a 20 20 70 72 61 67 6d 61 2d 73 74 6d    }.  pragma-stm
2030: 74 20 7b 0a 20 20 20 20 20 6c 69 6e 65 20 50 52  t {.     line PR
2040: 41 47 4d 41 20 7b 6f 70 74 78 20 2f 64 61 74 61  AGMA {optx /data
2050: 62 61 73 65 2d 6e 61 6d 65 20 2e 7d 20 2f 70 72  base-name .} /pr
2060: 61 67 6d 61 2d 6e 61 6d 65 0a 20 20 20 20 20 20  agma-name.      
2070: 20 20 20 20 7b 6f 72 0a 20 20 20 20 20 20 20 20      {or.        
2080: 20 20 20 20 20 20 6e 69 6c 0a 20 20 20 20 20 20        nil.      
2090: 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 3d 20          {line = 
20a0: 70 72 61 67 6d 61 2d 76 61 6c 75 65 7d 0a 20 20  pragma-value}.  
20b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e              {lin
20c0: 65 20 28 20 70 72 61 67 6d 61 2d 76 61 6c 75 65  e ( pragma-value
20d0: 20 29 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   )}.          }.
20e0: 20 20 7d 0a 20 20 70 72 61 67 6d 61 2d 76 61 6c    }.  pragma-val
20f0: 75 65 20 7b 0a 20 20 20 20 20 6f 72 0a 20 20 20  ue {.     or.   
2100: 20 20 20 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62       signed-numb
2110: 65 72 0a 20 20 20 20 20 20 20 20 2f 6e 61 6d 65  er.        /name
2120: 0a 20 20 20 20 20 20 20 20 2f 73 74 72 69 6e 67  .        /string
2130: 2d 6c 69 74 65 72 61 6c 0a 20 20 7d 0a 20 20 72  -literal.  }.  r
2140: 65 69 6e 64 65 78 2d 73 74 6d 74 20 7b 0a 20 20  eindex-stmt {.  
2150: 20 20 20 6c 69 6e 65 20 52 45 49 4e 44 45 58 0a     line REINDEX.
2160: 20 20 20 20 20 20 20 20 20 20 7b 74 61 69 6c 62            {tailb
2170: 72 61 6e 63 68 20 6e 69 6c 0a 20 20 20 20 20 20  ranch nil.      
2180: 20 20 20 20 20 20 20 2f 63 6f 6c 6c 61 74 69 6f         /collatio
2190: 6e 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20  n-name.         
21a0: 20 20 20 20 7b 6c 69 6e 65 20 7b 6f 70 74 78 20      {line {optx 
21b0: 2f 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 2e  /database-name .
21c0: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }.              
21d0: 20 20 20 7b 74 61 69 6c 62 72 61 6e 63 68 20 2f     {tailbranch /
21e0: 74 61 62 6c 65 2d 6e 61 6d 65 20 2f 69 6e 64 65  table-name /inde
21f0: 78 2d 6e 61 6d 65 7d 0a 20 20 20 20 20 20 20 20  x-name}.        
2200: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
2210: 20 7d 0a 20 20 7d 0a 20 20 73 65 6c 65 63 74 2d   }.  }.  select-
2220: 73 74 6d 74 20 7b 0a 20 20 20 20 73 74 61 63 6b  stmt {.    stack
2230: 0a 20 20 20 20 20 20 20 7b 6c 6f 6f 70 20 7b 6c  .       {loop {l
2240: 69 6e 65 20 73 65 6c 65 63 74 2d 63 6f 72 65 20  ine select-core 
2250: 6e 69 6c 7d 20 7b 6e 69 6c 20 63 6f 6d 70 6f 75  nil} {nil compou
2260: 6e 64 2d 6f 70 65 72 61 74 6f 72 20 6e 69 6c 7d  nd-operator nil}
2270: 7d 0a 20 20 20 20 20 20 20 7b 6f 70 74 78 20 4f  }.       {optx O
2280: 52 44 45 52 20 42 59 20 7b 6c 6f 6f 70 20 6f 72  RDER BY {loop or
2290: 64 65 72 69 6e 67 2d 74 65 72 6d 20 2c 7d 7d 0a  dering-term ,}}.
22a0: 20 20 20 20 20 20 20 7b 6f 70 74 78 20 4c 49 4d         {optx LIM
22b0: 49 54 20 2f 65 78 70 72 20 7b 6f 70 74 78 20 7b  IT /expr {optx {
22c0: 6f 72 20 4f 46 46 53 45 54 20 2c 7d 20 2f 65 78  or OFFSET ,} /ex
22d0: 70 72 7d 7d 0a 20 20 7d 0a 20 20 73 65 6c 65 63  pr}}.  }.  selec
22e0: 74 2d 63 6f 72 65 20 7b 0a 20 20 20 20 20 73 74  t-core {.     st
22f0: 61 63 6b 0a 20 20 20 20 20 20 20 7b 6c 69 6e 65  ack.       {line
2300: 20 53 45 4c 45 43 54 20 7b 6f 72 20 6e 69 6c 20   SELECT {or nil 
2310: 44 49 53 54 49 4e 43 54 20 41 4c 4c 7d 20 7b 6c  DISTINCT ALL} {l
2320: 6f 6f 70 20 72 65 73 75 6c 74 2d 63 6f 6c 75 6d  oop result-colum
2330: 6e 20 2c 7d 7d 0a 20 20 20 20 20 20 20 7b 6f 70  n ,}}.       {op
2340: 74 78 20 46 52 4f 4d 20 6a 6f 69 6e 2d 73 6f 75  tx FROM join-sou
2350: 72 63 65 7d 0a 20 20 20 20 20 20 20 7b 6f 70 74  rce}.       {opt
2360: 78 20 57 48 45 52 45 20 65 78 70 72 7d 0a 20 20  x WHERE expr}.  
2370: 20 20 20 20 20 7b 6f 70 74 78 20 47 52 4f 55 50       {optx GROUP
2380: 20 42 59 20 7b 6c 6f 6f 70 20 6f 72 64 65 72 69   BY {loop orderi
2390: 6e 67 2d 74 65 72 6d 20 2c 7d 20 7b 6f 70 74 78  ng-term ,} {optx
23a0: 20 48 41 56 49 4e 47 20 65 78 70 72 7d 7d 0a 20   HAVING expr}}. 
23b0: 20 20 20 20 20 20 20 0a 20 20 7d 0a 20 20 72 65         .  }.  re
23c0: 73 75 6c 74 2d 63 6f 6c 75 6d 6e 20 7b 0a 20 20  sult-column {.  
23d0: 20 20 20 6f 72 0a 20 20 20 20 20 20 20 20 2a 0a     or.        *.
23e0: 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 2f 74          {line /t
23f0: 61 62 6c 65 2d 6e 61 6d 65 20 2e 20 2a 7d 0a 20  able-name . *}. 
2400: 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 65 78 70         {line exp
2410: 72 20 7b 6f 70 74 78 20 7b 6f 70 74 78 20 41 53  r {optx {optx AS
2420: 7d 20 2f 63 6f 6c 75 6d 6e 2d 61 6c 69 61 73 7d  } /column-alias}
2430: 7d 0a 20 20 7d 0a 20 20 6a 6f 69 6e 2d 73 6f 75  }.  }.  join-sou
2440: 72 63 65 20 7b 0a 20 20 20 20 20 6c 69 6e 65 0a  rce {.     line.
2450: 20 20 20 20 20 20 20 20 73 69 6e 67 6c 65 2d 73          single-s
2460: 6f 75 72 63 65 0a 20 20 20 20 20 20 20 20 7b 6f  ource.        {o
2470: 70 74 20 7b 6c 6f 6f 70 20 7b 6c 69 6e 65 20 6e  pt {loop {line n
2480: 69 6c 20 6a 6f 69 6e 2d 6f 70 20 73 69 6e 67 6c  il join-op singl
2490: 65 2d 73 6f 75 72 63 65 20 6a 6f 69 6e 2d 63 6f  e-source join-co
24a0: 6e 73 74 72 61 69 6e 74 20 6e 69 6c 7d 20 7b 7d  nstraint nil} {}
24b0: 7d 7d 0a 20 20 7d 0a 20 20 73 69 6e 67 6c 65 2d  }}.  }.  single-
24c0: 73 6f 75 72 63 65 20 7b 0a 20 20 20 20 20 6f 72  source {.     or
24d0: 0a 20 20 20 20 20 20 20 7b 6c 69 6e 65 0a 20 20  .       {line.  
24e0: 20 20 20 20 20 20 20 20 7b 6f 70 74 78 20 2f 64          {optx /d
24f0: 61 74 61 62 61 73 65 2d 6e 61 6d 65 20 2e 7d 20  atabase-name .} 
2500: 2f 74 61 62 6c 65 2d 6e 61 6d 65 0a 20 20 20 20  /table-name.    
2510: 20 20 20 20 20 20 7b 6f 70 74 78 20 7b 6f 70 74        {optx {opt
2520: 78 20 41 53 7d 20 2f 74 61 62 6c 65 2d 61 6c 69  x AS} /table-ali
2530: 61 73 7d 0a 20 20 20 20 20 20 20 20 20 20 7b 6f  as}.          {o
2540: 72 20 6e 69 6c 20 7b 6c 69 6e 65 20 49 4e 44 45  r nil {line INDE
2550: 58 45 44 20 42 59 20 2f 69 6e 64 65 78 2d 6e 61  XED BY /index-na
2560: 6d 65 7d 20 7b 6c 69 6e 65 20 4e 4f 54 20 49 4e  me} {line NOT IN
2570: 44 45 58 45 44 7d 7d 0a 20 20 20 20 20 20 20 7d  DEXED}}.       }
2580: 0a 20 20 20 20 20 20 20 7b 6c 69 6e 65 0a 20 20  .       {line.  
2590: 20 20 20 20 20 20 20 20 28 20 73 65 6c 65 63 74          ( select
25a0: 2d 73 74 6d 74 20 29 20 7b 6f 70 74 78 20 7b 6f  -stmt ) {optx {o
25b0: 70 74 78 20 41 53 7d 20 2f 74 61 62 6c 65 2d 61  ptx AS} /table-a
25c0: 6c 69 61 73 7d 0a 20 20 20 20 20 20 20 7d 0a 20  lias}.       }. 
25d0: 20 20 20 20 20 20 7b 6c 69 6e 65 20 28 20 6a 6f        {line ( jo
25e0: 69 6e 2d 73 6f 75 72 63 65 20 29 7d 0a 20 20 7d  in-source )}.  }
25f0: 0a 20 20 6a 6f 69 6e 2d 6f 70 20 7b 0a 20 20 20  .  join-op {.   
2600: 20 20 6f 72 0a 20 20 20 20 20 20 20 20 7b 6c 69    or.        {li
2610: 6e 65 20 2c 7d 0a 20 20 20 20 20 20 20 20 7b 6c  ne ,}.        {l
2620: 69 6e 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  ine.            
2630: 7b 6f 70 74 20 4e 41 54 55 52 41 4c 7d 0a 20 20  {opt NATURAL}.  
2640: 20 20 20 20 20 20 20 20 20 20 7b 6f 72 20 20 6e            {or  n
2650: 69 6c 20 7b 6c 69 6e 65 20 4c 45 46 54 20 7b 6f  il {line LEFT {o
2660: 72 20 4f 55 54 45 52 20 6e 69 6c 7d 7d 20 49 4e  r OUTER nil}} IN
2670: 4e 45 52 20 43 52 4f 53 53 7d 0a 20 20 20 20 20  NER CROSS}.     
2680: 20 20 20 20 20 20 20 4a 4f 49 4e 0a 20 20 20 20         JOIN.    
2690: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 6a 6f 69 6e      }.  }.  join
26a0: 2d 63 6f 6e 73 74 72 61 69 6e 74 20 7b 0a 20 20  -constraint {.  
26b0: 20 20 20 6f 72 0a 20 20 20 20 20 20 20 20 7b 6c     or.        {l
26c0: 69 6e 65 20 4f 4e 20 65 78 70 72 7d 0a 20 20 20  ine ON expr}.   
26d0: 20 20 20 20 20 7b 6c 69 6e 65 20 55 53 49 4e 47       {line USING
26e0: 20 28 20 7b 6c 6f 6f 70 20 2f 63 6f 6c 75 6d 6e   ( {loop /column
26f0: 2d 6e 61 6d 65 20 2c 7d 20 29 7d 0a 20 20 20 20  -name ,} )}.    
2700: 20 20 20 20 6e 69 6c 0a 20 20 7d 0a 20 20 6f 72      nil.  }.  or
2710: 64 65 72 69 6e 67 2d 74 65 72 6d 20 7b 0a 20 20  dering-term {.  
2720: 20 20 20 20 6c 69 6e 65 20 65 78 70 72 20 7b 6f      line expr {o
2730: 70 74 20 43 4f 4c 4c 41 54 45 20 2f 63 6f 6c 6c  pt COLLATE /coll
2740: 61 74 69 6f 6e 2d 6e 61 6d 65 7d 20 7b 6f 72 20  ation-name} {or 
2750: 6e 69 6c 20 41 53 43 20 44 45 53 43 7d 20 0a 20  nil ASC DESC} . 
2760: 20 7d 0a 20 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70   }.  compound-op
2770: 65 72 61 74 6f 72 20 7b 0a 20 20 20 20 20 6f 72  erator {.     or
2780: 20 7b 6c 69 6e 65 20 55 4e 49 4f 4e 20 7b 6f 70   {line UNION {op
2790: 74 78 20 41 4c 4c 7d 7d 20 49 4e 54 45 52 53 45  tx ALL}} INTERSE
27a0: 43 54 20 45 58 43 45 50 54 0a 20 20 7d 0a 20 20  CT EXCEPT.  }.  
27b0: 75 70 64 61 74 65 2d 73 74 6d 74 20 7b 0a 20 20  update-stmt {.  
27c0: 20 20 20 73 74 61 63 6b 0a 20 20 20 20 20 20 20     stack.       
27d0: 20 7b 6c 69 6e 65 20 55 50 44 41 54 45 20 7b 6f   {line UPDATE {o
27e0: 70 74 20 4f 52 20 7b 6f 72 20 52 4f 4c 4c 42 41  pt OR {or ROLLBA
27f0: 43 4b 20 41 42 4f 52 54 20 52 45 50 4c 41 43 45  CK ABORT REPLACE
2800: 20 46 41 49 4c 20 49 47 4e 4f 52 45 7d 7d 0a 20   FAIL IGNORE}}. 
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 71 75 61               qua
2820: 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
2830: 65 7d 0a 20 20 20 20 20 20 20 20 7b 6c 69 6e 65  e}.        {line
2840: 20 53 45 54 20 7b 6c 6f 6f 70 20 7b 6c 69 6e 65   SET {loop {line
2850: 20 2f 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 3d 20   /column-name = 
2860: 65 78 70 72 7d 20 2c 7d 20 7b 6f 70 74 78 20 57  expr} ,} {optx W
2870: 48 45 52 45 20 65 78 70 72 7d 7d 0a 20 20 7d 0a  HERE expr}}.  }.
2880: 20 20 75 70 64 61 74 65 2d 73 74 6d 74 2d 6c 69    update-stmt-li
2890: 6d 69 74 65 64 20 7b 0a 20 20 20 20 20 73 74 61  mited {.     sta
28a0: 63 6b 0a 20 20 20 20 20 20 20 20 7b 6c 69 6e 65  ck.        {line
28b0: 20 55 50 44 41 54 45 20 7b 6f 70 74 20 4f 52 20   UPDATE {opt OR 
28c0: 7b 6f 72 20 52 4f 4c 4c 42 41 43 4b 20 41 42 4f  {or ROLLBACK ABO
28d0: 52 54 20 52 45 50 4c 41 43 45 20 46 41 49 4c 20  RT REPLACE FAIL 
28e0: 49 47 4e 4f 52 45 7d 7d 0a 20 20 20 20 20 20 20  IGNORE}}.       
28f0: 20 20 20 20 20 20 20 71 75 61 6c 69 66 69 65 64         qualified
2900: 2d 74 61 62 6c 65 2d 6e 61 6d 65 7d 0a 20 20 20  -table-name}.   
2910: 20 20 20 20 20 7b 6c 69 6e 65 20 53 45 54 20 7b       {line SET {
2920: 6c 6f 6f 70 20 7b 6c 69 6e 65 20 2f 63 6f 6c 75  loop {line /colu
2930: 6d 6e 2d 6e 61 6d 65 20 3d 20 65 78 70 72 7d 20  mn-name = expr} 
2940: 2c 7d 20 7b 6f 70 74 78 20 57 48 45 52 45 20 65  ,} {optx WHERE e
2950: 78 70 72 7d 7d 0a 20 20 20 20 20 20 20 20 7b 6f  xpr}}.        {o
2960: 70 74 78 0a 20 20 20 20 20 20 20 20 20 20 20 20  ptx.            
2970: 7b 73 74 61 63 6b 0a 20 20 20 20 20 20 20 20 20  {stack.         
2980: 20 20 20 20 20 7b 6f 70 74 78 20 4f 52 44 45 52       {optx ORDER
2990: 20 42 59 20 7b 6c 6f 6f 70 20 6f 72 64 65 72 69   BY {loop orderi
29a0: 6e 67 2d 74 65 72 6d 20 2c 7d 7d 0a 20 20 20 20  ng-term ,}}.    
29b0: 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20            {line 
29c0: 4c 49 4d 49 54 20 2f 65 78 70 72 20 7b 6f 70 74  LIMIT /expr {opt
29d0: 78 20 7b 6f 72 20 4f 46 46 53 45 54 20 2c 7d 20  x {or OFFSET ,} 
29e0: 2f 65 78 70 72 7d 7d 0a 20 20 20 20 20 20 20 20  /expr}}.        
29f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
2a00: 20 20 7d 0a 20 20 71 75 61 6c 69 66 69 65 64 2d    }.  qualified-
2a10: 74 61 62 6c 65 2d 6e 61 6d 65 20 7b 0a 20 20 20  table-name {.   
2a20: 20 20 6c 69 6e 65 20 7b 6f 70 74 78 20 2f 64 61    line {optx /da
2a30: 74 61 62 61 73 65 2d 6e 61 6d 65 20 2e 7d 20 2f  tabase-name .} /
2a40: 74 61 62 6c 65 2d 6e 61 6d 65 0a 20 20 20 20 20  table-name.     
2a50: 20 20 20 20 20 7b 6f 72 20 6e 69 6c 20 7b 6c 69       {or nil {li
2a60: 6e 65 20 49 4e 44 45 58 45 44 20 42 59 20 2f 69  ne INDEXED BY /i
2a70: 6e 64 65 78 2d 6e 61 6d 65 7d 20 7b 6c 69 6e 65  ndex-name} {line
2a80: 20 4e 4f 54 20 49 4e 44 45 58 45 44 7d 7d 0a 20   NOT INDEXED}}. 
2a90: 20 7d 0a 20 20 76 61 63 75 75 6d 2d 73 74 6d 74   }.  vacuum-stmt
2aa0: 20 7b 0a 20 20 20 20 20 20 6c 69 6e 65 20 56 41   {.      line VA
2ab0: 43 55 55 4d 0a 20 20 7d 0a 20 20 63 6f 6d 6d 65  CUUM.  }.  comme
2ac0: 6e 74 2d 73 79 6e 74 61 78 20 7b 0a 20 20 20 20  nt-syntax {.    
2ad0: 6f 72 0a 20 20 20 20 20 20 7b 6c 69 6e 65 20 2d  or.      {line -
2ae0: 2d 20 7b 6c 6f 6f 70 20 6e 69 6c 20 2f 61 6e 79  - {loop nil /any
2af0: 74 68 69 6e 67 2d 65 78 63 65 70 74 2d 6e 65 77  thing-except-new
2b00: 6c 69 6e 65 7d 20 0a 20 20 20 20 20 20 20 20 20  line} .         
2b10: 20 20 7b 6f 72 20 2f 6e 65 77 6c 69 6e 65 20 2f    {or /newline /
2b20: 65 6e 64 2d 6f 66 2d 69 6e 70 75 74 7d 7d 0a 20  end-of-input}}. 
2b30: 20 20 20 20 20 7b 6c 69 6e 65 20 2f 2a 20 7b 6c       {line /* {l
2b40: 6f 6f 70 20 6e 69 6c 20 2f 61 6e 79 74 68 69 6e  oop nil /anythin
2b50: 67 2d 65 78 63 65 70 74 2d 2a 2f 7d 0a 20 20 20  g-except-*/}.   
2b60: 20 20 20 20 20 20 20 20 7b 6f 72 20 2a 2f 20 2f          {or */ /
2b70: 65 6e 64 2d 6f 66 2d 69 6e 70 75 74 7d 7d 0a 20  end-of-input}}. 
2b80: 20 7d 0a 7d 0a                                    }.}.