Documentation Source Text

Hex Artifact Content
Login

Artifact 954a4e2739a7a4104c5474d750cb95a68222076129145ae80210eb29ded3afa5:


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 72 69 67 68 74 73 74 61 63 6b 0a 20      rightstack. 
0400: 20 20 20 20 20 20 7b 6c 69 6e 65 20 41 4c 54 45        {line ALTE
0410: 52 20 54 41 42 4c 45 20 7b 6f 70 74 78 20 2f 73  R TABLE {optx /s
0420: 63 68 65 6d 61 2d 6e 61 6d 65 20 2e 7d 20 2f 74  chema-name .} /t
0430: 61 62 6c 65 2d 6e 61 6d 65 7d 0a 20 20 20 20 20  able-name}.     
0440: 20 20 7b 74 61 69 6c 62 72 61 6e 63 68 0a 20 20    {tailbranch.  
0450: 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 52 45          {line RE
0460: 4e 41 4d 45 20 54 4f 20 2f 6e 65 77 2d 74 61 62  NAME TO /new-tab
0470: 6c 65 2d 6e 61 6d 65 7d 0a 20 20 20 20 20 20 20  le-name}.       
0480: 20 20 20 7b 6c 69 6e 65 20 41 44 44 20 7b 6f 70     {line ADD {op
0490: 74 78 20 43 4f 4c 55 4d 4e 7d 20 63 6f 6c 75 6d  tx COLUMN} colum
04a0: 6e 2d 64 65 66 7d 0a 20 20 20 20 20 20 20 7d 0a  n-def}.       }.
04b0: 20 20 7d 0a 20 20 61 6e 61 6c 79 7a 65 2d 73 74    }.  analyze-st
04c0: 6d 74 20 7b 0a 20 20 20 20 20 6c 69 6e 65 20 41  mt {.     line A
04d0: 4e 41 4c 59 5a 45 20 7b 6f 72 20 6e 69 6c 20 2f  NALYZE {or nil /
04e0: 73 63 68 65 6d 61 2d 6e 61 6d 65 20 2f 74 61 62  schema-name /tab
04f0: 6c 65 2d 6f 72 2d 69 6e 64 65 78 2d 6e 61 6d 65  le-or-index-name
0500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0510: 20 20 20 20 20 7b 6c 69 6e 65 20 2f 73 63 68 65       {line /sche
0520: 6d 61 2d 6e 61 6d 65 20 2e 20 2f 74 61 62 6c 65  ma-name . /table
0530: 2d 6f 72 2d 69 6e 64 65 78 2d 6e 61 6d 65 7d 7d  -or-index-name}}
0540: 0a 20 20 7d 0a 20 20 61 74 74 61 63 68 2d 73 74  .  }.  attach-st
0550: 6d 74 20 7b 0a 20 20 20 20 20 6c 69 6e 65 20 41  mt {.     line A
0560: 54 54 41 43 48 20 7b 6f 72 20 44 41 54 41 42 41  TTACH {or DATABA
0570: 53 45 20 6e 69 6c 7d 20 65 78 70 72 20 41 53 20  SE nil} expr AS 
0580: 2f 73 63 68 65 6d 61 2d 6e 61 6d 65 0a 20 20 7d  /schema-name.  }
0590: 0a 20 20 62 65 67 69 6e 2d 73 74 6d 74 20 7b 0a  .  begin-stmt {.
05a0: 20 20 20 20 20 6c 69 6e 65 20 42 45 47 49 4e 20       line BEGIN 
05b0: 7b 6f 72 20 6e 69 6c 20 44 45 46 45 52 52 45 44  {or nil DEFERRED
05c0: 20 49 4d 4d 45 44 49 41 54 45 20 45 58 43 4c 55   IMMEDIATE EXCLU
05d0: 53 49 56 45 7d 0a 20 20 20 20 20 20 20 20 20 20  SIVE}.          
05e0: 7b 6f 70 74 78 20 54 52 41 4e 53 41 43 54 49 4f  {optx TRANSACTIO
05f0: 4e 7d 0a 20 20 7d 0a 20 20 63 6f 6d 6d 69 74 2d  N}.  }.  commit-
0600: 73 74 6d 74 20 7b 0a 20 20 20 20 20 6c 69 6e 65  stmt {.     line
0610: 20 7b 6f 72 20 43 4f 4d 4d 49 54 20 45 4e 44 7d   {or COMMIT END}
0620: 20 7b 6f 70 74 78 20 54 52 41 4e 53 41 43 54 49   {optx TRANSACTI
0630: 4f 4e 7d 0a 20 20 7d 0a 20 20 72 6f 6c 6c 62 61  ON}.  }.  rollba
0640: 63 6b 2d 73 74 6d 74 20 7b 0a 20 20 20 20 20 6c  ck-stmt {.     l
0650: 69 6e 65 20 52 4f 4c 4c 42 41 43 4b 20 7b 6f 70  ine ROLLBACK {op
0660: 74 78 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 0a  tx TRANSACTION}.
0670: 20 20 20 20 20 20 20 20 7b 6f 70 74 78 20 54 4f          {optx TO
0680: 20 7b 6f 70 74 78 20 53 41 56 45 50 4f 49 4e 54   {optx SAVEPOINT
0690: 7d 20 2f 73 61 76 65 70 6f 69 6e 74 2d 6e 61 6d  } /savepoint-nam
06a0: 65 7d 0a 20 20 7d 0a 20 20 73 61 76 65 70 6f 69  e}.  }.  savepoi
06b0: 6e 74 2d 73 74 6d 74 20 7b 0a 20 20 20 20 20 6c  nt-stmt {.     l
06c0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 20 2f 73  ine SAVEPOINT /s
06d0: 61 76 65 70 6f 69 6e 74 2d 6e 61 6d 65 0a 20 20  avepoint-name.  
06e0: 7d 0a 20 20 72 65 6c 65 61 73 65 2d 73 74 6d 74  }.  release-stmt
06f0: 20 7b 0a 20 20 20 20 20 6c 69 6e 65 20 52 45 4c   {.     line REL
0700: 45 41 53 45 20 7b 6f 70 74 78 20 53 41 56 45 50  EASE {optx SAVEP
0710: 4f 49 4e 54 7d 20 2f 73 61 76 65 70 6f 69 6e 74  OINT} /savepoint
0720: 2d 6e 61 6d 65 0a 20 20 7d 0a 20 20 63 72 65 61  -name.  }.  crea
0730: 74 65 2d 69 6e 64 65 78 2d 73 74 6d 74 20 7b 0a  te-index-stmt {.
0740: 20 20 20 20 72 69 67 68 74 73 74 61 63 6b 0a 20      rightstack. 
0750: 20 20 20 20 20 20 7b 6c 69 6e 65 20 43 52 45 41        {line CREA
0760: 54 45 20 7b 6f 70 74 20 55 4e 49 51 55 45 7d 20  TE {opt UNIQUE} 
0770: 49 4e 44 45 58 20 7b 6f 70 74 20 49 46 20 4e 4f  INDEX {opt IF NO
0780: 54 20 45 58 49 53 54 53 7d 7d 0a 20 20 20 20 20  T EXISTS}}.     
0790: 20 20 7b 6c 69 6e 65 20 7b 6f 70 74 78 20 2f 73    {line {optx /s
07a0: 63 68 65 6d 61 2d 6e 61 6d 65 20 2e 7d 20 2f 69  chema-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 20 20 20 20 20 7b 6c 69 6e 65 20  )}.       {line 
0800: 7b 6f 70 74 20 57 48 45 52 45 20 65 78 70 72 7d  {opt WHERE expr}
0810: 7d 0a 20 20 7d 0a 20 20 69 6e 64 65 78 65 64 2d  }.  }.  indexed-
0820: 63 6f 6c 75 6d 6e 20 7b 0a 20 20 20 20 20 20 6c  column {.      l
0830: 69 6e 65 20 7b 6f 72 20 2f 63 6f 6c 75 6d 6e 2d  ine {or /column-
0840: 6e 61 6d 65 20 65 78 70 72 20 7d 20 7b 6f 70 74  name expr } {opt
0850: 20 43 4f 4c 4c 41 54 45 20 2f 63 6f 6c 6c 61 74   COLLATE /collat
0860: 69 6f 6e 2d 6e 61 6d 65 7d 20 7b 6f 72 20 6e 69  ion-name} {or ni
0870: 6c 20 41 53 43 20 44 45 53 43 7d 20 0a 20 20 7d  l ASC DESC} .  }
0880: 0a 20 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d  .  create-table-
0890: 73 74 6d 74 20 7b 0a 20 20 20 20 73 74 61 63 6b  stmt {.    stack
08a0: 0a 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 43 52  .       {line CR
08b0: 45 41 54 45 20 7b 6f 72 20 7b 7d 20 54 45 4d 50  EATE {or {} TEMP
08c0: 20 54 45 4d 50 4f 52 41 52 59 7d 20 54 41 42 4c   TEMPORARY} TABL
08d0: 45 20 7b 6f 70 74 20 49 46 20 4e 4f 54 20 45 58  E {opt IF NOT EX
08e0: 49 53 54 53 7d 7d 0a 20 20 20 20 20 20 20 7b 6c  ISTS}}.       {l
08f0: 69 6e 65 20 7b 6f 70 74 78 20 2f 73 63 68 65 6d  ine {optx /schem
0900: 61 2d 6e 61 6d 65 20 2e 7d 20 2f 74 61 62 6c 65  a-name .} /table
0910: 2d 6e 61 6d 65 7d 0a 20 20 20 20 20 20 20 7b 6f  -name}.       {o
0920: 72 20 7b 6c 69 6e 65 20 28 20 7b 6c 6f 6f 70 20  r {line ( {loop 
0930: 63 6f 6c 75 6d 6e 2d 64 65 66 20 2c 7d 20 7b 6c  column-def ,} {l
0940: 6f 6f 70 20 7b 7d 20 7b 2c 20 74 61 62 6c 65 2d  oop {} {, table-
0950: 63 6f 6e 73 74 72 61 69 6e 74 7d 7d 20 29 0a 20  constraint}} ). 
0960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0970: 20 7b 6f 70 74 20 57 49 54 48 4f 55 54 20 52 4f   {opt WITHOUT RO
0980: 57 49 44 7d 7d 0a 20 20 20 20 20 20 20 20 20 20  WID}}.          
0990: 20 7b 6c 69 6e 65 20 41 53 20 73 65 6c 65 63 74   {line AS select
09a0: 2d 73 74 6d 74 7d 0a 20 20 20 20 20 20 20 7d 0a  -stmt}.       }.
09b0: 20 20 7d 0a 20 20 63 6f 6c 75 6d 6e 2d 64 65 66    }.  column-def
09c0: 20 7b 0a 20 20 20 20 6c 69 6e 65 20 2f 63 6f 6c   {.    line /col
09d0: 75 6d 6e 2d 6e 61 6d 65 20 7b 6f 72 20 74 79 70  umn-name {or typ
09e0: 65 2d 6e 61 6d 65 20 6e 69 6c 7d 20 7b 6c 6f 6f  e-name nil} {loo
09f0: 70 20 6e 69 6c 20 7b 6e 69 6c 20 63 6f 6c 75 6d  p nil {nil colum
0a00: 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 20 6e 69 6c  n-constraint nil
0a10: 7d 7d 0a 20 20 7d 0a 20 20 74 79 70 65 2d 6e 61  }}.  }.  type-na
0a20: 6d 65 20 7b 0a 20 20 20 20 20 6c 69 6e 65 20 7b  me {.     line {
0a30: 6c 6f 6f 70 20 2f 6e 61 6d 65 20 7b 7d 7d 20 7b  loop /name {}} {
0a40: 6f 72 20 7b 7d 0a 20 20 20 20 20 20 20 20 7b 6c  or {}.        {l
0a50: 69 6e 65 20 28 20 73 69 67 6e 65 64 2d 6e 75 6d  ine ( signed-num
0a60: 62 65 72 20 29 7d 0a 20 20 20 20 20 20 20 20 7b  ber )}.        {
0a70: 6c 69 6e 65 20 28 20 73 69 67 6e 65 64 2d 6e 75  line ( signed-nu
0a80: 6d 62 65 72 20 2c 20 73 69 67 6e 65 64 2d 6e 75  mber , signed-nu
0a90: 6d 62 65 72 20 29 7d 0a 20 20 20 20 20 7d 0a 20  mber )}.     }. 
0aa0: 20 7d 0a 20 20 63 6f 6c 75 6d 6e 2d 63 6f 6e 73   }.  column-cons
0ab0: 74 72 61 69 6e 74 20 7b 0a 20 20 20 20 73 74 61  traint {.    sta
0ac0: 63 6b 0a 20 20 20 20 20 20 7b 6f 70 74 78 20 43  ck.      {optx C
0ad0: 4f 4e 53 54 52 41 49 4e 54 20 2f 6e 61 6d 65 7d  ONSTRAINT /name}
0ae0: 0a 20 20 20 20 20 20 7b 6f 72 0a 20 20 20 20 20  .      {or.     
0af0: 20 20 20 20 7b 6c 69 6e 65 20 50 52 49 4d 41 52      {line PRIMAR
0b00: 59 20 4b 45 59 20 7b 6f 72 20 6e 69 6c 20 41 53  Y KEY {or nil AS
0b10: 43 20 44 45 53 43 7d 20 0a 20 20 20 20 20 20 20  C DESC} .       
0b20: 20 20 20 20 20 20 20 20 63 6f 6e 66 6c 69 63 74          conflict
0b30: 2d 63 6c 61 75 73 65 20 7b 6f 70 74 20 41 55 54  -clause {opt AUT
0b40: 4f 49 4e 43 52 45 4d 45 4e 54 7d 0a 20 20 20 20  OINCREMENT}.    
0b50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
0b60: 7b 6c 69 6e 65 20 4e 4f 54 20 4e 55 4c 4c 20 63  {line NOT NULL c
0b70: 6f 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 7d 0a  onflict-clause}.
0b80: 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 55           {line U
0b90: 4e 49 51 55 45 20 63 6f 6e 66 6c 69 63 74 2d 63  NIQUE conflict-c
0ba0: 6c 61 75 73 65 7d 0a 20 20 20 20 20 20 20 20 20  lause}.         
0bb0: 7b 6c 69 6e 65 20 43 48 45 43 4b 20 28 20 65 78  {line CHECK ( ex
0bc0: 70 72 20 29 7d 0a 20 20 20 20 20 20 20 20 20 7b  pr )}.         {
0bd0: 6c 69 6e 65 20 44 45 46 41 55 4c 54 20 0a 20 20  line DEFAULT .  
0be0: 20 20 20 20 20 20 20 20 20 20 7b 6f 72 0a 20 20            {or.  
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 69                si
0c00: 67 6e 65 64 2d 6e 75 6d 62 65 72 0a 20 20 20 20  gned-number.    
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 74 65              lite
0c20: 72 61 6c 2d 76 61 6c 75 65 0a 20 20 20 20 20 20  ral-value.      
0c30: 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20            {line 
0c40: 28 20 65 78 70 72 20 29 7d 0a 20 20 20 20 20 20  ( expr )}.      
0c50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0c60: 20 7d 0a 20 20 20 20 20 20 20 20 20 7b 6c 69 6e   }.         {lin
0c70: 65 20 43 4f 4c 4c 41 54 45 20 2f 63 6f 6c 6c 61  e COLLATE /colla
0c80: 74 69 6f 6e 2d 6e 61 6d 65 7d 0a 20 20 20 20 20  tion-name}.     
0c90: 20 20 20 20 7b 6c 69 6e 65 20 66 6f 72 65 69 67      {line foreig
0ca0: 6e 2d 6b 65 79 2d 63 6c 61 75 73 65 7d 0a 20 20  n-key-clause}.  
0cb0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 73 69 67 6e      }.  }.  sign
0cc0: 65 64 2d 6e 75 6d 62 65 72 20 7b 0a 20 20 20 20  ed-number {.    
0cd0: 20 6c 69 6e 65 20 7b 6f 72 20 6e 69 6c 20 2b 20   line {or nil + 
0ce0: 2d 7d 20 2f 6e 75 6d 65 72 69 63 2d 6c 69 74 65  -} /numeric-lite
0cf0: 72 61 6c 0a 20 20 7d 0a 20 20 74 61 62 6c 65 2d  ral.  }.  table-
0d00: 63 6f 6e 73 74 72 61 69 6e 74 20 7b 0a 20 20 20  constraint {.   
0d10: 20 20 73 74 61 63 6b 0a 20 20 20 20 20 20 20 7b    stack.       {
0d20: 6f 70 74 78 20 43 4f 4e 53 54 52 41 49 4e 54 20  optx CONSTRAINT 
0d30: 2f 6e 61 6d 65 7d 0a 20 20 20 20 20 20 20 7b 6f  /name}.       {o
0d40: 72 0a 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e  r.          {lin
0d50: 65 20 7b 6f 72 20 7b 6c 69 6e 65 20 50 52 49 4d  e {or {line PRIM
0d60: 41 52 59 20 4b 45 59 7d 20 55 4e 49 51 55 45 7d  ARY KEY} UNIQUE}
0d70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0d80: 20 28 20 7b 6c 6f 6f 70 20 69 6e 64 65 78 65 64   ( {loop indexed
0d90: 2d 63 6f 6c 75 6d 6e 20 2c 7d 20 29 20 63 6f 6e  -column ,} ) con
0da0: 66 6c 69 63 74 2d 63 6c 61 75 73 65 7d 0a 20 20  flict-clause}.  
0db0: 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 43 48          {line CH
0dc0: 45 43 4b 20 28 20 65 78 70 72 20 29 7d 0a 20 20  ECK ( expr )}.  
0dd0: 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 46 4f          {line FO
0de0: 52 45 49 47 4e 20 4b 45 59 20 28 20 7b 6c 6f 6f  REIGN KEY ( {loo
0df0: 70 20 2f 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 2c  p /column-name ,
0e00: 7d 20 29 20 66 6f 72 65 69 67 6e 2d 6b 65 79 2d  } ) foreign-key-
0e10: 63 6c 61 75 73 65 20 7d 0a 20 20 20 20 20 20 20  clause }.       
0e20: 7d 0a 20 20 7d 0a 20 20 66 6f 72 65 69 67 6e 2d  }.  }.  foreign-
0e30: 6b 65 79 2d 63 6c 61 75 73 65 20 7b 0a 20 20 20  key-clause {.   
0e40: 20 20 20 73 74 61 63 6b 20 0a 20 20 20 20 20 20     stack .      
0e50: 20 20 7b 6c 69 6e 65 20 52 45 46 45 52 45 4e 43    {line REFERENC
0e60: 45 53 20 2f 66 6f 72 65 69 67 6e 2d 74 61 62 6c  ES /foreign-tabl
0e70: 65 20 7b 6f 70 74 78 20 28 20 7b 6c 6f 6f 70 20  e {optx ( {loop 
0e80: 2f 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 2c 7d 20  /column-name ,} 
0e90: 29 7d 7d 0a 20 20 20 20 20 20 20 20 7b 6f 70 74  )}}.        {opt
0ea0: 78 20 0a 20 20 20 20 20 20 20 20 20 20 7b 6c 6f  x .          {lo
0eb0: 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
0ec0: 7b 6f 72 20 0a 20 20 20 20 20 20 20 20 20 20 20  {or .           
0ed0: 20 20 20 20 20 7b 6c 69 6e 65 20 4f 4e 20 7b 6f       {line ON {o
0ee0: 72 20 44 45 4c 45 54 45 20 55 50 44 41 54 45 7d  r DELETE UPDATE}
0ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0f00: 20 20 20 20 20 20 20 20 20 20 7b 6f 72 20 7b 6c            {or {l
0f10: 69 6e 65 20 53 45 54 20 4e 55 4c 4c 7d 20 7b 6c  ine SET NULL} {l
0f20: 69 6e 65 20 53 45 54 20 44 45 46 41 55 4c 54 7d  ine SET DEFAULT}
0f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 41                CA
0f50: 53 43 41 44 45 20 52 45 53 54 52 49 43 54 20 7b  SCADE RESTRICT {
0f60: 6c 69 6e 65 20 4e 4f 20 41 43 54 49 4f 4e 7d 0a  line NO ACTION}.
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f80: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
0f90: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69               {li
0fb0: 6e 65 20 4d 41 54 43 48 20 2f 6e 61 6d 65 7d 0a  ne MATCH /name}.
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
0fe0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
0ff0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7b 6f 70     }.        {op
1000: 74 78 0a 20 20 20 20 20 20 20 20 20 20 7b 6c 69  tx.          {li
1010: 6e 65 20 7b 6f 70 74 78 20 4e 4f 54 7d 20 44 45  ne {optx NOT} DE
1020: 46 45 52 52 41 42 4c 45 20 0a 20 20 20 20 20 20  FERRABLE .      
1030: 20 20 20 20 20 20 20 7b 6f 72 20 0a 20 20 20 20         {or .    
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 44 45 46 45  e INITIALLY DEFE
1060: 52 52 45 44 7d 0a 20 20 20 20 20 20 20 20 20 20  RRED}.          
1070: 20 20 20 20 20 20 7b 6c 69 6e 65 20 49 4e 49 54        {line INIT
1080: 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 7d  IALLY IMMEDIATE}
1090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10a0: 20 7b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {}.            
10b0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20   }.          }. 
10c0: 20 20 20 20 20 20 20 20 20 6e 69 6c 0a 20 20 20           nil.   
10d0: 20 20 20 20 20 7d 0a 20 20 7d 0a 20 20 63 6f 6e       }.  }.  con
10e0: 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 7b 0a 20  flict-clause {. 
10f0: 20 20 20 6f 70 74 20 7b 6c 69 6e 65 20 4f 4e 20     opt {line ON 
1100: 43 4f 4e 46 4c 49 43 54 20 7b 6f 72 20 52 4f 4c  CONFLICT {or ROL
1110: 4c 42 41 43 4b 20 41 42 4f 52 54 20 46 41 49 4c  LBACK ABORT FAIL
1120: 20 49 47 4e 4f 52 45 20 52 45 50 4c 41 43 45 7d   IGNORE REPLACE}
1130: 7d 0a 20 20 7d 0a 20 20 63 72 65 61 74 65 2d 74  }.  }.  create-t
1140: 72 69 67 67 65 72 2d 73 74 6d 74 20 7b 0a 20 20  rigger-stmt {.  
1150: 20 20 73 74 61 63 6b 0a 20 20 20 20 20 20 20 7b    stack.       {
1160: 6c 69 6e 65 20 43 52 45 41 54 45 20 7b 6f 72 20  line CREATE {or 
1170: 7b 7d 20 54 45 4d 50 20 54 45 4d 50 4f 52 41 52  {} TEMP TEMPORAR
1180: 59 7d 20 54 52 49 47 47 45 52 20 7b 6f 70 74 20  Y} TRIGGER {opt 
1190: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 7d 7d 0a  IF NOT EXISTS}}.
11a0: 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 7b 6f 70         {line {op
11b0: 74 78 20 2f 73 63 68 65 6d 61 2d 6e 61 6d 65 20  tx /schema-name 
11c0: 2e 7d 20 2f 74 72 69 67 67 65 72 2d 6e 61 6d 65  .} /trigger-name
11d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f  .             {o
11e0: 72 20 42 45 46 4f 52 45 20 41 46 54 45 52 20 7b  r BEFORE AFTER {
11f0: 6c 69 6e 65 20 49 4e 53 54 45 41 44 20 4f 46 7d  line INSTEAD OF}
1200: 20 6e 69 6c 7d 0a 20 20 20 20 20 20 20 7d 0a 20   nil}.       }. 
1210: 20 20 20 20 20 20 7b 6c 69 6e 65 0a 20 20 20 20        {line.    
1220: 20 20 20 20 20 20 20 20 20 7b 6f 72 20 44 45 4c           {or DEL
1230: 45 54 45 20 49 4e 53 45 52 54 20 0a 20 20 20 20  ETE INSERT .    
1240: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69               {li
1250: 6e 65 20 55 50 44 41 54 45 20 7b 6f 70 74 20 4f  ne UPDATE {opt O
1260: 46 20 7b 6c 6f 6f 70 20 2f 63 6f 6c 75 6d 6e 2d  F {loop /column-
1270: 6e 61 6d 65 20 2c 7d 20 7d 7d 0a 20 20 20 20 20  name ,} }}.     
1280: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1290: 20 20 20 20 20 20 20 4f 4e 20 2f 74 61 62 6c 65         ON /table
12a0: 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 7d 0a 20  -name.       }. 
12b0: 20 20 20 20 20 20 7b 6c 69 6e 65 20 7b 6f 70 74        {line {opt
12c0: 78 20 46 4f 52 20 45 41 43 48 20 52 4f 57 7d 0a  x FOR EACH ROW}.
12d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 70               {op
12e0: 74 78 20 57 48 45 4e 20 65 78 70 72 7d 0a 20 20  tx WHEN expr}.  
12f0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 7b 6c       }.       {l
1300: 69 6e 65 20 42 45 47 49 4e 0a 20 20 20 20 20 20  ine BEGIN.      
1310: 20 20 20 20 20 20 20 7b 6c 6f 6f 70 20 0a 20 20         {loop .  
1320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c                {l
1330: 69 6e 65 20 7b 6f 72 20 75 70 64 61 74 65 2d 73  ine {or update-s
1340: 74 6d 74 20 69 6e 73 65 72 74 2d 73 74 6d 74 20  tmt insert-stmt 
1350: 64 65 6c 65 74 65 2d 73 74 6d 74 20 73 65 6c 65  delete-stmt sele
1360: 63 74 2d 73 74 6d 74 7d 20 3b 7d 20 0a 20 20 20  ct-stmt} ;} .   
1370: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 69 6c               nil
1380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  .             }.
1390: 20 20 20 20 20 20 20 20 20 20 20 20 20 45 4e 44               END
13a0: 0a 20 20 20 20 20 20 20 7d 0a 20 20 7d 0a 20 20  .       }.  }.  
13b0: 63 72 65 61 74 65 2d 76 69 65 77 2d 73 74 6d 74  create-view-stmt
13c0: 20 7b 0a 20 20 20 20 73 74 61 63 6b 0a 20 20 20   {.    stack.   
13d0: 20 20 20 20 7b 6c 69 6e 65 20 43 52 45 41 54 45      {line CREATE
13e0: 20 7b 6f 72 20 7b 7d 20 54 45 4d 50 20 54 45 4d   {or {} TEMP TEM
13f0: 50 4f 52 41 52 59 7d 20 56 49 45 57 20 7b 6f 70  PORARY} VIEW {op
1400: 74 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 7d  t IF NOT EXISTS}
1410: 7d 0a 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 7b  }.       {line {
1420: 6f 70 74 20 2f 73 63 68 65 6d 61 2d 6e 61 6d 65  opt /schema-name
1430: 20 2e 7d 20 2f 76 69 65 77 2d 6e 61 6d 65 20 7b   .} /view-name {
1440: 6f 70 74 20 28 20 7b 6c 6f 6f 70 20 2f 63 6f 6c  opt ( {loop /col
1450: 75 6d 6e 2d 6e 61 6d 65 20 2c 7d 20 29 7d 0a 20  umn-name ,} )}. 
1460: 20 20 20 20 20 20 20 20 20 20 20 20 41 53 20 73              AS s
1470: 65 6c 65 63 74 2d 73 74 6d 74 7d 0a 20 20 7d 0a  elect-stmt}.  }.
1480: 20 20 63 72 65 61 74 65 2d 76 69 72 74 75 61 6c    create-virtual
1490: 2d 74 61 62 6c 65 2d 73 74 6d 74 20 7b 0a 20 20  -table-stmt {.  
14a0: 20 20 73 74 61 63 6b 0a 20 20 20 20 20 20 20 7b    stack.       {
14b0: 6c 69 6e 65 20 43 52 45 41 54 45 20 56 49 52 54  line CREATE VIRT
14c0: 55 41 4c 20 54 41 42 4c 45 20 7b 6f 70 74 20 49  UAL TABLE {opt I
14d0: 46 20 4e 4f 54 20 45 58 49 53 54 53 7d 7d 0a 20  F NOT EXISTS}}. 
14e0: 20 20 20 20 20 20 7b 6c 69 6e 65 20 7b 6f 70 74        {line {opt
14f0: 78 20 2f 73 63 68 65 6d 61 2d 6e 61 6d 65 20 2e  x /schema-name .
1500: 7d 20 2f 74 61 62 6c 65 2d 6e 61 6d 65 7d 0a 20  } /table-name}. 
1510: 20 20 20 20 20 20 7b 6c 69 6e 65 20 55 53 49 4e        {line USIN
1520: 47 20 2f 6d 6f 64 75 6c 65 2d 6e 61 6d 65 20 7b  G /module-name {
1530: 6f 70 74 78 20 28 20 7b 6c 6f 6f 70 20 2f 6d 6f  optx ( {loop /mo
1540: 64 75 6c 65 2d 61 72 67 75 6d 65 6e 74 20 2c 7d  dule-argument ,}
1550: 20 29 7d 7d 0a 20 20 7d 0a 20 20 77 69 74 68 2d   )}}.  }.  with-
1560: 63 6c 61 75 73 65 20 7b 0a 20 20 20 20 6c 69 6e  clause {.    lin
1570: 65 0a 20 20 20 20 20 20 57 49 54 48 20 7b 6f 70  e.      WITH {op
1580: 74 20 52 45 43 55 52 53 49 56 45 7d 20 7b 6c 6f  t RECURSIVE} {lo
1590: 6f 70 20 7b 6c 69 6e 65 20 63 74 65 2d 74 61 62  op {line cte-tab
15a0: 6c 65 2d 6e 61 6d 65 20 41 53 20 28 20 73 65 6c  le-name AS ( sel
15b0: 65 63 74 2d 73 74 6d 74 20 29 7d 20 2c 7d 0a 20  ect-stmt )} ,}. 
15c0: 20 7d 0a 20 20 63 74 65 2d 74 61 62 6c 65 2d 6e   }.  cte-table-n
15d0: 61 6d 65 20 7b 0a 20 20 20 20 6c 69 6e 65 20 2f  ame {.    line /
15e0: 74 61 62 6c 65 2d 6e 61 6d 65 20 7b 6f 70 74 78  table-name {optx
15f0: 20 28 20 7b 6c 6f 6f 70 20 2f 63 6f 6c 75 6d 6e   ( {loop /column
1600: 2d 6e 61 6d 65 20 2c 7d 20 29 7d 0a 20 20 7d 0a  -name ,} )}.  }.
1610: 20 20 72 65 63 75 72 73 69 76 65 2d 63 74 65 20    recursive-cte 
1620: 7b 0a 20 20 20 20 6c 69 6e 65 20 63 74 65 2d 74  {.    line cte-t
1630: 61 62 6c 65 2d 6e 61 6d 65 20 41 53 20 0a 20 20  able-name AS .  
1640: 20 20 20 20 20 28 20 2f 69 6e 69 74 69 61 6c 2d       ( /initial-
1650: 73 65 6c 65 63 74 20 7b 6f 72 20 55 4e 49 4f 4e  select {or UNION
1660: 20 7b 6c 69 6e 65 20 55 4e 49 4f 4e 20 41 4c 4c   {line UNION ALL
1670: 7d 7d 20 2f 72 65 63 75 72 73 69 76 65 2d 73 65  }} /recursive-se
1680: 6c 65 63 74 20 29 0a 20 20 7d 0a 20 20 63 6f 6d  lect ).  }.  com
1690: 6d 6f 6e 2d 74 61 62 6c 65 2d 65 78 70 72 65 73  mon-table-expres
16a0: 73 69 6f 6e 20 7b 0a 20 20 20 20 6c 69 6e 65 20  sion {.    line 
16b0: 20 2f 74 61 62 6c 65 2d 6e 61 6d 65 20 7b 6f 70   /table-name {op
16c0: 74 78 20 28 20 7b 6c 6f 6f 70 20 2f 63 6f 6c 75  tx ( {loop /colu
16d0: 6d 6e 2d 6e 61 6d 65 20 2c 7d 20 29 7d 20 41 53  mn-name ,} )} AS
16e0: 20 28 20 73 65 6c 65 63 74 2d 73 74 6d 74 20 29   ( select-stmt )
16f0: 0a 20 20 7d 0a 20 20 64 65 6c 65 74 65 2d 73 74  .  }.  delete-st
1700: 6d 74 20 7b 0a 20 20 20 20 73 74 61 63 6b 0a 20  mt {.    stack. 
1710: 20 20 20 20 20 7b 6c 69 6e 65 20 7b 6f 70 74 20       {line {opt 
1720: 77 69 74 68 2d 63 6c 61 75 73 65 7d 20 44 45 4c  with-clause} DEL
1730: 45 54 45 20 46 52 4f 4d 20 71 75 61 6c 69 66 69  ETE FROM qualifi
1740: 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 7d 0a 20  ed-table-name}. 
1750: 20 20 20 20 20 7b 6f 70 74 78 20 57 48 45 52 45       {optx WHERE
1760: 20 65 78 70 72 7d 0a 20 20 7d 0a 20 20 64 65 6c   expr}.  }.  del
1770: 65 74 65 2d 73 74 6d 74 2d 6c 69 6d 69 74 65 64  ete-stmt-limited
1780: 20 7b 0a 20 20 20 20 73 74 61 63 6b 0a 20 20 20   {.    stack.   
1790: 20 20 20 20 20 7b 6c 69 6e 65 20 7b 6f 70 74 20       {line {opt 
17a0: 77 69 74 68 2d 63 6c 61 75 73 65 7d 20 44 45 4c  with-clause} DEL
17b0: 45 54 45 20 46 52 4f 4d 20 71 75 61 6c 69 66 69  ETE FROM qualifi
17c0: 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 7d 0a 20  ed-table-name}. 
17d0: 20 20 20 20 20 20 20 7b 6f 70 74 78 20 57 48 45         {optx WHE
17e0: 52 45 20 65 78 70 72 7d 0a 20 20 20 20 20 20 20  RE expr}.       
17f0: 20 7b 6f 70 74 78 0a 20 20 20 20 20 20 20 20 20   {optx.         
1800: 20 20 20 7b 73 74 61 63 6b 0a 20 20 20 20 20 20     {stack.      
1810: 20 20 20 20 20 20 20 20 7b 6f 70 74 78 20 4f 52          {optx OR
1820: 44 45 52 20 42 59 20 7b 6c 6f 6f 70 20 6f 72 64  DER BY {loop ord
1830: 65 72 69 6e 67 2d 74 65 72 6d 20 2c 7d 7d 0a 20  ering-term ,}}. 
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69               {li
1850: 6e 65 20 4c 49 4d 49 54 20 65 78 70 72 20 7b 6f  ne LIMIT expr {o
1860: 70 74 78 20 7b 6f 72 20 4f 46 46 53 45 54 20 2c  ptx {or OFFSET ,
1870: 7d 20 65 78 70 72 7d 7d 0a 20 20 20 20 20 20 20  } expr}}.       
1880: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
1890: 0a 20 20 7d 0a 20 20 64 65 74 61 63 68 2d 73 74  .  }.  detach-st
18a0: 6d 74 20 7b 0a 20 20 20 20 6c 69 6e 65 20 44 45  mt {.    line DE
18b0: 54 41 43 48 20 7b 6f 70 74 78 20 44 41 54 41 42  TACH {optx DATAB
18c0: 41 53 45 7d 20 2f 73 63 68 65 6d 61 2d 6e 61 6d  ASE} /schema-nam
18d0: 65 0a 20 20 7d 0a 20 20 64 72 6f 70 2d 69 6e 64  e.  }.  drop-ind
18e0: 65 78 2d 73 74 6d 74 20 7b 0a 20 20 20 20 6c 69  ex-stmt {.    li
18f0: 6e 65 20 44 52 4f 50 20 49 4e 44 45 58 20 7b 6f  ne DROP INDEX {o
1900: 70 74 78 20 49 46 20 45 58 49 53 54 53 7d 20 7b  ptx IF EXISTS} {
1910: 6f 70 74 78 20 2f 73 63 68 65 6d 61 2d 6e 61 6d  optx /schema-nam
1920: 65 20 2e 7d 20 2f 69 6e 64 65 78 2d 6e 61 6d 65  e .} /index-name
1930: 0a 20 20 7d 0a 20 20 64 72 6f 70 2d 74 61 62 6c  .  }.  drop-tabl
1940: 65 2d 73 74 6d 74 20 7b 0a 20 20 20 20 6c 69 6e  e-stmt {.    lin
1950: 65 20 44 52 4f 50 20 54 41 42 4c 45 20 7b 6f 70  e DROP TABLE {op
1960: 74 78 20 49 46 20 45 58 49 53 54 53 7d 20 7b 6f  tx IF EXISTS} {o
1970: 70 74 78 20 2f 73 63 68 65 6d 61 2d 6e 61 6d 65  ptx /schema-name
1980: 20 2e 7d 20 2f 74 61 62 6c 65 2d 6e 61 6d 65 0a   .} /table-name.
1990: 20 20 7d 0a 20 20 64 72 6f 70 2d 74 72 69 67 67    }.  drop-trigg
19a0: 65 72 2d 73 74 6d 74 20 7b 0a 20 20 20 20 6c 69  er-stmt {.    li
19b0: 6e 65 20 44 52 4f 50 20 54 52 49 47 47 45 52 20  ne DROP TRIGGER 
19c0: 7b 6f 70 74 78 20 49 46 20 45 58 49 53 54 53 7d  {optx IF EXISTS}
19d0: 20 7b 6f 70 74 78 20 2f 73 63 68 65 6d 61 2d 6e   {optx /schema-n
19e0: 61 6d 65 20 2e 7d 20 2f 74 72 69 67 67 65 72 2d  ame .} /trigger-
19f0: 6e 61 6d 65 0a 20 20 7d 0a 20 20 64 72 6f 70 2d  name.  }.  drop-
1a00: 76 69 65 77 2d 73 74 6d 74 20 7b 0a 20 20 20 20  view-stmt {.    
1a10: 6c 69 6e 65 20 44 52 4f 50 20 56 49 45 57 20 7b  line DROP VIEW {
1a20: 6f 70 74 78 20 49 46 20 45 58 49 53 54 53 7d 20  optx IF EXISTS} 
1a30: 7b 6f 70 74 78 20 2f 73 63 68 65 6d 61 2d 6e 61  {optx /schema-na
1a40: 6d 65 20 2e 7d 20 2f 76 69 65 77 2d 6e 61 6d 65  me .} /view-name
1a50: 0a 20 20 7d 0a 20 20 65 78 70 72 20 7b 0a 20 20  .  }.  expr {.  
1a60: 20 20 6f 72 0a 20 20 20 20 20 7b 6c 69 6e 65 20    or.     {line 
1a70: 6c 69 74 65 72 61 6c 2d 76 61 6c 75 65 7d 0a 20  literal-value}. 
1a80: 20 20 20 20 7b 6c 69 6e 65 20 62 69 6e 64 2d 70      {line bind-p
1a90: 61 72 61 6d 65 74 65 72 7d 0a 20 20 20 20 20 7b  arameter}.     {
1aa0: 6c 69 6e 65 20 7b 6f 70 74 78 20 7b 6f 70 74 78  line {optx {optx
1ab0: 20 2f 73 63 68 65 6d 61 2d 6e 61 6d 65 20 2e 7d   /schema-name .}
1ac0: 20 2f 74 61 62 6c 65 2d 6e 61 6d 65 20 2e 7d 20   /table-name .} 
1ad0: 2f 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 7d 0a 20 20  /column-name}.  
1ae0: 20 20 20 7b 6c 69 6e 65 20 2f 75 6e 61 72 79 2d     {line /unary-
1af0: 6f 70 65 72 61 74 6f 72 20 65 78 70 72 7d 0a 20  operator expr}. 
1b00: 20 20 20 20 7b 6c 69 6e 65 20 65 78 70 72 20 2f      {line expr /
1b10: 62 69 6e 61 72 79 2d 6f 70 65 72 61 74 6f 72 20  binary-operator 
1b20: 65 78 70 72 7d 0a 20 20 20 20 20 7b 6c 69 6e 65  expr}.     {line
1b30: 20 2f 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 20   /function-name 
1b40: 28 20 7b 6f 72 20 7b 6c 69 6e 65 20 7b 6f 70 74  ( {or {line {opt
1b50: 78 20 44 49 53 54 49 4e 43 54 7d 20 7b 74 6f 70  x DISTINCT} {top
1b60: 6c 6f 6f 70 20 65 78 70 72 20 2c 7d 7d 20 7b 7d  loop expr ,}} {}
1b70: 20 2a 7d 20 29 7d 0a 20 20 20 20 20 7b 6c 69 6e   *} )}.     {lin
1b80: 65 20 28 20 7b 74 6f 70 6c 6f 6f 70 20 65 78 70  e ( {toploop exp
1b90: 72 20 2c 7d 20 29 7d 0a 20 20 20 20 20 7b 6c 69  r ,} )}.     {li
1ba0: 6e 65 20 43 41 53 54 20 28 20 65 78 70 72 20 41  ne CAST ( expr A
1bb0: 53 20 74 79 70 65 2d 6e 61 6d 65 20 29 7d 0a 20  S type-name )}. 
1bc0: 20 20 20 20 7b 6c 69 6e 65 20 65 78 70 72 20 43      {line expr C
1bd0: 4f 4c 4c 41 54 45 20 2f 63 6f 6c 6c 61 74 69 6f  OLLATE /collatio
1be0: 6e 2d 6e 61 6d 65 7d 0a 20 20 20 20 20 7b 6c 69  n-name}.     {li
1bf0: 6e 65 20 65 78 70 72 20 7b 6f 70 74 78 20 4e 4f  ne expr {optx NO
1c00: 54 7d 20 7b 6f 72 20 4c 49 4b 45 20 47 4c 4f 42  T} {or LIKE GLOB
1c10: 20 52 45 47 45 58 50 20 4d 41 54 43 48 7d 20 65   REGEXP MATCH} e
1c20: 78 70 72 0a 20 20 20 20 20 20 20 20 20 20 20 7b  xpr.           {
1c30: 6f 70 74 20 45 53 43 41 50 45 20 65 78 70 72 7d  opt ESCAPE expr}
1c40: 7d 0a 20 20 20 20 20 7b 6c 69 6e 65 20 65 78 70  }.     {line exp
1c50: 72 20 7b 6f 72 20 49 53 4e 55 4c 4c 20 4e 4f 54  r {or ISNULL NOT
1c60: 4e 55 4c 4c 20 7b 6c 69 6e 65 20 4e 4f 54 20 4e  NULL {line NOT N
1c70: 55 4c 4c 7d 7d 7d 0a 20 20 20 20 20 7b 6c 69 6e  ULL}}}.     {lin
1c80: 65 20 65 78 70 72 20 49 53 20 7b 6f 70 74 78 20  e expr IS {optx 
1c90: 4e 4f 54 7d 20 65 78 70 72 7d 0a 20 20 20 20 20  NOT} expr}.     
1ca0: 7b 6c 69 6e 65 20 65 78 70 72 20 7b 6f 70 74 78  {line expr {optx
1cb0: 20 4e 4f 54 7d 20 42 45 54 57 45 45 4e 20 65 78   NOT} BETWEEN ex
1cc0: 70 72 20 41 4e 44 20 65 78 70 72 7d 0a 20 20 20  pr AND expr}.   
1cd0: 20 20 7b 6c 69 6e 65 20 65 78 70 72 20 7b 6f 70    {line expr {op
1ce0: 74 78 20 4e 4f 54 7d 20 49 4e 20 0a 20 20 20 20  tx NOT} IN .    
1cf0: 20 20 20 20 20 20 20 20 7b 6f 72 0a 20 20 20 20          {or.    
1d00: 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65             {line
1d10: 20 28 20 7b 6f 72 20 7b 7d 20 73 65 6c 65 63 74   ( {or {} select
1d20: 2d 73 74 6d 74 20 7b 6c 6f 6f 70 20 65 78 70 72  -stmt {loop expr
1d30: 20 2c 7d 7d 20 29 7d 0a 20 20 20 20 20 20 20 20   ,}} )}.        
1d40: 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 7b 6f 70         {line {op
1d50: 74 78 20 2f 73 63 68 65 6d 61 2d 6e 61 6d 65 20  tx /schema-name 
1d60: 2e 7d 20 2f 74 61 62 6c 65 2d 6e 61 6d 65 7d 0a  .} /table-name}.
1d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1d80: 6c 69 6e 65 20 7b 6f 70 74 78 20 2f 73 63 68 65  line {optx /sche
1d90: 6d 61 2d 6e 61 6d 65 20 2e 7d 20 2f 74 61 62 6c  ma-name .} /tabl
1da0: 65 2d 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20  e-function.     
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 20 20 20 20 28 20 7b 6f 72 20 7b 74 6f 70 6c 6f      ( {or {toplo
1dd0: 6f 70 20 65 78 70 72 20 2c 7d 20 7b 7d 7d 20 29  op expr ,} {}} )
1de0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
1df0: 0a 20 20 20 20 20 7d 0a 20 20 20 20 20 7b 6c 69  .     }.     {li
1e00: 6e 65 20 7b 6f 70 74 78 20 7b 6f 70 74 78 20 4e  ne {optx {optx N
1e10: 4f 54 7d 20 45 58 49 53 54 53 7d 20 28 20 73 65  OT} EXISTS} ( se
1e20: 6c 65 63 74 2d 73 74 6d 74 20 29 7d 0a 20 20 20  lect-stmt )}.   
1e30: 20 20 7b 6c 69 6e 65 20 43 41 53 45 20 7b 6f 70    {line CASE {op
1e40: 74 78 20 65 78 70 72 7d 20 7b 6c 6f 6f 70 20 7b  tx expr} {loop {
1e50: 6c 69 6e 65 20 57 48 45 4e 20 65 78 70 72 20 54  line WHEN expr T
1e60: 48 45 4e 20 65 78 70 72 7d 20 7b 7d 7d 0a 20 20  HEN expr} {}}.  
1e70: 20 20 20 20 20 20 20 20 20 7b 6f 70 74 78 20 45           {optx E
1e80: 4c 53 45 20 65 78 70 72 7d 20 45 4e 44 7d 0a 20  LSE expr} END}. 
1e90: 20 20 20 20 7b 6c 69 6e 65 20 72 61 69 73 65 2d      {line raise-
1ea0: 66 75 6e 63 74 69 6f 6e 7d 0a 20 20 20 20 20 7b  function}.     {
1eb0: 6c 69 6e 65 20 2f 77 69 6e 64 6f 77 2d 66 75 6e  line /window-fun
1ec0: 63 20 28 20 7b 6f 72 20 7b 6c 69 6e 65 20 7b 74  c ( {or {line {t
1ed0: 6f 70 6c 6f 6f 70 20 65 78 70 72 20 2c 7d 7d 20  oploop expr ,}} 
1ee0: 7b 7d 20 2a 7d 20 29 20 0a 20 20 20 20 20 20 20  {} *} ) .       
1ef0: 20 20 20 20 7b 6f 70 74 20 66 69 6c 74 65 72 7d      {opt filter}
1f00: 20 4f 56 45 52 20 7b 6f 72 20 7b 6c 69 6e 65 20   OVER {or {line 
1f10: 28 20 77 69 6e 64 6f 77 2d 64 65 66 6e 20 29 7d  ( window-defn )}
1f20: 20 2f 77 69 6e 64 6f 77 2d 6e 61 6d 65 7d 7d 0a   /window-name}}.
1f30: 20 20 7d 0a 20 20 72 61 69 73 65 2d 66 75 6e 63    }.  raise-func
1f40: 74 69 6f 6e 20 7b 0a 20 20 20 20 20 6c 69 6e 65  tion {.     line
1f50: 20 52 41 49 53 45 20 28 20 0a 20 20 20 20 20 20   RAISE ( .      
1f60: 20 20 20 20 20 7b 6f 72 20 49 47 4e 4f 52 45 0a       {or IGNORE.
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1f80: 6c 69 6e 65 20 7b 6f 72 20 52 4f 4c 4c 42 41 43  line {or ROLLBAC
1f90: 4b 20 41 42 4f 52 54 20 46 41 49 4c 7d 20 2c 20  K ABORT FAIL} , 
1fa0: 2f 65 72 72 6f 72 2d 6d 65 73 73 61 67 65 20 7d  /error-message }
1fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 7d 20 29 0a  .           } ).
1fc0: 20 20 7d 0a 20 20 6c 69 74 65 72 61 6c 2d 76 61    }.  literal-va
1fd0: 6c 75 65 20 7b 0a 20 20 20 20 6f 72 0a 20 20 20  lue {.    or.   
1fe0: 20 20 7b 6c 69 6e 65 20 2f 6e 75 6d 65 72 69 63    {line /numeric
1ff0: 2d 6c 69 74 65 72 61 6c 7d 0a 20 20 20 20 20 7b  -literal}.     {
2000: 6c 69 6e 65 20 2f 73 74 72 69 6e 67 2d 6c 69 74  line /string-lit
2010: 65 72 61 6c 7d 0a 20 20 20 20 20 7b 6c 69 6e 65  eral}.     {line
2020: 20 2f 62 6c 6f 62 2d 6c 69 74 65 72 61 6c 7d 0a   /blob-literal}.
2030: 20 20 20 20 20 7b 6c 69 6e 65 20 4e 55 4c 4c 7d       {line NULL}
2040: 0a 20 20 20 20 20 7b 6c 69 6e 65 20 54 52 55 45  .     {line TRUE
2050: 7d 0a 20 20 20 20 20 7b 6c 69 6e 65 20 46 41 4c  }.     {line FAL
2060: 53 45 7d 0a 20 20 20 20 20 7b 6c 69 6e 65 20 43  SE}.     {line C
2070: 55 52 52 45 4e 54 5f 54 49 4d 45 7d 0a 20 20 20  URRENT_TIME}.   
2080: 20 20 7b 6c 69 6e 65 20 43 55 52 52 45 4e 54 5f    {line CURRENT_
2090: 44 41 54 45 7d 0a 20 20 20 20 20 7b 6c 69 6e 65  DATE}.     {line
20a0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
20b0: 4d 50 7d 0a 20 20 7d 0a 20 20 6e 75 6d 65 72 69  MP}.  }.  numeri
20c0: 63 2d 6c 69 74 65 72 61 6c 20 7b 0a 20 20 20 20  c-literal {.    
20d0: 6f 72 0a 20 20 20 20 20 7b 6c 69 6e 65 20 7b 6f  or.     {line {o
20e0: 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
20f0: 7b 6c 69 6e 65 20 7b 6c 6f 6f 70 20 2f 64 69 67  {line {loop /dig
2100: 69 74 20 6e 69 6c 7d 20 7b 6f 70 74 20 2f 64 65  it nil} {opt /de
2110: 63 69 6d 61 6c 2d 70 6f 69 6e 74 20 7b 6c 6f 6f  cimal-point {loo
2120: 70 20 6e 69 6c 20 2f 64 69 67 69 74 7d 7d 7d 0a  p nil /digit}}}.
2130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c                {l
2140: 69 6e 65 20 2f 64 65 63 69 6d 61 6c 2d 70 6f 69  ine /decimal-poi
2150: 6e 74 20 7b 6c 6f 6f 70 20 2f 64 69 67 69 74 20  nt {loop /digit 
2160: 6e 69 6c 7d 7d 0a 20 20 20 20 20 20 20 20 20 20  nil}}.          
2170: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 7b 6f   }.           {o
2180: 70 74 20 45 20 7b 6f 72 20 6e 69 6c 20 2b 20 2d  pt E {or nil + -
2190: 7d 20 7b 6c 6f 6f 70 20 2f 64 69 67 69 74 20 6e  } {loop /digit n
21a0: 69 6c 7d 7d 7d 0a 20 20 20 20 20 7b 6c 69 6e 65  il}}}.     {line
21b0: 20 5c 22 30 78 5c 22 20 7b 6c 6f 6f 70 20 2f 68   \"0x\" {loop /h
21c0: 65 78 64 69 67 69 74 20 6e 69 6c 7d 7d 0a 20 20  exdigit nil}}.  
21d0: 7d 0a 20 20 69 6e 73 65 72 74 2d 73 74 6d 74 20  }.  insert-stmt 
21e0: 7b 0a 20 20 20 20 73 74 61 63 6b 0a 20 20 20 20  {.    stack.    
21f0: 20 20 20 7b 6c 69 6e 65 20 7b 6f 70 74 20 77 69     {line {opt wi
2200: 74 68 2d 63 6c 61 75 73 65 7d 0a 20 20 20 20 20  th-clause}.     
2210: 20 20 20 20 20 7b 6f 72 20 0a 20 20 20 20 20 20       {or .      
2220: 20 20 20 20 20 20 20 20 49 4e 53 45 52 54 0a 20          INSERT. 
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 45 50               REP
2240: 4c 41 43 45 0a 20 20 20 20 20 20 20 20 20 20 20  LACE.           
2250: 20 20 20 7b 6c 69 6e 65 20 49 4e 53 45 52 54 20     {line INSERT 
2260: 4f 52 20 52 45 50 4c 41 43 45 7d 0a 20 20 20 20  OR REPLACE}.    
2270: 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20            {line 
2280: 49 4e 53 45 52 54 20 4f 52 20 52 4f 4c 4c 42 41  INSERT OR ROLLBA
2290: 43 4b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  CK}.            
22a0: 20 20 7b 6c 69 6e 65 20 49 4e 53 45 52 54 20 4f    {line INSERT O
22b0: 52 20 41 42 4f 52 54 7d 0a 20 20 20 20 20 20 20  R ABORT}.       
22c0: 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 49 4e 53         {line INS
22d0: 45 52 54 20 4f 52 20 46 41 49 4c 7d 0a 20 20 20  ERT OR FAIL}.   
22e0: 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65             {line
22f0: 20 49 4e 53 45 52 54 20 4f 52 20 49 47 4e 4f 52   INSERT OR IGNOR
2300: 45 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  E}.          }. 
2310: 20 20 20 20 20 20 20 20 20 49 4e 54 4f 0a 20 20           INTO.  
2320: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 7b 6c       }.       {l
2330: 69 6e 65 20 7b 6f 70 74 78 20 2f 73 63 68 65 6d  ine {optx /schem
2340: 61 2d 6e 61 6d 65 20 2e 7d 20 2f 74 61 62 6c 65  a-name .} /table
2350: 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20  -name.          
2360: 20 20 20 7b 6f 70 74 20 41 53 20 2f 61 6c 69 61     {opt AS /alia
2370: 73 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s}.             
2380: 7b 6f 70 74 78 20 28 20 7b 6c 6f 6f 70 20 2f 63  {optx ( {loop /c
2390: 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 2c 7d 20 29 7d  olumn-name ,} )}
23a0: 7d 0a 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 7b  }.       {line {
23b0: 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 7b 6c  or.           {l
23c0: 69 6e 65 20 56 41 4c 55 45 53 20 7b 6c 6f 6f 70  ine VALUES {loop
23d0: 20 7b 6c 69 6e 65 20 28 20 7b 6c 6f 6f 70 20 65   {line ( {loop e
23e0: 78 70 72 20 2c 7d 20 29 7d 20 2c 7d 7d 0a 20 20  xpr ,} )} ,}}.  
23f0: 20 20 20 20 20 20 20 20 20 73 65 6c 65 63 74 2d           select-
2400: 73 74 6d 74 0a 20 20 20 20 20 20 20 20 20 20 20  stmt.           
2410: 7b 6c 69 6e 65 20 44 45 46 41 55 4c 54 20 56 41  {line DEFAULT VA
2420: 4c 55 45 53 7d 0a 20 20 20 20 20 20 20 20 20 7d  LUES}.         }
2430: 20 7b 6f 70 74 20 75 70 73 65 72 74 2d 63 6c 61   {opt upsert-cla
2440: 75 73 65 7d 7d 0a 20 20 7d 0a 20 20 75 70 73 65  use}}.  }.  upse
2450: 72 74 2d 63 6c 61 75 73 65 20 7b 0a 20 20 20 20  rt-clause {.    
2460: 73 74 61 63 6b 0a 20 20 20 20 20 20 7b 6c 69 6e  stack.      {lin
2470: 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 7b 6f  e ON CONFLICT {o
2480: 70 74 20 28 20 7b 6c 6f 6f 70 20 69 6e 64 65 78  pt ( {loop index
2490: 65 64 2d 63 6f 6c 75 6d 6e 20 2c 7d 20 29 20 7b  ed-column ,} ) {
24a0: 6f 70 74 20 57 48 45 52 45 20 65 78 70 72 7d 20  opt WHERE expr} 
24b0: 7d 20 44 4f 20 7d 20 0a 20 20 20 20 20 20 7b 6f  } DO } .      {o
24c0: 72 0a 20 20 20 20 20 20 20 20 20 4e 4f 54 48 49  r.         NOTHI
24d0: 4e 47 0a 20 20 20 20 20 20 20 20 20 7b 6c 69 6e  NG.         {lin
24e0: 65 20 55 50 44 41 54 45 20 53 45 54 20 0a 20 20  e UPDATE SET .  
24f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c 6f 6f              {loo
2500: 70 20 7b 6c 69 6e 65 20 7b 6f 72 20 2f 63 6f 6c  p {line {or /col
2510: 75 6d 6e 2d 6e 61 6d 65 20 63 6f 6c 75 6d 6e 2d  umn-name column-
2520: 6e 61 6d 65 2d 6c 69 73 74 7d 20 3d 20 65 78 70  name-list} = exp
2530: 72 7d 20 2c 7d 0a 20 20 20 20 20 20 20 20 20 20  r} ,}.          
2540: 20 20 20 20 7b 6f 70 74 78 20 57 48 45 52 45 20      {optx WHERE 
2550: 65 78 70 72 7d 7d 0a 20 20 20 20 20 20 7d 0a 20  expr}}.      }. 
2560: 20 7d 0a 20 20 70 72 61 67 6d 61 2d 73 74 6d 74   }.  pragma-stmt
2570: 20 7b 0a 20 20 20 20 20 6c 69 6e 65 20 50 52 41   {.     line PRA
2580: 47 4d 41 20 7b 6f 70 74 78 20 2f 73 63 68 65 6d  GMA {optx /schem
2590: 61 2d 6e 61 6d 65 20 2e 7d 20 2f 70 72 61 67 6d  a-name .} /pragm
25a0: 61 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20  a-name.         
25b0: 20 7b 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20   {or.           
25c0: 20 20 20 6e 69 6c 0a 20 20 20 20 20 20 20 20 20     nil.         
25d0: 20 20 20 20 20 7b 6c 69 6e 65 20 3d 20 70 72 61       {line = pra
25e0: 67 6d 61 2d 76 61 6c 75 65 7d 0a 20 20 20 20 20  gma-value}.     
25f0: 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 28           {line (
2600: 20 70 72 61 67 6d 61 2d 76 61 6c 75 65 20 29 7d   pragma-value )}
2610: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 7d  .          }.  }
2620: 0a 20 20 70 72 61 67 6d 61 2d 76 61 6c 75 65 20  .  pragma-value 
2630: 7b 0a 20 20 20 20 20 6f 72 0a 20 20 20 20 20 20  {.     or.      
2640: 20 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72 0a    signed-number.
2650: 20 20 20 20 20 20 20 20 2f 6e 61 6d 65 0a 20 20          /name.  
2660: 20 20 20 20 20 20 2f 73 74 72 69 6e 67 2d 6c 69        /string-li
2670: 74 65 72 61 6c 0a 20 20 7d 0a 20 20 72 65 69 6e  teral.  }.  rein
2680: 64 65 78 2d 73 74 6d 74 20 7b 0a 20 20 20 20 20  dex-stmt {.     
2690: 6c 69 6e 65 20 52 45 49 4e 44 45 58 0a 20 20 20  line REINDEX.   
26a0: 20 20 20 20 20 20 20 7b 74 61 69 6c 62 72 61 6e         {tailbran
26b0: 63 68 20 6e 69 6c 0a 20 20 20 20 20 20 20 20 20  ch nil.         
26c0: 20 20 20 20 2f 63 6f 6c 6c 61 74 69 6f 6e 2d 6e      /collation-n
26d0: 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20  ame.            
26e0: 20 7b 6c 69 6e 65 20 7b 6f 70 74 78 20 2f 73 63   {line {optx /sc
26f0: 68 65 6d 61 2d 6e 61 6d 65 20 2e 7d 0a 20 20 20  hema-name .}.   
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 74                {t
2710: 61 69 6c 62 72 61 6e 63 68 20 2f 74 61 62 6c 65  ailbranch /table
2720: 2d 6e 61 6d 65 20 2f 69 6e 64 65 78 2d 6e 61 6d  -name /index-nam
2730: 65 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e}.             
2740: 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  }.          }.  
2750: 7d 0a 20 20 73 65 6c 65 63 74 2d 73 74 6d 74 20  }.  select-stmt 
2760: 7b 0a 20 20 20 73 74 61 63 6b 0a 20 20 20 20 20  {.   stack.     
2770: 7b 6f 70 74 20 7b 6c 69 6e 65 20 57 49 54 48 20  {opt {line WITH 
2780: 7b 6f 70 74 20 52 45 43 55 52 53 49 56 45 7d 20  {opt RECURSIVE} 
2790: 7b 6c 6f 6f 70 20 63 6f 6d 6d 6f 6e 2d 74 61 62  {loop common-tab
27a0: 6c 65 2d 65 78 70 72 65 73 73 69 6f 6e 20 2c 7d  le-expression ,}
27b0: 7d 7d 0a 20 20 20 20 20 7b 6c 6f 6f 70 20 0a 20  }}.     {loop . 
27c0: 20 20 20 20 20 20 7b 6f 72 0a 20 20 20 20 20 20        {or.      
27d0: 20 20 20 20 7b 69 6e 64 65 6e 74 73 74 61 63 6b      {indentstack
27e0: 20 32 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   2.             
27f0: 20 7b 6c 69 6e 65 20 53 45 4c 45 43 54 20 7b 6f   {line SELECT {o
2800: 72 20 6e 69 6c 20 44 49 53 54 49 4e 43 54 20 41  r nil DISTINCT A
2810: 4c 4c 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  LL}.            
2820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2840: 20 7b 6c 6f 6f 70 20 72 65 73 75 6c 74 2d 63 6f   {loop result-co
2850: 6c 75 6d 6e 20 2c 7d 7d 0a 20 20 20 20 20 20 20  lumn ,}}.       
2860: 20 20 20 20 20 20 20 7b 6f 70 74 78 20 46 52 4f         {optx FRO
2870: 4d 20 7b 6f 72 20 7b 6c 6f 6f 70 20 74 61 62 6c  M {or {loop tabl
2880: 65 2d 6f 72 2d 73 75 62 71 75 65 72 79 20 2c 7d  e-or-subquery ,}
2890: 20 6a 6f 69 6e 2d 63 6c 61 75 73 65 7d 7d 0a 20   join-clause}}. 
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 70               {op
28b0: 74 78 20 57 48 45 52 45 20 65 78 70 72 7d 0a 20  tx WHERE expr}. 
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 70               {op
28d0: 74 78 20 47 52 4f 55 50 20 42 59 20 7b 6c 6f 6f  tx GROUP BY {loo
28e0: 70 20 65 78 70 72 20 2c 7d 20 7b 6f 70 74 78 20  p expr ,} {optx 
28f0: 48 41 56 49 4e 47 20 65 78 70 72 7d 7d 0a 20 20  HAVING expr}}.  
2900: 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 70 74              {opt
2910: 78 20 57 49 4e 44 4f 57 20 7b 6c 6f 6f 70 20 7b  x WINDOW {loop {
2920: 6c 69 6e 65 20 2f 77 69 6e 64 6f 77 2d 6e 61 6d  line /window-nam
2930: 65 20 41 53 20 77 69 6e 64 6f 77 2d 64 65 66 6e  e AS window-defn
2940: 7d 20 2c 7d 7d 0a 20 20 20 20 20 20 20 20 20 20  } ,}}.          
2950: 7d 0a 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e  }.          {lin
2960: 65 20 56 41 4c 55 45 53 20 7b 6c 6f 6f 70 20 7b  e VALUES {loop {
2970: 6c 69 6e 65 20 28 20 7b 74 6f 70 6c 6f 6f 70 20  line ( {toploop 
2980: 65 78 70 72 20 2c 7d 20 29 7d 20 2c 7d 7d 0a 20  expr ,} )} ,}}. 
2990: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 63        }.       c
29a0: 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74 6f 72  ompound-operator
29b0: 0a 20 20 20 20 20 7d 0a 20 20 20 20 20 7b 6f 70  .     }.     {op
29c0: 74 78 20 4f 52 44 45 52 20 42 59 20 7b 6c 6f 6f  tx ORDER BY {loo
29d0: 70 20 6f 72 64 65 72 69 6e 67 2d 74 65 72 6d 20  p ordering-term 
29e0: 2c 7d 7d 0a 20 20 20 20 20 7b 6f 70 74 78 20 4c  ,}}.     {optx L
29f0: 49 4d 49 54 20 65 78 70 72 20 7b 6f 70 74 78 20  IMIT expr {optx 
2a00: 7b 6f 72 20 4f 46 46 53 45 54 20 2c 7d 20 65 78  {or OFFSET ,} ex
2a10: 70 72 7d 7d 0a 20 20 7d 0a 20 20 6a 6f 69 6e 2d  pr}}.  }.  join-
2a20: 63 6c 61 75 73 65 20 7b 0a 20 20 20 20 6c 69 6e  clause {.    lin
2a30: 65 0a 20 20 20 20 20 20 74 61 62 6c 65 2d 6f 72  e.      table-or
2a40: 2d 73 75 62 71 75 65 72 79 0a 20 20 20 20 20 20  -subquery.      
2a50: 7b 6f 70 74 20 7b 6c 6f 6f 70 20 7b 6c 69 6e 65  {opt {loop {line
2a60: 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72 20 74   join-operator t
2a70: 61 62 6c 65 2d 6f 72 2d 73 75 62 71 75 65 72 79  able-or-subquery
2a80: 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e 74   join-constraint
2a90: 7d 7d 7d 0a 20 20 7d 0a 20 20 73 65 6c 65 63 74  }}}.  }.  select
2aa0: 2d 63 6f 72 65 20 7b 0a 20 20 20 20 20 6f 72 0a  -core {.     or.
2ab0: 20 20 20 20 20 20 20 20 7b 69 6e 64 65 6e 74 73          {indents
2ac0: 74 61 63 6b 20 32 0a 20 20 20 20 20 20 20 20 20  tack 2.         
2ad0: 20 20 20 7b 6c 69 6e 65 20 53 45 4c 45 43 54 20     {line SELECT 
2ae0: 7b 6f 72 20 6e 69 6c 20 44 49 53 54 49 4e 43 54  {or nil DISTINCT
2af0: 20 41 4c 4c 7d 0a 20 20 20 20 20 20 20 20 20 20   ALL}.          
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b20: 20 7b 6c 6f 6f 70 20 72 65 73 75 6c 74 2d 63 6f   {loop result-co
2b30: 6c 75 6d 6e 20 2c 7d 7d 0a 20 20 20 20 20 20 20  lumn ,}}.       
2b40: 20 20 20 20 20 7b 6f 70 74 78 20 46 52 4f 4d 20       {optx FROM 
2b50: 7b 6f 72 20 7b 6c 6f 6f 70 20 74 61 62 6c 65 2d  {or {loop table-
2b60: 6f 72 2d 73 75 62 71 75 65 72 79 20 2c 7d 20 6a  or-subquery ,} j
2b70: 6f 69 6e 2d 63 6c 61 75 73 65 7d 7d 0a 20 20 20  oin-clause}}.   
2b80: 20 20 20 20 20 20 20 20 20 7b 6f 70 74 78 20 57           {optx W
2b90: 48 45 52 45 20 65 78 70 72 7d 0a 20 20 20 20 20  HERE expr}.     
2ba0: 20 20 20 20 20 20 20 7b 6f 70 74 78 20 47 52 4f         {optx GRO
2bb0: 55 50 20 42 59 20 7b 6c 6f 6f 70 20 65 78 70 72  UP BY {loop expr
2bc0: 20 2c 7d 20 7b 6f 70 74 78 20 48 41 56 49 4e 47   ,} {optx HAVING
2bd0: 20 65 78 70 72 7d 7d 0a 20 20 20 20 20 20 20 20   expr}}.        
2be0: 20 20 20 20 7b 6f 70 74 78 20 57 49 4e 44 4f 57      {optx WINDOW
2bf0: 20 7b 6c 6f 6f 70 20 7b 6c 69 6e 65 20 2f 77 69   {loop {line /wi
2c00: 6e 64 6f 77 2d 6e 61 6d 65 20 41 53 20 77 69 6e  ndow-name AS win
2c10: 64 6f 77 2d 64 65 66 6e 7d 20 2c 7d 7d 0a 20 20  dow-defn} ,}}.  
2c20: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2c30: 7b 6c 69 6e 65 20 56 41 4c 55 45 53 20 7b 6c 6f  {line VALUES {lo
2c40: 6f 70 20 7b 6c 69 6e 65 20 28 20 7b 74 6f 70 6c  op {line ( {topl
2c50: 6f 6f 70 20 65 78 70 72 20 2c 7d 20 29 7d 20 2c  oop expr ,} )} ,
2c60: 7d 7d 0a 20 20 7d 0a 20 20 66 61 63 74 6f 72 65  }}.  }.  factore
2c70: 64 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20 7b 0a  d-select-stmt {.
2c80: 20 20 20 20 73 74 61 63 6b 0a 20 20 20 20 20 20      stack.      
2c90: 7b 6f 70 74 20 7b 6c 69 6e 65 20 57 49 54 48 20  {opt {line WITH 
2ca0: 7b 6f 70 74 20 52 45 43 55 52 53 49 56 45 7d 20  {opt RECURSIVE} 
2cb0: 7b 6c 6f 6f 70 20 63 6f 6d 6d 6f 6e 2d 74 61 62  {loop common-tab
2cc0: 6c 65 2d 65 78 70 72 65 73 73 69 6f 6e 20 2c 7d  le-expression ,}
2cd0: 7d 7d 0a 20 20 20 20 20 20 7b 6c 69 6e 65 20 7b  }}.      {line {
2ce0: 6c 6f 6f 70 20 73 65 6c 65 63 74 2d 63 6f 72 65  loop select-core
2cf0: 20 63 6f 6d 70 6f 75 6e 64 2d 6f 70 65 72 61 74   compound-operat
2d00: 6f 72 7d 7d 0a 20 20 20 20 20 20 7b 6f 70 74 78  or}}.      {optx
2d10: 20 4f 52 44 45 52 20 42 59 20 7b 6c 6f 6f 70 20   ORDER BY {loop 
2d20: 6f 72 64 65 72 69 6e 67 2d 74 65 72 6d 20 2c 7d  ordering-term ,}
2d30: 7d 0a 20 20 20 20 20 20 7b 6f 70 74 78 20 4c 49  }.      {optx LI
2d40: 4d 49 54 20 65 78 70 72 20 7b 6f 70 74 78 20 7b  MIT expr {optx {
2d50: 6f 72 20 4f 46 46 53 45 54 20 2c 7d 20 65 78 70  or OFFSET ,} exp
2d60: 72 7d 7d 0a 20 20 7d 0a 20 20 73 69 6d 70 6c 65  r}}.  }.  simple
2d70: 2d 73 65 6c 65 63 74 2d 73 74 6d 74 20 7b 0a 20  -select-stmt {. 
2d80: 20 20 20 73 74 61 63 6b 0a 20 20 20 20 20 20 7b     stack.      {
2d90: 6f 70 74 20 7b 6c 69 6e 65 20 57 49 54 48 20 7b  opt {line WITH {
2da0: 6f 70 74 20 52 45 43 55 52 53 49 56 45 7d 20 7b  opt RECURSIVE} {
2db0: 6c 6f 6f 70 20 63 6f 6d 6d 6f 6e 2d 74 61 62 6c  loop common-tabl
2dc0: 65 2d 65 78 70 72 65 73 73 69 6f 6e 20 2c 7d 7d  e-expression ,}}
2dd0: 7d 0a 20 20 20 20 20 20 7b 6c 69 6e 65 20 73 65  }.      {line se
2de0: 6c 65 63 74 2d 63 6f 72 65 20 7b 73 74 61 63 6b  lect-core {stack
2df0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 70 74              {opt
2e10: 78 20 4f 52 44 45 52 20 42 59 20 7b 6c 6f 6f 70  x ORDER BY {loop
2e20: 20 6f 72 64 65 72 69 6e 67 2d 74 65 72 6d 20 2c   ordering-term ,
2e30: 7d 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }}.             
2e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f                {o
2e50: 70 74 78 20 4c 49 4d 49 54 20 65 78 70 72 20 7b  ptx LIMIT expr {
2e60: 6f 70 74 78 20 7b 6f 72 20 4f 46 46 53 45 54 20  optx {or OFFSET 
2e70: 2c 7d 20 65 78 70 72 7d 7d 7d 7d 0a 20 20 7d 0a  ,} expr}}}}.  }.
2e80: 20 20 63 6f 6d 70 6f 75 6e 64 2d 73 65 6c 65 63    compound-selec
2e90: 74 2d 73 74 6d 74 20 7b 0a 20 20 20 20 73 74 61  t-stmt {.    sta
2ea0: 63 6b 0a 20 20 20 20 20 20 7b 6f 70 74 20 7b 6c  ck.      {opt {l
2eb0: 69 6e 65 20 57 49 54 48 20 7b 6f 70 74 20 52 45  ine WITH {opt RE
2ec0: 43 55 52 53 49 56 45 7d 20 7b 6c 6f 6f 70 20 63  CURSIVE} {loop c
2ed0: 6f 6d 6d 6f 6e 2d 74 61 62 6c 65 2d 65 78 70 72  ommon-table-expr
2ee0: 65 73 73 69 6f 6e 20 2c 7d 7d 7d 0a 20 20 20 20  ession ,}}}.    
2ef0: 20 20 7b 6c 69 6e 65 20 73 65 6c 65 63 74 2d 63    {line select-c
2f00: 6f 72 65 20 7b 6c 6f 6f 70 0a 20 20 20 20 20 20  ore {loop.      
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c                {l
2f20: 69 6e 65 20 7b 6f 72 20 55 4e 49 4f 4e 20 7b 6c  ine {or UNION {l
2f30: 69 6e 65 20 55 4e 49 4f 4e 20 41 4c 4c 7d 20 49  ine UNION ALL} I
2f40: 4e 54 45 52 53 45 43 54 20 45 58 43 45 50 54 7d  NTERSECT EXCEPT}
2f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f60: 20 20 20 20 20 20 20 20 20 20 20 73 65 6c 65 63             selec
2f70: 74 2d 63 6f 72 65 7d 20 6e 69 6c 7d 7d 0a 20 20  t-core} nil}}.  
2f80: 20 20 20 20 7b 6f 70 74 78 20 4f 52 44 45 52 20      {optx ORDER 
2f90: 42 59 20 7b 6c 6f 6f 70 20 6f 72 64 65 72 69 6e  BY {loop orderin
2fa0: 67 2d 74 65 72 6d 20 2c 7d 7d 0a 20 20 20 20 20  g-term ,}}.     
2fb0: 20 7b 6f 70 74 78 20 4c 49 4d 49 54 20 65 78 70   {optx LIMIT exp
2fc0: 72 20 7b 6f 70 74 78 20 7b 6f 72 20 4f 46 46 53  r {optx {or OFFS
2fd0: 45 54 20 2c 7d 20 65 78 70 72 7d 7d 0a 20 20 7d  ET ,} expr}}.  }
2fe0: 0a 20 20 74 61 62 6c 65 2d 6f 72 2d 73 75 62 71  .  table-or-subq
2ff0: 75 65 72 79 20 7b 0a 20 20 20 20 20 6f 72 0a 20  uery {.     or. 
3000: 20 20 20 20 20 20 7b 73 74 61 63 6b 0a 20 20 20        {stack.   
3010: 20 20 20 20 20 20 20 7b 6c 69 6e 65 0a 20 20 20         {line.   
3020: 20 20 20 20 20 20 20 20 20 20 7b 6f 70 74 20 2f            {opt /
3030: 73 63 68 65 6d 61 2d 6e 61 6d 65 20 2e 7d 20 2f  schema-name .} /
3040: 74 61 62 6c 65 2d 6e 61 6d 65 0a 20 20 20 20 20  table-name.     
3050: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
3060: 20 7b 6c 69 6e 65 0a 20 20 20 20 20 20 20 20 20   {line.         
3070: 20 20 20 7b 6f 70 74 20 7b 6f 70 74 78 20 41 53     {opt {optx AS
3080: 7d 20 2f 74 61 62 6c 65 2d 61 6c 69 61 73 7d 0a  } /table-alias}.
3090: 20 20 20 20 20 20 20 20 20 20 20 20 7b 6f 72 20              {or 
30a0: 6e 69 6c 20 7b 6c 69 6e 65 20 49 4e 44 45 58 45  nil {line INDEXE
30b0: 44 20 42 59 20 2f 69 6e 64 65 78 2d 6e 61 6d 65  D BY /index-name
30c0: 7d 20 7b 6c 69 6e 65 20 4e 4f 54 20 49 4e 44 45  } {line NOT INDE
30d0: 58 45 44 7d 7d 0a 20 20 20 20 20 20 20 20 20 20  XED}}.          
30e0: 7d 0a 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  }.       }.     
30f0: 20 20 7b 72 69 67 68 74 73 74 61 63 6b 0a 20 20    {rightstack.  
3100: 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 0a 20 20          {line.  
3110: 20 20 20 20 20 20 20 20 20 20 20 7b 6f 70 74 20             {opt 
3120: 2f 73 63 68 65 6d 61 2d 6e 61 6d 65 20 2e 7d 20  /schema-name .} 
3130: 2f 74 61 62 6c 65 2d 66 75 6e 63 74 69 6f 6e 2d  /table-function-
3140: 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20  name.           
3150: 20 20 28 20 7b 6f 72 20 7b 74 6f 70 6c 6f 6f 70    ( {or {toploop
3160: 20 65 78 70 72 20 2c 7d 20 7b 7d 7d 20 29 0a 20   expr ,} {}} ). 
3170: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
3180: 20 20 20 20 20 7b 6c 69 6e 65 0a 20 20 20 20 20       {line.     
3190: 20 20 20 20 20 20 20 7b 6f 70 74 20 7b 6f 70 74         {opt {opt
31a0: 78 20 41 53 7d 20 2f 74 61 62 6c 65 2d 61 6c 69  x AS} /table-ali
31b0: 61 73 7d 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  as}.          }.
31c0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
31d0: 7b 6c 69 6e 65 20 28 20 7b 6f 72 20 7b 6c 6f 6f  {line ( {or {loo
31e0: 70 20 74 61 62 6c 65 2d 6f 72 2d 73 75 62 71 75  p table-or-subqu
31f0: 65 72 79 20 2c 7d 20 6a 6f 69 6e 2d 63 6c 61 75  ery ,} join-clau
3200: 73 65 7d 20 29 7d 0a 20 20 20 20 20 20 20 7b 6c  se} )}.       {l
3210: 69 6e 65 0a 20 20 20 20 20 20 20 20 20 20 28 20  ine.          ( 
3220: 73 65 6c 65 63 74 2d 73 74 6d 74 20 29 20 7b 6f  select-stmt ) {o
3230: 70 74 20 7b 6f 70 74 78 20 41 53 7d 20 2f 74 61  pt {optx AS} /ta
3240: 62 6c 65 2d 61 6c 69 61 73 7d 0a 20 20 20 20 20  ble-alias}.     
3250: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 73 75 6c 74    }.  }.  result
3260: 2d 63 6f 6c 75 6d 6e 20 7b 0a 20 20 20 20 20 6f  -column {.     o
3270: 72 0a 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20  r.        {line 
3280: 65 78 70 72 20 7b 6f 70 74 20 7b 6f 70 74 78 20  expr {opt {optx 
3290: 41 53 7d 20 2f 63 6f 6c 75 6d 6e 2d 61 6c 69 61  AS} /column-alia
32a0: 73 7d 7d 0a 20 20 20 20 20 20 20 20 2a 0a 20 20  s}}.        *.  
32b0: 20 20 20 20 20 20 7b 6c 69 6e 65 20 2f 74 61 62        {line /tab
32c0: 6c 65 2d 6e 61 6d 65 20 2e 20 2a 7d 0a 20 20 7d  le-name . *}.  }
32d0: 0a 20 20 6a 6f 69 6e 2d 6f 70 65 72 61 74 6f 72  .  join-operator
32e0: 20 7b 0a 20 20 20 20 20 6f 72 0a 20 20 20 20 20   {.     or.     
32f0: 20 20 20 7b 6c 69 6e 65 20 2c 7d 0a 20 20 20 20     {line ,}.    
3300: 20 20 20 20 7b 6c 69 6e 65 0a 20 20 20 20 20 20      {line.      
3310: 20 20 20 20 20 20 7b 6f 70 74 20 4e 41 54 55 52        {opt NATUR
3320: 41 4c 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  AL}.            
3330: 7b 6f 72 20 20 6e 69 6c 20 7b 6c 69 6e 65 20 4c  {or  nil {line L
3340: 45 46 54 20 7b 6f 72 20 4f 55 54 45 52 20 6e 69  EFT {or OUTER ni
3350: 6c 7d 7d 20 49 4e 4e 45 52 20 43 52 4f 53 53 7d  l}} INNER CROSS}
3360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4a 4f 49  .            JOI
3370: 4e 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 7d 0a  N.        }.  }.
3380: 20 20 6a 6f 69 6e 2d 63 6f 6e 73 74 72 61 69 6e    join-constrain
3390: 74 20 7b 0a 20 20 20 20 20 6f 72 0a 20 20 20 20  t {.     or.    
33a0: 20 20 20 20 7b 6c 69 6e 65 20 4f 4e 20 65 78 70      {line ON exp
33b0: 72 7d 0a 20 20 20 20 20 20 20 20 7b 6c 69 6e 65  r}.        {line
33c0: 20 55 53 49 4e 47 20 28 20 7b 6c 6f 6f 70 20 2f   USING ( {loop /
33d0: 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 2c 7d 20 29  column-name ,} )
33e0: 7d 0a 20 20 20 20 20 20 20 20 6e 69 6c 0a 20 20  }.        nil.  
33f0: 7d 0a 20 20 6f 72 64 65 72 69 6e 67 2d 74 65 72  }.  ordering-ter
3400: 6d 20 7b 0a 20 20 20 20 20 20 6c 69 6e 65 20 65  m {.      line e
3410: 78 70 72 20 7b 6f 70 74 20 43 4f 4c 4c 41 54 45  xpr {opt COLLATE
3420: 20 2f 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65   /collation-name
3430: 7d 20 7b 6f 72 20 6e 69 6c 20 41 53 43 20 44 45  } {or nil ASC DE
3440: 53 43 7d 20 0a 20 20 7d 0a 20 20 63 6f 6d 70 6f  SC} .  }.  compo
3450: 75 6e 64 2d 6f 70 65 72 61 74 6f 72 20 7b 0a 20  und-operator {. 
3460: 20 20 20 20 6f 72 20 55 4e 49 4f 4e 20 7b 6c 69      or UNION {li
3470: 6e 65 20 55 4e 49 4f 4e 20 41 4c 4c 7d 20 49 4e  ne UNION ALL} IN
3480: 54 45 52 53 45 43 54 20 45 58 43 45 50 54 0a 20  TERSECT EXCEPT. 
3490: 20 7d 0a 20 20 75 70 64 61 74 65 2d 73 74 6d 74   }.  update-stmt
34a0: 20 7b 0a 20 20 20 20 20 72 69 67 68 74 73 74 61   {.     rightsta
34b0: 63 6b 0a 20 20 20 20 20 20 20 20 7b 6c 69 6e 65  ck.        {line
34c0: 20 7b 6f 70 74 20 77 69 74 68 2d 63 6c 61 75 73   {opt with-claus
34d0: 65 7d 20 55 50 44 41 54 45 20 7b 6f 72 20 7b 7d  e} UPDATE {or {}
34e0: 20 7b 6c 69 6e 65 20 4f 52 20 52 4f 4c 4c 42 41   {line OR ROLLBA
34f0: 43 4b 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  CK}.            
3500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3510: 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 4f           {line O
3520: 52 20 41 42 4f 52 54 7d 0a 20 20 20 20 20 20 20  R ABORT}.       
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c                {l
3550: 69 6e 65 20 4f 52 20 52 45 50 4c 41 43 45 7d 0a  ine OR REPLACE}.
3560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3580: 20 20 20 20 20 7b 6c 69 6e 65 20 4f 52 20 46 41       {line OR FA
3590: 49 4c 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  IL}.            
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b0: 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 4f           {line O
35c0: 52 20 49 47 4e 4f 52 45 7d 7d 0a 20 20 20 20 20  R IGNORE}}.     
35d0: 20 20 20 20 20 20 20 20 20 71 75 61 6c 69 66 69           qualifi
35e0: 65 64 2d 74 61 62 6c 65 2d 6e 61 6d 65 7d 0a 20  ed-table-name}. 
35f0: 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 53 45 54         {line SET
3600: 20 7b 6c 6f 6f 70 20 7b 6c 69 6e 65 20 7b 6f 72   {loop {line {or
3610: 20 2f 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 63 6f   /column-name co
3620: 6c 75 6d 6e 2d 6e 61 6d 65 2d 6c 69 73 74 7d 20  lumn-name-list} 
3630: 3d 20 65 78 70 72 7d 20 2c 7d 0a 20 20 20 20 20  = expr} ,}.     
3640: 20 20 20 20 20 20 20 20 20 7b 6f 70 74 78 20 57           {optx W
3650: 48 45 52 45 20 65 78 70 72 7d 7d 0a 20 20 7d 0a  HERE expr}}.  }.
3660: 20 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 2d 6c 69    column-name-li
3670: 73 74 20 7b 6c 69 6e 65 20 28 20 7b 6c 6f 6f 70  st {line ( {loop
3680: 20 2f 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 20 2c 7d   /column-name ,}
3690: 20 29 7d 0a 20 20 75 70 64 61 74 65 2d 73 74 6d   )}.  update-stm
36a0: 74 2d 6c 69 6d 69 74 65 64 20 7b 0a 20 20 20 20  t-limited {.    
36b0: 20 73 74 61 63 6b 0a 20 20 20 20 20 20 20 20 7b   stack.        {
36c0: 6c 69 6e 65 20 7b 6f 70 74 20 77 69 74 68 2d 63  line {opt with-c
36d0: 6c 61 75 73 65 7d 20 55 50 44 41 54 45 20 7b 6f  lause} UPDATE {o
36e0: 72 20 7b 7d 20 7b 6c 69 6e 65 20 4f 52 20 52 4f  r {} {line OR RO
36f0: 4c 4c 42 41 43 4b 7d 0a 20 20 20 20 20 20 20 20  LLBACK}.        
3700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69               {li
3720: 6e 65 20 4f 52 20 41 42 4f 52 54 7d 0a 20 20 20  ne OR ABORT}.   
3730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3750: 20 20 7b 6c 69 6e 65 20 4f 52 20 52 45 50 4c 41    {line OR REPLA
3760: 43 45 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  CE}.            
3770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3780: 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 4f           {line O
3790: 52 20 46 41 49 4c 7d 0a 20 20 20 20 20 20 20 20  R FAIL}.        
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 6c 69               {li
37c0: 6e 65 20 4f 52 20 49 47 4e 4f 52 45 7d 7d 0a 20  ne OR IGNORE}}. 
37d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 71 75 61               qua
37e0: 6c 69 66 69 65 64 2d 74 61 62 6c 65 2d 6e 61 6d  lified-table-nam
37f0: 65 7d 0a 20 20 20 20 20 20 20 20 7b 6c 69 6e 65  e}.        {line
3800: 20 53 45 54 20 7b 6c 6f 6f 70 20 7b 6c 69 6e 65   SET {loop {line
3810: 20 7b 6f 72 20 2f 63 6f 6c 75 6d 6e 2d 6e 61 6d   {or /column-nam
3820: 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 2d 6c 69  e column-name-li
3830: 73 74 7d 20 3d 20 65 78 70 72 7d 20 2c 7d 0a 20  st} = expr} ,}. 
3840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3850: 20 7b 6f 70 74 78 20 57 48 45 52 45 20 65 78 70   {optx WHERE exp
3860: 72 7d 7d 0a 20 20 20 20 20 20 20 20 7b 6f 70 74  r}}.        {opt
3870: 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 73  x.            {s
3880: 74 61 63 6b 0a 20 20 20 20 20 20 20 20 20 20 20  tack.           
3890: 20 20 20 7b 6f 70 74 78 20 4f 52 44 45 52 20 42     {optx ORDER B
38a0: 59 20 7b 6c 6f 6f 70 20 6f 72 64 65 72 69 6e 67  Y {loop ordering
38b0: 2d 74 65 72 6d 20 2c 7d 7d 0a 20 20 20 20 20 20  -term ,}}.      
38c0: 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 4c 49          {line LI
38d0: 4d 49 54 20 65 78 70 72 20 7b 6f 70 74 78 20 7b  MIT expr {optx {
38e0: 6f 72 20 4f 46 46 53 45 54 20 2c 7d 20 65 78 70  or OFFSET ,} exp
38f0: 72 7d 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r}}.            
3900: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 7d 0a  }.        }.  }.
3910: 20 20 71 75 61 6c 69 66 69 65 64 2d 74 61 62 6c    qualified-tabl
3920: 65 2d 6e 61 6d 65 20 7b 0a 20 20 20 20 20 73 74  e-name {.     st
3930: 61 63 6b 0a 20 20 20 20 20 20 20 7b 6c 69 6e 65  ack.       {line
3940: 20 7b 6f 70 74 78 20 2f 73 63 68 65 6d 61 2d 6e   {optx /schema-n
3950: 61 6d 65 20 2e 7d 20 2f 74 61 62 6c 65 2d 6e 61  ame .} /table-na
3960: 6d 65 20 7b 6f 70 74 20 41 53 20 2f 61 6c 69 61  me {opt AS /alia
3970: 73 7d 7d 0a 20 20 20 20 20 20 20 7b 6f 72 20 6e  s}}.       {or n
3980: 69 6c 20 7b 6c 69 6e 65 20 49 4e 44 45 58 45 44  il {line INDEXED
3990: 20 42 59 20 2f 69 6e 64 65 78 2d 6e 61 6d 65 7d   BY /index-name}
39a0: 20 7b 6c 69 6e 65 20 4e 4f 54 20 49 4e 44 45 58   {line NOT INDEX
39b0: 45 44 7d 7d 0a 20 20 7d 0a 20 20 76 61 63 75 75  ED}}.  }.  vacuu
39c0: 6d 2d 73 74 6d 74 20 7b 0a 20 20 20 20 20 20 6c  m-stmt {.      l
39d0: 69 6e 65 20 56 41 43 55 55 4d 20 7b 6f 70 74 20  ine VACUUM {opt 
39e0: 2f 73 63 68 65 6d 61 2d 6e 61 6d 65 7d 0a 20 20  /schema-name}.  
39f0: 7d 0a 20 20 63 6f 6d 6d 65 6e 74 2d 73 79 6e 74  }.  comment-synt
3a00: 61 78 20 7b 0a 20 20 20 20 6f 72 0a 20 20 20 20  ax {.    or.    
3a10: 20 20 7b 6c 69 6e 65 20 2d 2d 20 7b 6c 6f 6f 70    {line -- {loop
3a20: 20 6e 69 6c 20 2f 61 6e 79 74 68 69 6e 67 2d 65   nil /anything-e
3a30: 78 63 65 70 74 2d 6e 65 77 6c 69 6e 65 7d 20 0a  xcept-newline} .
3a40: 20 20 20 20 20 20 20 20 20 20 20 7b 6f 72 20 2f             {or /
3a50: 6e 65 77 6c 69 6e 65 20 2f 65 6e 64 2d 6f 66 2d  newline /end-of-
3a60: 69 6e 70 75 74 7d 7d 0a 20 20 20 20 20 20 7b 6c  input}}.      {l
3a70: 69 6e 65 20 2f 2a 20 7b 6c 6f 6f 70 20 6e 69 6c  ine /* {loop nil
3a80: 20 2f 61 6e 79 74 68 69 6e 67 2d 65 78 63 65 70   /anything-excep
3a90: 74 2d 2a 2f 7d 0a 20 20 20 20 20 20 20 20 20 20  t-*/}.          
3aa0: 20 7b 6f 72 20 2a 2f 20 2f 65 6e 64 2d 6f 66 2d   {or */ /end-of-
3ab0: 69 6e 70 75 74 7d 7d 0a 20 20 7d 0a 20 20 66 69  input}}.  }.  fi
3ac0: 6c 74 65 72 20 7b 0a 20 20 20 20 6c 69 6e 65 20  lter {.    line 
3ad0: 46 49 4c 54 45 52 20 28 20 57 48 45 52 45 20 65  FILTER ( WHERE e
3ae0: 78 70 72 20 29 0a 20 20 7d 0a 20 20 77 69 6e 64  xpr ).  }.  wind
3af0: 6f 77 2d 64 65 66 6e 20 7b 0a 20 20 20 20 6c 69  ow-defn {.    li
3b00: 6e 65 20 7b 6f 70 74 20 50 41 52 54 49 54 49 4f  ne {opt PARTITIO
3b10: 4e 20 42 59 20 7b 6c 6f 6f 70 20 65 78 70 72 20  N BY {loop expr 
3b20: 2c 7d 7d 0a 20 20 20 20 20 20 20 20 20 7b 6f 70  ,}}.         {op
3b30: 74 20 4f 52 44 45 52 20 42 59 20 7b 6c 6f 6f 70  t ORDER BY {loop
3b40: 20 6f 72 64 65 72 69 6e 67 2d 74 65 72 6d 20 2c   ordering-term ,
3b50: 7d 7d 0a 20 20 20 20 20 20 20 20 20 7b 6f 70 74  }}.         {opt
3b60: 20 66 72 61 6d 65 2d 73 70 65 63 7d 0a 20 20 7d   frame-spec}.  }
3b70: 0a 20 20 66 72 61 6d 65 2d 73 70 65 63 20 7b 0a  .  frame-spec {.
3b80: 20 20 20 20 6c 69 6e 65 20 7b 6f 72 20 52 41 4e      line {or RAN
3b90: 47 45 20 52 4f 57 53 7d 20 7b 6f 72 0a 20 20 20  GE ROWS} {or.   
3ba0: 20 20 20 20 7b 6c 69 6e 65 20 42 45 54 57 45 45      {line BETWEE
3bb0: 4e 20 7b 6f 72 20 7b 6c 69 6e 65 20 55 4e 42 4f  N {or {line UNBO
3bc0: 55 4e 44 45 44 20 50 52 45 43 45 44 49 4e 47 7d  UNDED PRECEDING}
3bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3be0: 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20            {line 
3bf0: 65 78 70 72 20 50 52 45 43 45 44 49 4e 47 7d 0a  expr PRECEDING}.
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c10: 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20 43           {line C
3c20: 55 52 52 45 4e 54 20 52 4f 57 7d 0a 20 20 20 20  URRENT ROW}.    
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c40: 20 20 20 20 20 7b 6c 69 6e 65 20 65 78 70 72 20       {line expr 
3c50: 46 4f 4c 4c 4f 57 49 4e 47 7d 0a 20 20 20 20 20  FOLLOWING}.     
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c70: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 41  }.             A
3c80: 4e 44 20 7b 6f 72 20 20 20 20 20 7b 6c 69 6e 65  ND {or     {line
3c90: 20 65 78 70 72 20 50 52 45 43 45 44 49 4e 47 7d   expr PRECEDING}
3ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3cb0: 20 20 20 20 20 20 20 20 20 20 7b 6c 69 6e 65 20            {line 
3cc0: 43 55 52 52 45 4e 54 20 52 4f 57 7d 0a 20 20 20  CURRENT ROW}.   
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ce0: 20 20 20 20 20 20 7b 6c 69 6e 65 20 65 78 70 72        {line expr
3cf0: 20 46 4f 4c 4c 4f 57 49 4e 47 7d 0a 20 20 20 20   FOLLOWING}.    
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 20 20 20 20 20 7b 6c 69 6e 65 20 55 4e 42 4f 55       {line UNBOU
3d20: 4e 44 45 44 20 46 4f 4c 4c 4f 57 49 4e 47 7d 0a  NDED FOLLOWING}.
3d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d40: 20 7d 0a 20 20 20 20 20 20 20 7d 0a 20 20 20 20   }.       }.    
3d50: 20 20 20 7b 6f 72 20 20 20 7b 6c 69 6e 65 20 55     {or   {line U
3d60: 4e 42 4f 55 4e 44 45 44 20 50 52 45 43 45 44 49  NBOUNDED PRECEDI
3d70: 4e 47 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20  NG}.            
3d80: 20 7b 6c 69 6e 65 20 65 78 70 72 20 50 52 45 43   {line expr PREC
3d90: 45 44 49 4e 47 7d 0a 20 20 20 20 20 20 20 20 20  EDING}.         
3da0: 20 20 20 20 7b 6c 69 6e 65 20 43 55 52 52 45 4e      {line CURREN
3db0: 54 20 52 4f 57 7d 0a 20 20 20 20 20 20 20 20 20  T ROW}.         
3dc0: 20 20 20 20 7b 6c 69 6e 65 20 65 78 70 72 20 46      {line expr F
3dd0: 4f 4c 4c 4f 57 49 4e 47 7d 0a 20 20 20 20 20 20  OLLOWING}.      
3de0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66   }.    }.  }.  f
3df0: 75 6e 63 74 69 6f 6e 2d 69 6e 76 6f 63 61 74 69  unction-invocati
3e00: 6f 6e 20 7b 0a 20 20 20 20 20 6c 69 6e 65 20 2f  on {.     line /
3e10: 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 20 28 20  function-name ( 
3e20: 7b 6f 72 20 7b 6c 69 6e 65 20 7b 6f 70 74 78 20  {or {line {optx 
3e30: 44 49 53 54 49 4e 43 54 7d 20 7b 74 6f 70 6c 6f  DISTINCT} {toplo
3e40: 6f 70 20 65 78 70 72 20 2c 7d 7d 20 7b 7d 20 2a  op expr ,}} {} *
3e50: 7d 20 29 0a 20 20 7d 0a 20 20 77 69 6e 64 6f 77  } ).  }.  window
3e60: 2d 66 75 6e 63 74 69 6f 6e 2d 69 6e 76 6f 63 61  -function-invoca
3e70: 74 69 6f 6e 20 7b 0a 20 20 20 20 6c 69 6e 65 20  tion {.    line 
3e80: 2f 77 69 6e 64 6f 77 2d 66 75 6e 63 20 28 20 7b  /window-func ( {
3e90: 6f 72 20 7b 6c 69 6e 65 20 7b 74 6f 70 6c 6f 6f  or {line {toploo
3ea0: 70 20 65 78 70 72 20 2c 7d 7d 20 7b 7d 20 2a 7d  p expr ,}} {} *}
3eb0: 20 29 20 0a 20 20 20 20 20 20 20 20 20 7b 6f 70   ) .         {op
3ec0: 74 20 66 69 6c 74 65 72 7d 20 4f 56 45 52 20 7b  t filter} OVER {
3ed0: 6f 72 20 7b 6c 69 6e 65 20 28 20 77 69 6e 64 6f  or {line ( windo
3ee0: 77 2d 64 65 66 6e 20 29 7d 20 2f 77 69 6e 64 6f  w-defn )} /windo
3ef0: 77 2d 6e 61 6d 65 7d 0a 20 20 7d 0a 7d 0a        w-name}.  }.}.