/ Hex Artifact Content
Login

Artifact 038e0f0fd243b89344c974c5d0552e85c4d27916:


0000: 2f 2a 0a 2a 2a 20 43 6f 70 79 72 69 67 68 74 20  /*.** Copyright 
0010: 28 63 29 20 31 39 39 39 2c 20 32 30 30 30 20 44  (c) 1999, 2000 D
0020: 2e 20 52 69 63 68 61 72 64 20 48 69 70 70 0a 2a  . Richard Hipp.*
0030: 2a 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72 61  *.** This progra
0040: 6d 20 69 73 20 66 72 65 65 20 73 6f 66 74 77 61  m is free softwa
0050: 72 65 3b 20 79 6f 75 20 63 61 6e 20 72 65 64 69  re; you can redi
0060: 73 74 72 69 62 75 74 65 20 69 74 20 61 6e 64 2f  stribute it and/
0070: 6f 72 0a 2a 2a 20 6d 6f 64 69 66 79 20 69 74 20  or.** modify it 
0080: 75 6e 64 65 72 20 74 68 65 20 74 65 72 6d 73 20  under the terms 
0090: 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72  of the GNU Gener
00a0: 61 6c 20 50 75 62 6c 69 63 0a 2a 2a 20 4c 69 63  al Public.** Lic
00b0: 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 65  ense as publishe
00c0: 64 20 62 79 20 74 68 65 20 46 72 65 65 20 53 6f  d by the Free So
00d0: 66 74 77 61 72 65 20 46 6f 75 6e 64 61 74 69 6f  ftware Foundatio
00e0: 6e 3b 20 65 69 74 68 65 72 0a 2a 2a 20 76 65 72  n; either.** ver
00f0: 73 69 6f 6e 20 32 20 6f 66 20 74 68 65 20 4c 69  sion 2 of the Li
0100: 63 65 6e 73 65 2c 20 6f 72 20 28 61 74 20 79 6f  cense, or (at yo
0110: 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e 79 20 6c  ur option) any l
0120: 61 74 65 72 20 76 65 72 73 69 6f 6e 2e 0a 2a 2a  ater version..**
0130: 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72 61 6d  .** This program
0140: 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20   is distributed 
0150: 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61 74  in the hope that
0160: 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 66   it will be usef
0170: 75 6c 2c 0a 2a 2a 20 62 75 74 20 57 49 54 48 4f  ul,.** but WITHO
0180: 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 3b  UT ANY WARRANTY;
0190: 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74 68   without even th
01a0: 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 6e  e implied warran
01b0: 74 79 20 6f 66 0a 2a 2a 20 4d 45 52 43 48 41 4e  ty of.** MERCHAN
01c0: 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 4e  TABILITY or FITN
01d0: 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49 43  ESS FOR A PARTIC
01e0: 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 53  ULAR PURPOSE.  S
01f0: 65 65 20 74 68 65 20 47 4e 55 0a 2a 2a 20 47 65  ee the GNU.** Ge
0200: 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63  neral Public Lic
0210: 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20 64 65  ense for more de
0220: 74 61 69 6c 73 2e 0a 2a 2a 20 0a 2a 2a 20 59 6f  tails..** .** Yo
0230: 75 20 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65  u should have re
0240: 63 65 69 76 65 64 20 61 20 63 6f 70 79 20 6f 66  ceived a copy of
0250: 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c   the GNU General
0260: 20 50 75 62 6c 69 63 0a 2a 2a 20 4c 69 63 65 6e   Public.** Licen
0270: 73 65 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68  se along with th
0280: 69 73 20 6c 69 62 72 61 72 79 3b 20 69 66 20 6e  is library; if n
0290: 6f 74 2c 20 77 72 69 74 65 20 74 6f 20 74 68 65  ot, write to the
02a0: 0a 2a 2a 20 46 72 65 65 20 53 6f 66 74 77 61 72  .** Free Softwar
02b0: 65 20 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 49 6e  e Foundation, In
02c0: 63 2e 2c 20 35 39 20 54 65 6d 70 6c 65 20 50 6c  c., 59 Temple Pl
02d0: 61 63 65 20 2d 20 53 75 69 74 65 20 33 33 30 2c  ace - Suite 330,
02e0: 0a 2a 2a 20 42 6f 73 74 6f 6e 2c 20 4d 41 20 20  .** Boston, MA  
02f0: 30 32 31 31 31 2d 31 33 30 37 2c 20 55 53 41 2e  02111-1307, USA.
0300: 0a 2a 2a 0a 2a 2a 20 41 75 74 68 6f 72 20 63 6f  .**.** Author co
0310: 6e 74 61 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ntact informatio
0320: 6e 3a 0a 2a 2a 20 20 20 64 72 68 40 68 77 61 63  n:.**   drh@hwac
0330: 69 2e 63 6f 6d 0a 2a 2a 20 20 20 68 74 74 70 3a  i.com.**   http:
0340: 2f 2f 77 77 77 2e 68 77 61 63 69 2e 63 6f 6d 2f  //www.hwaci.com/
0350: 64 72 68 2f 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  drh/.**.********
0360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0370: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
03a0: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
03b0: 6f 6e 74 61 69 6e 73 20 53 51 4c 69 74 65 27 73  ontains SQLite's
03c0: 20 67 72 61 6d 6d 61 72 20 66 6f 72 20 53 51 4c   grammar for SQL
03d0: 2e 20 20 50 72 6f 63 65 73 73 20 74 68 69 73 20  .  Process this 
03e0: 66 69 6c 65 0a 2a 2a 20 75 73 69 6e 67 20 74 68  file.** using th
03f0: 65 20 6c 65 6d 6f 6e 20 70 61 72 73 65 72 20 67  e lemon parser g
0400: 65 6e 65 72 61 74 6f 72 20 74 6f 20 67 65 6e 65  enerator to gene
0410: 72 61 74 65 20 43 20 63 6f 64 65 20 74 68 61 74  rate C code that
0420: 20 72 75 6e 73 0a 2a 2a 20 74 68 65 20 70 61 72   runs.** the par
0430: 73 65 72 2e 20 20 4c 65 6d 6f 6e 20 77 69 6c 6c  ser.  Lemon will
0440: 20 61 6c 73 6f 20 67 65 6e 65 72 61 74 65 20 61   also generate a
0450: 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f 6e   header file con
0460: 74 61 69 6e 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72  taining.** numer
0470: 69 63 20 63 6f 64 65 73 20 66 6f 72 20 61 6c 6c  ic codes for all
0480: 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 73 2e 0a   of the tokens..
0490: 2a 2a 0a 2a 2a 20 40 28 23 29 20 24 49 64 3a 20  **.** @(#) $Id: 
04a0: 70 61 72 73 65 2e 79 2c 76 20 31 2e 35 20 32 30  parse.y,v 1.5 20
04b0: 30 30 2f 30 35 2f 33 31 20 31 38 3a 32 30 3a 31  00/05/31 18:20:1
04c0: 34 20 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a 25  4 drh Exp $.*/.%
04d0: 74 6f 6b 65 6e 5f 70 72 65 66 69 78 20 54 4b 5f  token_prefix TK_
04e0: 0a 25 74 6f 6b 65 6e 5f 74 79 70 65 20 7b 54 6f  .%token_type {To
04f0: 6b 65 6e 7d 0a 25 65 78 74 72 61 5f 61 72 67 75  ken}.%extra_argu
0500: 6d 65 6e 74 20 7b 50 61 72 73 65 20 2a 70 50 61  ment {Parse *pPa
0510: 72 73 65 7d 0a 25 73 79 6e 74 61 78 5f 65 72 72  rse}.%syntax_err
0520: 6f 72 20 7b 0a 20 20 73 71 6c 69 74 65 53 65 74  or {.  sqliteSet
0530: 4e 53 74 72 69 6e 67 28 26 70 50 61 72 73 65 2d  NString(&pParse-
0540: 3e 7a 45 72 72 4d 73 67 2c 22 73 79 6e 74 61 78  >zErrMsg,"syntax
0550: 20 65 72 72 6f 72 20 6e 65 61 72 20 5c 22 22 2c   error near \"",
0560: 30 2c 54 4f 4b 45 4e 2e 7a 2c 54 4f 4b 45 4e 2e  0,TOKEN.z,TOKEN.
0570: 6e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n,.             
0580: 20 20 20 20 20 20 22 5c 22 22 2c 20 31 2c 20 30        "\"", 1, 0
0590: 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 73 45 72  );.  pParse->sEr
05a0: 72 54 6f 6b 65 6e 20 3d 20 54 4f 4b 45 4e 3b 0a  rToken = TOKEN;.
05b0: 7d 0a 25 6e 61 6d 65 20 73 71 6c 69 74 65 50 61  }.%name sqlitePa
05c0: 72 73 65 72 0a 25 69 6e 63 6c 75 64 65 20 7b 0a  rser.%include {.
05d0: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
05e0: 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  Int.h".#include 
05f0: 22 70 61 72 73 65 2e 68 22 0a 7d 0a 0a 0a 2f 2f  "parse.h".}...//
0600: 20 49 6e 70 75 74 20 69 73 20 7a 65 72 6f 20 6f   Input is zero o
0610: 72 20 6d 6f 72 65 20 63 6f 6d 6d 61 6e 64 73 2e  r more commands.
0620: 0a 69 6e 70 75 74 20 3a 3a 3d 20 63 6d 64 6c 69  .input ::= cmdli
0630: 73 74 2e 0a 0a 2f 2f 20 54 68 65 73 65 20 61 72  st...// These ar
0640: 65 20 65 78 74 72 61 20 74 6f 6b 65 6e 73 20 75  e extra tokens u
0650: 73 65 64 20 62 79 20 74 68 65 20 6c 65 78 65 72  sed by the lexer
0660: 20 62 75 74 20 6e 65 76 65 72 20 73 65 65 6e 20   but never seen 
0670: 62 79 20 74 68 65 0a 2f 2f 20 70 61 72 73 65 72  by the.// parser
0680: 2e 20 20 57 65 20 70 75 74 20 74 68 65 6d 20 69  .  We put them i
0690: 6e 20 61 20 72 75 6c 65 20 73 6f 20 74 68 61 74  n a rule so that
06a0: 20 74 68 65 20 70 61 72 73 65 72 20 67 65 6e 65   the parser gene
06b0: 72 61 74 6f 72 20 77 69 6c 6c 0a 2f 2f 20 61 64  rator will.// ad
06c0: 64 20 74 68 65 6d 20 74 6f 20 74 68 65 20 73 71  d them to the sq
06d0: 6c 69 74 65 54 6f 6b 65 6e 73 2e 68 20 6f 75 74  liteTokens.h out
06e0: 70 75 74 20 66 69 6c 65 2e 0a 2f 2f 0a 69 6e 70  put file..//.inp
06f0: 75 74 20 3a 3a 3d 20 45 4e 44 5f 4f 46 5f 46 49  ut ::= END_OF_FI
0700: 4c 45 20 49 4c 4c 45 47 41 4c 20 53 50 41 43 45  LE ILLEGAL SPACE
0710: 20 55 4e 43 4c 4f 53 45 44 5f 53 54 52 49 4e 47   UNCLOSED_STRING
0720: 20 43 4f 4d 4d 45 4e 54 20 46 55 4e 43 54 49 4f   COMMENT FUNCTIO
0730: 4e 0a 20 20 20 20 20 20 20 20 20 20 55 4d 49 4e  N.          UMIN
0740: 55 53 20 46 49 45 4c 44 2e 0a 0a 2f 2f 20 41 20  US FIELD...// A 
0750: 6c 69 73 74 20 6f 66 20 63 6f 6d 6d 61 6e 64 73  list of commands
0760: 20 69 73 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   is zero or more
0770: 20 63 6f 6d 6d 61 6e 64 73 0a 2f 2f 0a 63 6d 64   commands.//.cmd
0780: 6c 69 73 74 20 3a 3a 3d 20 65 63 6d 64 2e 0a 63  list ::= ecmd..c
0790: 6d 64 6c 69 73 74 20 3a 3a 3d 20 63 6d 64 6c 69  mdlist ::= cmdli
07a0: 73 74 20 53 45 4d 49 20 65 63 6d 64 2e 0a 65 63  st SEMI ecmd..ec
07b0: 6d 64 20 3a 3a 3d 20 65 78 70 6c 61 69 6e 20 63  md ::= explain c
07c0: 6d 64 2e 20 20 7b 73 71 6c 69 74 65 45 78 65 63  md.  {sqliteExec
07d0: 28 70 50 61 72 73 65 29 3b 7d 0a 65 63 6d 64 20  (pParse);}.ecmd 
07e0: 3a 3a 3d 20 63 6d 64 2e 20 20 20 20 20 20 20 20  ::= cmd.        
07f0: 20 20 7b 73 71 6c 69 74 65 45 78 65 63 28 70 50    {sqliteExec(pP
0800: 61 72 73 65 29 3b 7d 0a 65 63 6d 64 20 3a 3a 3d  arse);}.ecmd ::=
0810: 20 2e 0a 65 78 70 6c 61 69 6e 20 3a 3a 3d 20 45   ..explain ::= E
0820: 58 50 4c 41 49 4e 2e 20 20 20 20 7b 70 50 61 72  XPLAIN.    {pPar
0830: 73 65 2d 3e 65 78 70 6c 61 69 6e 20 3d 20 31 3b  se->explain = 1;
0840: 7d 0a 0a 2f 2f 20 54 68 65 20 66 69 72 73 74 20  }..// The first 
0850: 66 6f 72 6d 20 6f 66 20 61 20 63 6f 6d 6d 61 6e  form of a comman
0860: 64 20 69 73 20 61 20 43 52 45 41 54 45 20 54 41  d is a CREATE TA
0870: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2f  BLE statement../
0880: 2f 0a 63 6d 64 20 3a 3a 3d 20 63 72 65 61 74 65  /.cmd ::= create
0890: 5f 74 61 62 6c 65 20 63 72 65 61 74 65 5f 74 61  _table create_ta
08a0: 62 6c 65 5f 61 72 67 73 2e 0a 63 72 65 61 74 65  ble_args..create
08b0: 5f 74 61 62 6c 65 20 3a 3a 3d 20 43 52 45 41 54  _table ::= CREAT
08c0: 45 28 58 29 20 54 41 42 4c 45 20 69 64 28 59 29  E(X) TABLE id(Y)
08d0: 2e 20 20 20 20 7b 73 71 6c 69 74 65 53 74 61 72  .    {sqliteStar
08e0: 74 54 61 62 6c 65 28 70 50 61 72 73 65 2c 26 58  tTable(pParse,&X
08f0: 2c 26 59 29 3b 7d 0a 63 72 65 61 74 65 5f 74 61  ,&Y);}.create_ta
0900: 62 6c 65 5f 61 72 67 73 20 3a 3a 3d 20 4c 50 20  ble_args ::= LP 
0910: 63 6f 6c 75 6d 6e 6c 69 73 74 20 63 6f 6e 73 6c  columnlist consl
0920: 69 73 74 5f 6f 70 74 20 52 50 28 58 29 2e 0a 20  ist_opt RP(X).. 
0930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0950: 20 20 20 20 20 20 20 20 20 20 7b 73 71 6c 69 74            {sqlit
0960: 65 45 6e 64 54 61 62 6c 65 28 70 50 61 72 73 65  eEndTable(pParse
0970: 2c 26 58 29 3b 7d 0a 63 6f 6c 75 6d 6e 6c 69 73  ,&X);}.columnlis
0980: 74 20 3a 3a 3d 20 63 6f 6c 75 6d 6e 6c 69 73 74  t ::= columnlist
0990: 20 43 4f 4d 4d 41 20 63 6f 6c 75 6d 6e 2e 0a 63   COMMA column..c
09a0: 6f 6c 75 6d 6e 6c 69 73 74 20 3a 3a 3d 20 63 6f  olumnlist ::= co
09b0: 6c 75 6d 6e 2e 0a 0a 2f 2f 20 41 62 6f 75 74 20  lumn...// About 
09c0: 74 68 65 20 6f 6e 6c 79 20 69 6e 66 6f 72 6d 61  the only informa
09d0: 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 61 20  tion used for a 
09e0: 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 6e 61  column is the na
09f0: 6d 65 20 6f 66 20 74 68 65 0a 2f 2f 20 63 6f 6c  me of the.// col
0a00: 75 6d 6e 2e 20 20 54 68 65 20 74 79 70 65 20 69  umn.  The type i
0a10: 73 20 61 6c 77 61 79 73 20 6a 75 73 74 20 22 74  s always just "t
0a20: 65 78 74 22 2e 20 20 42 75 74 20 74 68 65 20 63  ext".  But the c
0a30: 6f 64 65 20 77 69 6c 6c 20 61 63 63 65 70 74 0a  ode will accept.
0a40: 2f 2f 20 61 6e 20 65 6c 61 62 6f 72 61 74 65 20  // an elaborate 
0a50: 74 79 70 65 6e 61 6d 65 2e 20 20 50 65 72 68 61  typename.  Perha
0a60: 70 73 20 73 6f 6d 65 64 61 79 20 77 65 27 6c 6c  ps someday we'll
0a70: 20 64 6f 20 73 6f 6d 65 74 68 69 6e 67 20 77 69   do something wi
0a80: 74 68 20 69 74 2e 0a 2f 2f 0a 63 6f 6c 75 6d 6e  th it..//.column
0a90: 20 3a 3a 3d 20 63 6f 6c 75 6d 6e 69 64 20 74 79   ::= columnid ty
0aa0: 70 65 20 63 61 72 67 6c 69 73 74 2e 20 0a 63 6f  pe carglist. .co
0ab0: 6c 75 6d 6e 69 64 20 3a 3a 3d 20 69 64 28 58 29  lumnid ::= id(X)
0ac0: 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0ad0: 20 7b 73 71 6c 69 74 65 41 64 64 43 6f 6c 75 6d   {sqliteAddColum
0ae0: 6e 28 70 50 61 72 73 65 2c 26 58 29 3b 7d 0a 25  n(pParse,&X);}.%
0af0: 74 79 70 65 20 69 64 20 7b 54 6f 6b 65 6e 7d 0a  type id {Token}.
0b00: 69 64 28 41 29 20 3a 3a 3d 20 49 44 28 58 29 2e  id(A) ::= ID(X).
0b10: 20 20 20 20 20 7b 41 20 3d 20 58 3b 7d 0a 69 64       {A = X;}.id
0b20: 28 41 29 20 3a 3a 3d 20 53 54 52 49 4e 47 28 58  (A) ::= STRING(X
0b30: 29 2e 20 7b 41 20 3d 20 58 3b 7d 0a 74 79 70 65  ). {A = X;}.type
0b40: 20 3a 3a 3d 20 74 79 70 65 6e 61 6d 65 2e 0a 74   ::= typename..t
0b50: 79 70 65 20 3a 3a 3d 20 74 79 70 65 6e 61 6d 65  ype ::= typename
0b60: 20 4c 50 20 73 69 67 6e 65 64 20 52 50 2e 0a 74   LP signed RP..t
0b70: 79 70 65 20 3a 3a 3d 20 74 79 70 65 6e 61 6d 65  ype ::= typename
0b80: 20 4c 50 20 73 69 67 6e 65 64 20 43 4f 4d 4d 41   LP signed COMMA
0b90: 20 73 69 67 6e 65 64 20 52 50 2e 0a 74 79 70 65   signed RP..type
0ba0: 6e 61 6d 65 20 3a 3a 3d 20 49 44 2e 0a 74 79 70  name ::= ID..typ
0bb0: 65 6e 61 6d 65 20 3a 3a 3d 20 74 79 70 65 6e 61  ename ::= typena
0bc0: 6d 65 20 49 44 2e 0a 73 69 67 6e 65 64 20 3a 3a  me ID..signed ::
0bd0: 3d 20 49 4e 54 45 47 45 52 2e 0a 73 69 67 6e 65  = INTEGER..signe
0be0: 64 20 3a 3a 3d 20 50 4c 55 53 20 49 4e 54 45 47  d ::= PLUS INTEG
0bf0: 45 52 2e 0a 73 69 67 6e 65 64 20 3a 3a 3d 20 4d  ER..signed ::= M
0c00: 49 4e 55 53 20 49 4e 54 45 47 45 52 2e 0a 63 61  INUS INTEGER..ca
0c10: 72 67 6c 69 73 74 20 3a 3a 3d 20 63 61 72 67 6c  rglist ::= cargl
0c20: 69 73 74 20 63 61 72 67 2e 0a 63 61 72 67 6c 69  ist carg..cargli
0c30: 73 74 20 3a 3a 3d 20 2e 0a 63 61 72 67 20 3a 3a  st ::= ..carg ::
0c40: 3d 20 43 4f 4e 53 54 52 41 49 4e 54 20 49 44 20  = CONSTRAINT ID 
0c50: 63 63 6f 6e 73 2e 0a 63 61 72 67 20 3a 3a 3d 20  ccons..carg ::= 
0c60: 63 63 6f 6e 73 2e 0a 63 61 72 67 20 3a 3a 3d 20  ccons..carg ::= 
0c70: 44 45 46 41 55 4c 54 20 65 78 70 72 2e 0a 0a 2f  DEFAULT expr.../
0c80: 2f 20 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f  / In addition to
0c90: 20 74 68 65 20 74 79 70 65 20 6e 61 6d 65 2c 20   the type name, 
0ca0: 77 65 20 61 6c 73 6f 20 63 61 72 65 20 61 62 6f  we also care abo
0cb0: 75 74 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  ut the primary k
0cc0: 65 79 2e 0a 2f 2f 0a 63 63 6f 6e 73 20 3a 3a 3d  ey..//.ccons ::=
0cd0: 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 63 63 6f 6e 73   NOT NULL..ccons
0ce0: 20 3a 3a 3d 20 50 52 49 4d 41 52 59 20 4b 45 59   ::= PRIMARY KEY
0cf0: 20 73 6f 72 74 6f 72 64 65 72 2e 20 20 0a 20 20   sortorder.  .  
0d00: 20 7b 73 71 6c 69 74 65 43 72 65 61 74 65 49 6e   {sqliteCreateIn
0d10: 64 65 78 28 70 50 61 72 73 65 2c 30 2c 30 2c 30  dex(pParse,0,0,0
0d20: 2c 30 2c 30 29 3b 7d 0a 63 63 6f 6e 73 20 3a 3a  ,0,0);}.ccons ::
0d30: 3d 20 55 4e 49 51 55 45 2e 0a 63 63 6f 6e 73 20  = UNIQUE..ccons 
0d40: 3a 3a 3d 20 43 48 45 43 4b 20 65 78 70 72 2e 0a  ::= CHECK expr..
0d50: 0a 2f 2f 20 46 6f 72 20 74 68 65 20 74 69 6d 65  .// For the time
0d60: 20 62 65 69 6e 67 2c 20 74 68 65 20 6f 6e 6c 79   being, the only
0d70: 20 63 6f 6e 73 74 72 61 69 6e 74 20 77 65 20 63   constraint we c
0d80: 61 72 65 20 61 62 6f 75 74 20 69 73 20 74 68 65  are about is the
0d90: 20 70 72 69 6d 61 72 79 0a 2f 2f 20 6b 65 79 2e   primary.// key.
0da0: 0a 2f 2f 0a 63 6f 6e 73 6c 69 73 74 5f 6f 70 74  .//.conslist_opt
0db0: 20 3a 3a 3d 20 2e 0a 63 6f 6e 73 6c 69 73 74 5f   ::= ..conslist_
0dc0: 6f 70 74 20 3a 3a 3d 20 43 4f 4d 4d 41 20 63 6f  opt ::= COMMA co
0dd0: 6e 73 6c 69 73 74 2e 0a 63 6f 6e 73 6c 69 73 74  nslist..conslist
0de0: 20 3a 3a 3d 20 63 6f 6e 73 6c 69 73 74 20 43 4f   ::= conslist CO
0df0: 4d 4d 41 20 74 63 6f 6e 73 2e 0a 63 6f 6e 73 6c  MMA tcons..consl
0e00: 69 73 74 20 3a 3a 3d 20 74 63 6f 6e 73 2e 0a 74  ist ::= tcons..t
0e10: 63 6f 6e 73 20 3a 3a 3d 20 43 4f 4e 53 54 52 41  cons ::= CONSTRA
0e20: 49 4e 54 20 49 44 20 74 63 6f 6e 73 32 2e 0a 74  INT ID tcons2..t
0e30: 63 6f 6e 73 20 3a 3a 3d 20 74 63 6f 6e 73 32 2e  cons ::= tcons2.
0e40: 0a 74 63 6f 6e 73 32 20 3a 3a 3d 20 50 52 49 4d  .tcons2 ::= PRIM
0e50: 41 52 59 20 4b 45 59 20 4c 50 20 69 64 78 6c 69  ARY KEY LP idxli
0e60: 73 74 28 58 29 20 52 50 2e 20 20 0a 20 20 20 20  st(X) RP.  .    
0e70: 20 20 7b 73 71 6c 69 74 65 43 72 65 61 74 65 49    {sqliteCreateI
0e80: 6e 64 65 78 28 70 50 61 72 73 65 2c 30 2c 30 2c  ndex(pParse,0,0,
0e90: 58 2c 30 2c 30 29 3b 7d 0a 74 63 6f 6e 73 32 20  X,0,0);}.tcons2 
0ea0: 3a 3a 3d 20 55 4e 49 51 55 45 20 4c 50 20 69 64  ::= UNIQUE LP id
0eb0: 6c 69 73 74 20 52 50 2e 0a 74 63 6f 6e 73 32 20  list RP..tcons2 
0ec0: 3a 3a 3d 20 43 48 45 43 4b 20 65 78 70 72 2e 0a  ::= CHECK expr..
0ed0: 69 64 6c 69 73 74 20 3a 3a 3d 20 69 64 6c 69 73  idlist ::= idlis
0ee0: 74 20 43 4f 4d 4d 41 20 69 64 2e 0a 69 64 6c 69  t COMMA id..idli
0ef0: 73 74 20 3a 3a 3d 20 69 64 2e 0a 0a 2f 2f 20 54  st ::= id...// T
0f00: 68 65 20 6e 65 78 74 20 63 6f 6d 6d 61 6e 64 20  he next command 
0f10: 66 6f 72 6d 61 74 20 69 73 20 64 72 6f 70 70 69  format is droppi
0f20: 6e 67 20 74 61 62 6c 65 73 2e 0a 2f 2f 0a 63 6d  ng tables..//.cm
0f30: 64 20 3a 3a 3d 20 44 52 4f 50 20 54 41 42 4c 45  d ::= DROP TABLE
0f40: 20 69 64 28 58 29 2e 20 20 20 20 20 20 20 20 20   id(X).         
0f50: 20 7b 73 71 6c 69 74 65 44 72 6f 70 54 61 62 6c   {sqliteDropTabl
0f60: 65 28 70 50 61 72 73 65 2c 26 58 29 3b 7d 0a 0a  e(pParse,&X);}..
0f70: 2f 2f 20 54 68 65 20 73 65 6c 65 63 74 20 73 74  // The select st
0f80: 61 74 65 6d 65 6e 74 0a 2f 2f 0a 63 6d 64 20 3a  atement.//.cmd :
0f90: 3a 3d 20 73 65 6c 65 63 74 2e 0a 73 65 6c 65 63  := select..selec
0fa0: 74 20 3a 3a 3d 20 53 45 4c 45 43 54 20 73 65 6c  t ::= SELECT sel
0fb0: 63 6f 6c 6c 69 73 74 28 57 29 20 66 72 6f 6d 28  collist(W) from(
0fc0: 58 29 20 77 68 65 72 65 5f 6f 70 74 28 59 29 20  X) where_opt(Y) 
0fd0: 6f 72 64 65 72 62 79 5f 6f 70 74 28 5a 29 2e 0a  orderby_opt(Z)..
0fe0: 20 20 20 20 20 7b 73 71 6c 69 74 65 53 65 6c 65       {sqliteSele
0ff0: 63 74 28 70 50 61 72 73 65 2c 20 57 2c 20 58 2c  ct(pParse, W, X,
1000: 20 59 2c 20 5a 29 3b 7d 0a 73 65 6c 65 63 74 20   Y, Z);}.select 
1010: 3a 3a 3d 20 53 45 4c 45 43 54 20 53 54 41 52 20  ::= SELECT STAR 
1020: 66 72 6f 6d 28 58 29 20 77 68 65 72 65 5f 6f 70  from(X) where_op
1030: 74 28 59 29 20 6f 72 64 65 72 62 79 5f 6f 70 74  t(Y) orderby_opt
1040: 28 5a 29 2e 0a 20 20 20 20 20 7b 73 71 6c 69 74  (Z)..     {sqlit
1050: 65 53 65 6c 65 63 74 28 70 50 61 72 73 65 2c 20  eSelect(pParse, 
1060: 30 2c 20 58 2c 20 59 2c 20 5a 29 3b 7d 0a 0a 25  0, X, Y, Z);}..%
1070: 74 79 70 65 20 73 65 6c 63 6f 6c 6c 69 73 74 20  type selcollist 
1080: 7b 45 78 70 72 4c 69 73 74 2a 7d 0a 25 64 65 73  {ExprList*}.%des
1090: 74 72 75 63 74 6f 72 20 73 65 6c 63 6f 6c 6c 69  tructor selcolli
10a0: 73 74 20 7b 73 71 6c 69 74 65 45 78 70 72 4c 69  st {sqliteExprLi
10b0: 73 74 44 65 6c 65 74 65 28 24 24 29 3b 7d 0a 25  stDelete($$);}.%
10c0: 74 79 70 65 20 73 63 6c 70 20 7b 45 78 70 72 4c  type sclp {ExprL
10d0: 69 73 74 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f  ist*}.%destructo
10e0: 72 20 73 63 6c 70 20 7b 73 71 6c 69 74 65 45 78  r sclp {sqliteEx
10f0: 70 72 4c 69 73 74 44 65 6c 65 74 65 28 24 24 29  prListDelete($$)
1100: 3b 7d 0a 0a 73 63 6c 70 28 41 29 20 3a 3a 3d 20  ;}..sclp(A) ::= 
1110: 73 65 6c 63 6f 6c 6c 69 73 74 28 58 29 20 43 4f  selcollist(X) CO
1120: 4d 4d 41 2e 20 20 20 20 20 20 20 20 20 20 20 20  MMA.            
1130: 20 7b 41 20 3d 20 58 3b 7d 0a 73 63 6c 70 28 41   {A = X;}.sclp(A
1140: 29 20 3a 3a 3d 20 2e 20 20 20 20 20 20 20 20 20  ) ::= .         
1150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1160: 20 20 20 20 20 20 20 7b 41 20 3d 20 30 3b 7d 0a         {A = 0;}.
1170: 73 65 6c 63 6f 6c 6c 69 73 74 28 41 29 20 3a 3a  selcollist(A) ::
1180: 3d 20 73 63 6c 70 28 50 29 20 65 78 70 72 28 58  = sclp(P) expr(X
1190: 29 2e 20 20 20 20 20 20 20 20 20 20 20 7b 41 20  ).           {A 
11a0: 3d 20 73 71 6c 69 74 65 45 78 70 72 4c 69 73 74  = sqliteExprList
11b0: 41 70 70 65 6e 64 28 50 2c 58 2c 30 29 3b 7d 0a  Append(P,X,0);}.
11c0: 73 65 6c 63 6f 6c 6c 69 73 74 28 41 29 20 3a 3a  selcollist(A) ::
11d0: 3d 20 73 63 6c 70 28 50 29 20 65 78 70 72 28 58  = sclp(P) expr(X
11e0: 29 20 41 53 20 49 44 28 59 29 2e 20 20 7b 41 20  ) AS ID(Y).  {A 
11f0: 3d 20 73 71 6c 69 74 65 45 78 70 72 4c 69 73 74  = sqliteExprList
1200: 41 70 70 65 6e 64 28 50 2c 58 2c 26 59 29 3b 7d  Append(P,X,&Y);}
1210: 0a 73 65 6c 63 6f 6c 6c 69 73 74 28 41 29 20 3a  .selcollist(A) :
1220: 3a 3d 20 73 63 6c 70 28 50 29 20 65 78 70 72 28  := sclp(P) expr(
1230: 58 29 20 41 53 20 53 54 52 49 4e 47 28 59 29 2e  X) AS STRING(Y).
1240: 0a 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78  .  {A = sqliteEx
1250: 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 2c 58  prListAppend(P,X
1260: 2c 26 59 29 3b 7d 0a 0a 25 74 79 70 65 20 73 65  ,&Y);}..%type se
1270: 6c 74 61 62 6c 69 73 74 20 7b 49 64 4c 69 73 74  ltablist {IdList
1280: 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f 72 20 73  *}.%destructor s
1290: 65 6c 74 61 62 6c 69 73 74 20 7b 73 71 6c 69 74  eltablist {sqlit
12a0: 65 49 64 4c 69 73 74 44 65 6c 65 74 65 28 24 24  eIdListDelete($$
12b0: 29 3b 7d 0a 25 74 79 70 65 20 73 74 6c 5f 70 72  );}.%type stl_pr
12c0: 65 66 69 78 20 7b 49 64 4c 69 73 74 2a 7d 0a 25  efix {IdList*}.%
12d0: 64 65 73 74 72 75 63 74 6f 72 20 73 74 6c 5f 70  destructor stl_p
12e0: 72 65 66 69 78 20 7b 73 71 6c 69 74 65 49 64 4c  refix {sqliteIdL
12f0: 69 73 74 44 65 6c 65 74 65 28 24 24 29 3b 7d 0a  istDelete($$);}.
1300: 25 74 79 70 65 20 66 72 6f 6d 20 7b 49 64 4c 69  %type from {IdLi
1310: 73 74 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f 72  st*}.%destructor
1320: 20 66 72 6f 6d 20 7b 73 71 6c 69 74 65 49 64 4c   from {sqliteIdL
1330: 69 73 74 44 65 6c 65 74 65 28 24 24 29 3b 7d 0a  istDelete($$);}.
1340: 0a 66 72 6f 6d 28 41 29 20 3a 3a 3d 20 46 52 4f  .from(A) ::= FRO
1350: 4d 20 73 65 6c 74 61 62 6c 69 73 74 28 58 29 2e  M seltablist(X).
1360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1370: 41 20 3d 20 58 3b 7d 0a 73 74 6c 5f 70 72 65 66  A = X;}.stl_pref
1380: 69 78 28 41 29 20 3a 3a 3d 20 73 65 6c 74 61 62  ix(A) ::= seltab
1390: 6c 69 73 74 28 58 29 20 43 4f 4d 4d 41 2e 20 20  list(X) COMMA.  
13a0: 20 20 20 20 20 20 7b 41 20 3d 20 58 3b 7d 0a 73        {A = X;}.s
13b0: 74 6c 5f 70 72 65 66 69 78 28 41 29 20 3a 3a 3d  tl_prefix(A) ::=
13c0: 20 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
13d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 41 20               {A 
13e0: 3d 20 30 3b 7d 0a 73 65 6c 74 61 62 6c 69 73 74  = 0;}.seltablist
13f0: 28 41 29 20 3a 3a 3d 20 73 74 6c 5f 70 72 65 66  (A) ::= stl_pref
1400: 69 78 28 58 29 20 69 64 28 59 29 2e 20 20 20 20  ix(X) id(Y).    
1410: 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 49      {A = sqliteI
1420: 64 4c 69 73 74 41 70 70 65 6e 64 28 58 2c 26 59  dListAppend(X,&Y
1430: 29 3b 7d 0a 73 65 6c 74 61 62 6c 69 73 74 28 41  );}.seltablist(A
1440: 29 20 3a 3a 3d 20 73 74 6c 5f 70 72 65 66 69 78  ) ::= stl_prefix
1450: 28 58 29 20 69 64 28 59 29 20 41 53 20 69 64 28  (X) id(Y) AS id(
1460: 5a 29 2e 0a 20 20 20 7b 41 20 3d 20 73 71 6c 69  Z)..   {A = sqli
1470: 74 65 49 64 4c 69 73 74 41 70 70 65 6e 64 28 58  teIdListAppend(X
1480: 2c 26 59 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ,&Y);.    sqlite
1490: 49 64 4c 69 73 74 41 64 64 41 6c 69 61 73 28 41  IdListAddAlias(A
14a0: 2c 26 5a 29 3b 7d 0a 0a 25 74 79 70 65 20 6f 72  ,&Z);}..%type or
14b0: 64 65 72 62 79 5f 6f 70 74 20 7b 45 78 70 72 4c  derby_opt {ExprL
14c0: 69 73 74 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f  ist*}.%destructo
14d0: 72 20 6f 72 64 65 72 62 79 5f 6f 70 74 20 7b 73  r orderby_opt {s
14e0: 71 6c 69 74 65 45 78 70 72 4c 69 73 74 44 65 6c  qliteExprListDel
14f0: 65 74 65 28 24 24 29 3b 7d 0a 25 74 79 70 65 20  ete($$);}.%type 
1500: 73 6f 72 74 6c 69 73 74 20 7b 45 78 70 72 4c 69  sortlist {ExprLi
1510: 73 74 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f 72  st*}.%destructor
1520: 20 73 6f 72 74 6c 69 73 74 20 7b 73 71 6c 69 74   sortlist {sqlit
1530: 65 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  eExprListDelete(
1540: 24 24 29 3b 7d 0a 25 74 79 70 65 20 73 6f 72 74  $$);}.%type sort
1550: 69 74 65 6d 20 7b 45 78 70 72 2a 7d 0a 25 64 65  item {Expr*}.%de
1560: 73 74 72 75 63 74 6f 72 20 73 6f 72 74 69 74 65  structor sortite
1570: 6d 20 7b 73 71 6c 69 74 65 45 78 70 72 44 65 6c  m {sqliteExprDel
1580: 65 74 65 28 24 24 29 3b 7d 0a 0a 6f 72 64 65 72  ete($$);}..order
1590: 62 79 5f 6f 70 74 28 41 29 20 3a 3a 3d 20 2e 20  by_opt(A) ::= . 
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b0: 20 20 20 20 20 20 20 20 20 7b 41 20 3d 20 30 3b           {A = 0;
15c0: 7d 0a 6f 72 64 65 72 62 79 5f 6f 70 74 28 41 29  }.orderby_opt(A)
15d0: 20 3a 3a 3d 20 4f 52 44 45 52 20 42 59 20 73 6f   ::= ORDER BY so
15e0: 72 74 6c 69 73 74 28 58 29 2e 20 20 20 20 20 20  rtlist(X).      
15f0: 7b 41 20 3d 20 58 3b 7d 0a 73 6f 72 74 6c 69 73  {A = X;}.sortlis
1600: 74 28 41 29 20 3a 3a 3d 20 73 6f 72 74 6c 69 73  t(A) ::= sortlis
1610: 74 28 58 29 20 43 4f 4d 4d 41 20 73 6f 72 74 69  t(X) COMMA sorti
1620: 74 65 6d 28 59 29 20 73 6f 72 74 6f 72 64 65 72  tem(Y) sortorder
1630: 28 5a 29 2e 20 20 0a 20 20 7b 0a 20 20 20 20 41  (Z).  .  {.    A
1640: 20 3d 20 73 71 6c 69 74 65 45 78 70 72 4c 69 73   = sqliteExprLis
1650: 74 41 70 70 65 6e 64 28 58 2c 59 2c 30 29 3b 0a  tAppend(X,Y,0);.
1660: 20 20 20 20 41 2d 3e 61 5b 41 2d 3e 6e 45 78 70      A->a[A->nExp
1670: 72 2d 31 5d 2e 69 64 78 20 3d 20 5a 3b 0a 20 20  r-1].idx = Z;.  
1680: 7d 0a 73 6f 72 74 6c 69 73 74 28 41 29 20 3a 3a  }.sortlist(A) ::
1690: 3d 20 73 6f 72 74 69 74 65 6d 28 59 29 20 73 6f  = sortitem(Y) so
16a0: 72 74 6f 72 64 65 72 28 5a 29 2e 0a 20 20 7b 0a  rtorder(Z)..  {.
16b0: 20 20 20 20 41 20 3d 20 73 71 6c 69 74 65 45 78      A = sqliteEx
16c0: 70 72 4c 69 73 74 41 70 70 65 6e 64 28 30 2c 59  prListAppend(0,Y
16d0: 2c 30 29 3b 0a 20 20 20 20 41 2d 3e 61 5b 30 5d  ,0);.    A->a[0]
16e0: 2e 69 64 78 20 3d 20 5a 3b 0a 20 20 7d 0a 73 6f  .idx = Z;.  }.so
16f0: 72 74 69 74 65 6d 28 41 29 20 3a 3a 3d 20 65 78  rtitem(A) ::= ex
1700: 70 72 28 58 29 2e 20 20 20 7b 41 20 3d 20 58 3b  pr(X).   {A = X;
1710: 7d 0a 0a 25 74 79 70 65 20 73 6f 72 74 6f 72 64  }..%type sortord
1720: 65 72 20 7b 69 6e 74 7d 0a 0a 73 6f 72 74 6f 72  er {int}..sortor
1730: 64 65 72 28 41 29 20 3a 3a 3d 20 41 53 43 2e 20  der(A) ::= ASC. 
1740: 20 20 20 20 20 7b 41 20 3d 20 30 3b 7d 0a 73 6f       {A = 0;}.so
1750: 72 74 6f 72 64 65 72 28 41 29 20 3a 3a 3d 20 44  rtorder(A) ::= D
1760: 45 53 43 2e 20 20 20 20 20 7b 41 20 3d 20 31 3b  ESC.     {A = 1;
1770: 7d 0a 73 6f 72 74 6f 72 64 65 72 28 41 29 20 3a  }.sortorder(A) :
1780: 3a 3d 20 2e 20 20 20 20 20 20 20 20 20 7b 41 20  := .         {A 
1790: 3d 20 30 3b 7d 0a 0a 63 6d 64 20 3a 3a 3d 20 44  = 0;}..cmd ::= D
17a0: 45 4c 45 54 45 20 46 52 4f 4d 20 49 44 28 58 29  ELETE FROM ID(X)
17b0: 20 77 68 65 72 65 5f 6f 70 74 28 59 29 2e 0a 20   where_opt(Y).. 
17c0: 20 20 20 7b 73 71 6c 69 74 65 44 65 6c 65 74 65     {sqliteDelete
17d0: 46 72 6f 6d 28 70 50 61 72 73 65 2c 20 26 58 2c  From(pParse, &X,
17e0: 20 59 29 3b 7d 0a 0a 25 74 79 70 65 20 77 68 65   Y);}..%type whe
17f0: 72 65 5f 6f 70 74 20 7b 45 78 70 72 2a 7d 0a 25  re_opt {Expr*}.%
1800: 64 65 73 74 72 75 63 74 6f 72 20 77 68 65 72 65  destructor where
1810: 5f 6f 70 74 20 7b 73 71 6c 69 74 65 45 78 70 72  _opt {sqliteExpr
1820: 44 65 6c 65 74 65 28 24 24 29 3b 7d 0a 0a 77 68  Delete($$);}..wh
1830: 65 72 65 5f 6f 70 74 28 41 29 20 3a 3a 3d 20 2e  ere_opt(A) ::= .
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 20 7b 41 20 3d 20 30 3b 7d 0a 77 68 65      {A = 0;}.whe
1860: 72 65 5f 6f 70 74 28 41 29 20 3a 3a 3d 20 57 48  re_opt(A) ::= WH
1870: 45 52 45 20 65 78 70 72 28 58 29 2e 20 20 20 20  ERE expr(X).    
1880: 20 20 20 7b 41 20 3d 20 58 3b 7d 0a 0a 25 74 79     {A = X;}..%ty
1890: 70 65 20 73 65 74 6c 69 73 74 20 7b 45 78 70 72  pe setlist {Expr
18a0: 4c 69 73 74 2a 7d 0a 25 64 65 73 74 72 75 63 74  List*}.%destruct
18b0: 6f 72 20 73 65 74 6c 69 73 74 20 7b 73 71 6c 69  or setlist {sqli
18c0: 74 65 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65  teExprListDelete
18d0: 28 24 24 29 3b 7d 0a 0a 63 6d 64 20 3a 3a 3d 20  ($$);}..cmd ::= 
18e0: 55 50 44 41 54 45 20 49 44 28 58 29 20 53 45 54  UPDATE ID(X) SET
18f0: 20 73 65 74 6c 69 73 74 28 59 29 20 77 68 65 72   setlist(Y) wher
1900: 65 5f 6f 70 74 28 5a 29 2e 0a 20 20 20 20 7b 73  e_opt(Z)..    {s
1910: 71 6c 69 74 65 55 70 64 61 74 65 28 70 50 61 72  qliteUpdate(pPar
1920: 73 65 2c 26 58 2c 59 2c 5a 29 3b 7d 0a 0a 73 65  se,&X,Y,Z);}..se
1930: 74 6c 69 73 74 28 41 29 20 3a 3a 3d 20 49 44 28  tlist(A) ::= ID(
1940: 58 29 20 45 51 20 65 78 70 72 28 59 29 20 43 4f  X) EQ expr(Y) CO
1950: 4d 4d 41 20 73 65 74 6c 69 73 74 28 5a 29 2e 0a  MMA setlist(Z)..
1960: 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45      {A = sqliteE
1970: 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 5a 2c  xprListAppend(Z,
1980: 59 2c 26 58 29 3b 7d 0a 73 65 74 6c 69 73 74 28  Y,&X);}.setlist(
1990: 41 29 20 3a 3a 3d 20 49 44 28 58 29 20 45 51 20  A) ::= ID(X) EQ 
19a0: 65 78 70 72 28 59 29 2e 20 20 20 7b 41 20 3d 20  expr(Y).   {A = 
19b0: 73 71 6c 69 74 65 45 78 70 72 4c 69 73 74 41 70  sqliteExprListAp
19c0: 70 65 6e 64 28 30 2c 59 2c 26 58 29 3b 7d 0a 0a  pend(0,Y,&X);}..
19d0: 63 6d 64 20 3a 3a 3d 20 49 4e 53 45 52 54 20 49  cmd ::= INSERT I
19e0: 4e 54 4f 20 49 44 28 58 29 20 66 69 65 6c 64 6c  NTO ID(X) fieldl
19f0: 69 73 74 5f 6f 70 74 28 46 29 20 56 41 4c 55 45  ist_opt(F) VALUE
1a00: 53 20 4c 50 20 69 74 65 6d 6c 69 73 74 28 59 29  S LP itemlist(Y)
1a10: 20 52 50 2e 0a 20 20 20 20 20 20 20 20 20 20 20   RP..           
1a20: 20 20 20 20 7b 73 71 6c 69 74 65 49 6e 73 65 72      {sqliteInser
1a30: 74 28 70 50 61 72 73 65 2c 20 26 58 2c 20 59 2c  t(pParse, &X, Y,
1a40: 20 46 29 3b 7d 0a 0a 0a 25 74 79 70 65 20 69 74   F);}...%type it
1a50: 65 6d 6c 69 73 74 20 7b 45 78 70 72 4c 69 73 74  emlist {ExprList
1a60: 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f 72 20 69  *}.%destructor i
1a70: 74 65 6d 6c 69 73 74 20 7b 73 71 6c 69 74 65 45  temlist {sqliteE
1a80: 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 24 24  xprListDelete($$
1a90: 29 3b 7d 0a 25 74 79 70 65 20 69 74 65 6d 20 7b  );}.%type item {
1aa0: 45 78 70 72 2a 7d 0a 25 64 65 73 74 72 75 63 74  Expr*}.%destruct
1ab0: 6f 72 20 69 74 65 6d 20 7b 73 71 6c 69 74 65 45  or item {sqliteE
1ac0: 78 70 72 44 65 6c 65 74 65 28 24 24 29 3b 7d 0a  xprDelete($$);}.
1ad0: 0a 69 74 65 6d 6c 69 73 74 28 41 29 20 3a 3a 3d  .itemlist(A) ::=
1ae0: 20 69 74 65 6d 6c 69 73 74 28 58 29 20 43 4f 4d   itemlist(X) COM
1af0: 4d 41 20 69 74 65 6d 28 59 29 2e 20 20 7b 41 20  MA item(Y).  {A 
1b00: 3d 20 73 71 6c 69 74 65 45 78 70 72 4c 69 73 74  = sqliteExprList
1b10: 41 70 70 65 6e 64 28 58 2c 59 2c 30 29 3b 7d 0a  Append(X,Y,0);}.
1b20: 69 74 65 6d 6c 69 73 74 28 41 29 20 3a 3a 3d 20  itemlist(A) ::= 
1b30: 69 74 65 6d 28 58 29 2e 20 20 20 20 20 7b 41 20  item(X).     {A 
1b40: 3d 20 73 71 6c 69 74 65 45 78 70 72 4c 69 73 74  = sqliteExprList
1b50: 41 70 70 65 6e 64 28 30 2c 58 2c 30 29 3b 7d 0a  Append(0,X,0);}.
1b60: 69 74 65 6d 28 41 29 20 3a 3a 3d 20 49 4e 54 45  item(A) ::= INTE
1b70: 47 45 52 28 58 29 2e 20 20 20 20 20 20 7b 41 20  GER(X).      {A 
1b80: 3d 20 73 71 6c 69 74 65 45 78 70 72 28 54 4b 5f  = sqliteExpr(TK_
1b90: 49 4e 54 45 47 45 52 2c 20 30 2c 20 30 2c 20 26  INTEGER, 0, 0, &
1ba0: 58 29 3b 7d 0a 69 74 65 6d 28 41 29 20 3a 3a 3d  X);}.item(A) ::=
1bb0: 20 46 4c 4f 41 54 28 58 29 2e 20 20 20 20 20 20   FLOAT(X).      
1bc0: 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70    {A = sqliteExp
1bd0: 72 28 54 4b 5f 46 4c 4f 41 54 2c 20 30 2c 20 30  r(TK_FLOAT, 0, 0
1be0: 2c 20 26 58 29 3b 7d 0a 69 74 65 6d 28 41 29 20  , &X);}.item(A) 
1bf0: 3a 3a 3d 20 53 54 52 49 4e 47 28 58 29 2e 20 20  ::= STRING(X).  
1c00: 20 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65       {A = sqlite
1c10: 45 78 70 72 28 54 4b 5f 53 54 52 49 4e 47 2c 20  Expr(TK_STRING, 
1c20: 30 2c 20 30 2c 20 26 58 29 3b 7d 0a 0a 25 74 79  0, 0, &X);}..%ty
1c30: 70 65 20 66 69 65 6c 64 6c 69 73 74 5f 6f 70 74  pe fieldlist_opt
1c40: 20 7b 49 64 4c 69 73 74 2a 7d 0a 25 64 65 73 74   {IdList*}.%dest
1c50: 72 75 63 74 6f 72 20 66 69 65 6c 64 6c 69 73 74  ructor fieldlist
1c60: 5f 6f 70 74 20 7b 73 71 6c 69 74 65 49 64 4c 69  _opt {sqliteIdLi
1c70: 73 74 44 65 6c 65 74 65 28 24 24 29 3b 7d 0a 25  stDelete($$);}.%
1c80: 74 79 70 65 20 66 69 65 6c 64 6c 69 73 74 20 7b  type fieldlist {
1c90: 49 64 4c 69 73 74 2a 7d 0a 25 64 65 73 74 72 75  IdList*}.%destru
1ca0: 63 74 6f 72 20 66 69 65 6c 64 6c 69 73 74 20 7b  ctor fieldlist {
1cb0: 73 71 6c 69 74 65 49 64 4c 69 73 74 44 65 6c 65  sqliteIdListDele
1cc0: 74 65 28 24 24 29 3b 7d 0a 0a 66 69 65 6c 64 6c  te($$);}..fieldl
1cd0: 69 73 74 5f 6f 70 74 28 41 29 20 3a 3a 3d 20 2e  ist_opt(A) ::= .
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf0: 20 20 20 20 7b 41 20 3d 20 30 3b 7d 0a 66 69 65      {A = 0;}.fie
1d00: 6c 64 6c 69 73 74 5f 6f 70 74 28 41 29 20 3a 3a  ldlist_opt(A) ::
1d10: 3d 20 4c 50 20 66 69 65 6c 64 6c 69 73 74 28 58  = LP fieldlist(X
1d20: 29 20 52 50 2e 20 20 7b 41 20 3d 20 58 3b 7d 0a  ) RP.  {A = X;}.
1d30: 66 69 65 6c 64 6c 69 73 74 28 41 29 20 3a 3a 3d  fieldlist(A) ::=
1d40: 20 66 69 65 6c 64 6c 69 73 74 28 58 29 20 43 4f   fieldlist(X) CO
1d50: 4d 4d 41 20 49 44 28 59 29 2e 20 7b 41 20 3d 20  MMA ID(Y). {A = 
1d60: 73 71 6c 69 74 65 49 64 4c 69 73 74 41 70 70 65  sqliteIdListAppe
1d70: 6e 64 28 58 2c 26 59 29 3b 7d 0a 66 69 65 6c 64  nd(X,&Y);}.field
1d80: 6c 69 73 74 28 41 29 20 3a 3a 3d 20 49 44 28 59  list(A) ::= ID(Y
1d90: 29 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
1da0: 20 20 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74        {A = sqlit
1db0: 65 49 64 4c 69 73 74 41 70 70 65 6e 64 28 30 2c  eIdListAppend(0,
1dc0: 26 59 29 3b 7d 0a 0a 25 6c 65 66 74 20 4f 52 2e  &Y);}..%left OR.
1dd0: 0a 25 6c 65 66 74 20 41 4e 44 2e 0a 25 6c 65 66  .%left AND..%lef
1de0: 74 20 45 51 20 4e 45 20 49 53 4e 55 4c 4c 20 4e  t EQ NE ISNULL N
1df0: 4f 54 4e 55 4c 4c 20 49 53 20 4c 49 4b 45 20 47  OTNULL IS LIKE G
1e00: 4c 4f 42 2e 0a 25 6c 65 66 74 20 47 54 20 47 45  LOB..%left GT GE
1e10: 20 4c 54 20 4c 45 2e 0a 25 6c 65 66 74 20 50 4c   LT LE..%left PL
1e20: 55 53 20 4d 49 4e 55 53 2e 0a 25 6c 65 66 74 20  US MINUS..%left 
1e30: 53 54 41 52 20 53 4c 41 53 48 20 50 45 52 43 45  STAR SLASH PERCE
1e40: 4e 54 2e 0a 25 72 69 67 68 74 20 4e 4f 54 2e 0a  NT..%right NOT..
1e50: 0a 25 74 79 70 65 20 65 78 70 72 20 7b 45 78 70  .%type expr {Exp
1e60: 72 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f 72 20  r*}.%destructor 
1e70: 65 78 70 72 20 7b 73 71 6c 69 74 65 45 78 70 72  expr {sqliteExpr
1e80: 44 65 6c 65 74 65 28 24 24 29 3b 7d 0a 0a 65 78  Delete($$);}..ex
1e90: 70 72 28 41 29 20 3a 3a 3d 20 4c 50 20 65 78 70  pr(A) ::= LP exp
1ea0: 72 28 58 29 20 52 50 2e 20 20 20 7b 41 20 3d 20  r(X) RP.   {A = 
1eb0: 58 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20  X;}.expr(A) ::= 
1ec0: 49 44 28 58 29 2e 20 20 20 20 20 20 20 20 20 20  ID(X).          
1ed0: 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72   {A = sqliteExpr
1ee0: 28 54 4b 5f 49 44 2c 20 30 2c 20 30 2c 20 26 58  (TK_ID, 0, 0, &X
1ef0: 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20  );}.expr(A) ::= 
1f00: 4e 55 4c 4c 2e 20 20 20 20 20 20 20 20 20 20 20  NULL.           
1f10: 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72   {A = sqliteExpr
1f20: 28 54 4b 5f 4e 55 4c 4c 2c 20 30 2c 20 30 2c 20  (TK_NULL, 0, 0, 
1f30: 30 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d  0);}.expr(A) ::=
1f40: 20 49 44 28 58 29 20 44 4f 54 20 49 44 28 59 29   ID(X) DOT ID(Y)
1f50: 2e 20 7b 45 78 70 72 20 2a 74 65 6d 70 31 20 3d  . {Expr *temp1 =
1f60: 20 73 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 49   sqliteExpr(TK_I
1f70: 44 2c 20 30 2c 20 30 2c 20 26 58 29 3b 0a 20 20  D, 0, 0, &X);.  
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
1fa0: 20 2a 74 65 6d 70 32 20 3d 20 73 71 6c 69 74 65   *temp2 = sqlite
1fb0: 45 78 70 72 28 54 4b 5f 49 44 2c 20 30 2c 20 30  Expr(TK_ID, 0, 0
1fc0: 2c 20 26 59 29 3b 0a 20 20 20 20 20 20 20 20 20  , &Y);.         
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe0: 20 20 20 20 20 41 20 3d 20 73 71 6c 69 74 65 45       A = sqliteE
1ff0: 78 70 72 28 54 4b 5f 44 4f 54 2c 20 74 65 6d 70  xpr(TK_DOT, temp
2000: 31 2c 20 74 65 6d 70 32 2c 20 30 29 3b 7d 0a 65  1, temp2, 0);}.e
2010: 78 70 72 28 41 29 20 3a 3a 3d 20 49 4e 54 45 47  xpr(A) ::= INTEG
2020: 45 52 28 58 29 2e 20 20 20 20 20 20 7b 41 20 3d  ER(X).      {A =
2030: 20 73 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 49   sqliteExpr(TK_I
2040: 4e 54 45 47 45 52 2c 20 30 2c 20 30 2c 20 26 58  NTEGER, 0, 0, &X
2050: 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20  );}.expr(A) ::= 
2060: 46 4c 4f 41 54 28 58 29 2e 20 20 20 20 20 20 20  FLOAT(X).       
2070: 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72   {A = sqliteExpr
2080: 28 54 4b 5f 46 4c 4f 41 54 2c 20 30 2c 20 30 2c  (TK_FLOAT, 0, 0,
2090: 20 26 58 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a   &X);}.expr(A) :
20a0: 3a 3d 20 53 54 52 49 4e 47 28 58 29 2e 20 20 20  := STRING(X).   
20b0: 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45      {A = sqliteE
20c0: 78 70 72 28 54 4b 5f 53 54 52 49 4e 47 2c 20 30  xpr(TK_STRING, 0
20d0: 2c 20 30 2c 20 26 58 29 3b 7d 0a 65 78 70 72 28  , 0, &X);}.expr(
20e0: 41 29 20 3a 3a 3d 20 49 44 28 58 29 20 4c 50 20  A) ::= ID(X) LP 
20f0: 65 78 70 72 6c 69 73 74 28 59 29 20 52 50 2e 20  exprlist(Y) RP. 
2100: 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72   {A = sqliteExpr
2110: 46 75 6e 63 74 69 6f 6e 28 59 2c 20 26 58 29 3b  Function(Y, &X);
2120: 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20 49 44  }.expr(A) ::= ID
2130: 28 58 29 20 4c 50 20 53 54 41 52 20 52 50 2e 20  (X) LP STAR RP. 
2140: 20 20 20 20 20 20 20 20 7b 41 20 3d 20 73 71 6c          {A = sql
2150: 69 74 65 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  iteExprFunction(
2160: 30 2c 20 26 58 29 3b 7d 0a 65 78 70 72 28 41 29  0, &X);}.expr(A)
2170: 20 3a 3a 3d 20 65 78 70 72 28 58 29 20 41 4e 44   ::= expr(X) AND
2180: 20 65 78 70 72 28 59 29 2e 20 20 20 7b 41 20 3d   expr(Y).   {A =
2190: 20 73 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 41   sqliteExpr(TK_A
21a0: 4e 44 2c 20 58 2c 20 59 2c 20 30 29 3b 7d 0a 65  ND, X, Y, 0);}.e
21b0: 78 70 72 28 41 29 20 3a 3a 3d 20 65 78 70 72 28  xpr(A) ::= expr(
21c0: 58 29 20 4f 52 20 65 78 70 72 28 59 29 2e 20 20  X) OR expr(Y).  
21d0: 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70    {A = sqliteExp
21e0: 72 28 54 4b 5f 4f 52 2c 20 58 2c 20 59 2c 20 30  r(TK_OR, X, Y, 0
21f0: 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20  );}.expr(A) ::= 
2200: 65 78 70 72 28 58 29 20 4c 54 20 65 78 70 72 28  expr(X) LT expr(
2210: 59 29 2e 20 20 20 20 7b 41 20 3d 20 73 71 6c 69  Y).    {A = sqli
2220: 74 65 45 78 70 72 28 54 4b 5f 4c 54 2c 20 58 2c  teExpr(TK_LT, X,
2230: 20 59 2c 20 30 29 3b 7d 0a 65 78 70 72 28 41 29   Y, 0);}.expr(A)
2240: 20 3a 3a 3d 20 65 78 70 72 28 58 29 20 47 54 20   ::= expr(X) GT 
2250: 65 78 70 72 28 59 29 2e 20 20 20 20 7b 41 20 3d  expr(Y).    {A =
2260: 20 73 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 47   sqliteExpr(TK_G
2270: 54 2c 20 58 2c 20 59 2c 20 30 29 3b 7d 0a 65 78  T, X, Y, 0);}.ex
2280: 70 72 28 41 29 20 3a 3a 3d 20 65 78 70 72 28 58  pr(A) ::= expr(X
2290: 29 20 4c 45 20 65 78 70 72 28 59 29 2e 20 20 20  ) LE expr(Y).   
22a0: 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72   {A = sqliteExpr
22b0: 28 54 4b 5f 4c 45 2c 20 58 2c 20 59 2c 20 30 29  (TK_LE, X, Y, 0)
22c0: 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20 65  ;}.expr(A) ::= e
22d0: 78 70 72 28 58 29 20 47 45 20 65 78 70 72 28 59  xpr(X) GE expr(Y
22e0: 29 2e 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74  ).    {A = sqlit
22f0: 65 45 78 70 72 28 54 4b 5f 47 45 2c 20 58 2c 20  eExpr(TK_GE, X, 
2300: 59 2c 20 30 29 3b 7d 0a 65 78 70 72 28 41 29 20  Y, 0);}.expr(A) 
2310: 3a 3a 3d 20 65 78 70 72 28 58 29 20 4e 45 20 65  ::= expr(X) NE e
2320: 78 70 72 28 59 29 2e 20 20 20 20 7b 41 20 3d 20  xpr(Y).    {A = 
2330: 73 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 4e 45  sqliteExpr(TK_NE
2340: 2c 20 58 2c 20 59 2c 20 30 29 3b 7d 0a 65 78 70  , X, Y, 0);}.exp
2350: 72 28 41 29 20 3a 3a 3d 20 65 78 70 72 28 58 29  r(A) ::= expr(X)
2360: 20 45 51 20 65 78 70 72 28 59 29 2e 20 20 20 20   EQ expr(Y).    
2370: 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28  {A = sqliteExpr(
2380: 54 4b 5f 45 51 2c 20 58 2c 20 59 2c 20 30 29 3b  TK_EQ, X, Y, 0);
2390: 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20 65 78  }.expr(A) ::= ex
23a0: 70 72 28 58 29 20 4c 49 4b 45 20 65 78 70 72 28  pr(X) LIKE expr(
23b0: 59 29 2e 20 20 7b 41 20 3d 20 73 71 6c 69 74 65  Y).  {A = sqlite
23c0: 45 78 70 72 28 54 4b 5f 4c 49 4b 45 2c 20 58 2c  Expr(TK_LIKE, X,
23d0: 20 59 2c 20 30 29 3b 7d 0a 65 78 70 72 28 41 29   Y, 0);}.expr(A)
23e0: 20 3a 3a 3d 20 65 78 70 72 28 58 29 20 47 4c 4f   ::= expr(X) GLO
23f0: 42 20 65 78 70 72 28 59 29 2e 20 20 20 7b 41 20  B expr(Y).   {A 
2400: 3d 20 73 71 6c 69 74 65 45 78 70 72 28 54 4b 5f  = sqliteExpr(TK_
2410: 47 4c 4f 42 2c 58 2c 59 2c 30 29 3b 7d 0a 2f 2f  GLOB,X,Y,0);}.//
2420: 20 65 78 70 72 28 41 29 20 3a 3a 3d 20 65 78 70   expr(A) ::= exp
2430: 72 28 58 29 20 49 53 20 65 78 70 72 28 59 29 2e  r(X) IS expr(Y).
2440: 20 20 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45      {A = sqliteE
2450: 78 70 72 28 54 4b 5f 45 51 2c 20 58 2c 20 59 2c  xpr(TK_EQ, X, Y,
2460: 20 30 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a   0);}.expr(A) ::
2470: 3d 20 65 78 70 72 28 58 29 20 50 4c 55 53 20 65  = expr(X) PLUS e
2480: 78 70 72 28 59 29 2e 20 20 7b 41 20 3d 20 73 71  xpr(Y).  {A = sq
2490: 6c 69 74 65 45 78 70 72 28 54 4b 5f 50 4c 55 53  liteExpr(TK_PLUS
24a0: 2c 20 58 2c 20 59 2c 20 30 29 3b 7d 0a 65 78 70  , X, Y, 0);}.exp
24b0: 72 28 41 29 20 3a 3a 3d 20 65 78 70 72 28 58 29  r(A) ::= expr(X)
24c0: 20 4d 49 4e 55 53 20 65 78 70 72 28 59 29 2e 20   MINUS expr(Y). 
24d0: 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28  {A = sqliteExpr(
24e0: 54 4b 5f 4d 49 4e 55 53 2c 20 58 2c 20 59 2c 20  TK_MINUS, X, Y, 
24f0: 30 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d  0);}.expr(A) ::=
2500: 20 65 78 70 72 28 58 29 20 53 54 41 52 20 65 78   expr(X) STAR ex
2510: 70 72 28 59 29 2e 20 20 7b 41 20 3d 20 73 71 6c  pr(Y).  {A = sql
2520: 69 74 65 45 78 70 72 28 54 4b 5f 53 54 41 52 2c  iteExpr(TK_STAR,
2530: 20 58 2c 20 59 2c 20 30 29 3b 7d 0a 65 78 70 72   X, Y, 0);}.expr
2540: 28 41 29 20 3a 3a 3d 20 65 78 70 72 28 58 29 20  (A) ::= expr(X) 
2550: 53 4c 41 53 48 20 65 78 70 72 28 59 29 2e 20 7b  SLASH expr(Y). {
2560: 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28 54  A = sqliteExpr(T
2570: 4b 5f 53 4c 41 53 48 2c 20 58 2c 20 59 2c 20 30  K_SLASH, X, Y, 0
2580: 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a 3d 20  );}.expr(A) ::= 
2590: 65 78 70 72 28 58 29 20 49 53 4e 55 4c 4c 2e 20  expr(X) ISNULL. 
25a0: 20 20 20 20 20 20 20 7b 41 20 3d 20 73 71 6c 69         {A = sqli
25b0: 74 65 45 78 70 72 28 54 4b 5f 49 53 4e 55 4c 4c  teExpr(TK_ISNULL
25c0: 2c 20 58 2c 20 30 2c 20 30 29 3b 7d 0a 65 78 70  , X, 0, 0);}.exp
25d0: 72 28 41 29 20 3a 3a 3d 20 65 78 70 72 28 58 29  r(A) ::= expr(X)
25e0: 20 4e 4f 54 4e 55 4c 4c 2e 20 20 20 20 20 20 20   NOTNULL.       
25f0: 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28  {A = sqliteExpr(
2600: 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 58 2c 20 30  TK_NOTNULL, X, 0
2610: 2c 20 30 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a  , 0);}.expr(A) :
2620: 3a 3d 20 4e 4f 54 20 65 78 70 72 28 58 29 2e 20  := NOT expr(X). 
2630: 20 20 20 20 20 20 20 20 20 20 7b 41 20 3d 20 73            {A = s
2640: 71 6c 69 74 65 45 78 70 72 28 54 4b 5f 4e 4f 54  qliteExpr(TK_NOT
2650: 2c 20 58 2c 20 30 2c 20 30 29 3b 7d 0a 65 78 70  , X, 0, 0);}.exp
2660: 72 28 41 29 20 3a 3a 3d 20 4d 49 4e 55 53 20 65  r(A) ::= MINUS e
2670: 78 70 72 28 58 29 2e 20 5b 4e 4f 54 5d 20 20 20  xpr(X). [NOT]   
2680: 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70 72 28  {A = sqliteExpr(
2690: 54 4b 5f 55 4d 49 4e 55 53 2c 20 58 2c 20 30 2c  TK_UMINUS, X, 0,
26a0: 20 30 29 3b 7d 0a 65 78 70 72 28 41 29 20 3a 3a   0);}.expr(A) ::
26b0: 3d 20 50 4c 55 53 20 65 78 70 72 28 58 29 2e 20  = PLUS expr(X). 
26c0: 5b 4e 4f 54 5d 20 20 20 20 7b 41 20 3d 20 58 3b  [NOT]    {A = X;
26d0: 7d 0a 0a 25 74 79 70 65 20 65 78 70 72 6c 69 73  }..%type exprlis
26e0: 74 20 7b 45 78 70 72 4c 69 73 74 2a 7d 0a 25 64  t {ExprList*}.%d
26f0: 65 73 74 72 75 63 74 6f 72 20 65 78 70 72 6c 69  estructor exprli
2700: 73 74 20 7b 73 71 6c 69 74 65 45 78 70 72 4c 69  st {sqliteExprLi
2710: 73 74 44 65 6c 65 74 65 28 24 24 29 3b 7d 0a 25  stDelete($$);}.%
2720: 74 79 70 65 20 65 78 70 72 69 74 65 6d 20 7b 45  type expritem {E
2730: 78 70 72 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f  xpr*}.%destructo
2740: 72 20 65 78 70 72 69 74 65 6d 20 7b 73 71 6c 69  r expritem {sqli
2750: 74 65 45 78 70 72 44 65 6c 65 74 65 28 24 24 29  teExprDelete($$)
2760: 3b 7d 0a 0a 65 78 70 72 6c 69 73 74 28 41 29 20  ;}..exprlist(A) 
2770: 3a 3a 3d 20 65 78 70 72 6c 69 73 74 28 58 29 20  ::= exprlist(X) 
2780: 43 4f 4d 4d 41 20 65 78 70 72 69 74 65 6d 28 59  COMMA expritem(Y
2790: 29 2e 20 0a 20 20 20 7b 41 20 3d 20 73 71 6c 69  ). .   {A = sqli
27a0: 74 65 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  teExprListAppend
27b0: 28 58 2c 59 2c 30 29 3b 7d 0a 65 78 70 72 6c 69  (X,Y,0);}.exprli
27c0: 73 74 28 41 29 20 3a 3a 3d 20 65 78 70 72 69 74  st(A) ::= exprit
27d0: 65 6d 28 58 29 2e 20 20 20 20 20 20 20 20 20 20  em(X).          
27e0: 20 20 7b 41 20 3d 20 73 71 6c 69 74 65 45 78 70    {A = sqliteExp
27f0: 72 4c 69 73 74 41 70 70 65 6e 64 28 30 2c 58 2c  rListAppend(0,X,
2800: 30 29 3b 7d 0a 65 78 70 72 69 74 65 6d 28 41 29  0);}.expritem(A)
2810: 20 3a 3a 3d 20 65 78 70 72 28 58 29 2e 20 20 20   ::= expr(X).   
2820: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 41 20               {A 
2830: 3d 20 58 3b 7d 0a 65 78 70 72 69 74 65 6d 28 41  = X;}.expritem(A
2840: 29 20 3a 3a 3d 20 2e 20 20 20 20 20 20 20 20 20  ) ::= .         
2850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 41                {A
2860: 20 3d 20 30 3b 7d 0a 0a 0a 63 6d 64 20 3a 3a 3d   = 0;}...cmd ::=
2870: 20 43 52 45 41 54 45 28 53 29 20 75 6e 69 71 75   CREATE(S) uniqu
2880: 65 66 6c 61 67 20 49 4e 44 45 58 20 49 44 28 58  eflag INDEX ID(X
2890: 29 20 4f 4e 20 49 44 28 59 29 20 4c 50 20 69 64  ) ON ID(Y) LP id
28a0: 78 6c 69 73 74 28 5a 29 20 52 50 28 45 29 2e 0a  xlist(Z) RP(E)..
28b0: 20 20 20 20 7b 73 71 6c 69 74 65 43 72 65 61 74      {sqliteCreat
28c0: 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20 26  eIndex(pParse, &
28d0: 58 2c 20 26 59 2c 20 5a 2c 20 26 53 2c 20 26 45  X, &Y, Z, &S, &E
28e0: 29 3b 7d 0a 75 6e 69 71 75 65 66 6c 61 67 20 3a  );}.uniqueflag :
28f0: 3a 3d 20 55 4e 49 51 55 45 2e 0a 75 6e 69 71 75  := UNIQUE..uniqu
2900: 65 66 6c 61 67 20 3a 3a 3d 20 2e 0a 0a 25 74 79  eflag ::= ...%ty
2910: 70 65 20 69 64 78 6c 69 73 74 20 7b 49 64 4c 69  pe idxlist {IdLi
2920: 73 74 2a 7d 0a 25 64 65 73 74 72 75 63 74 6f 72  st*}.%destructor
2930: 20 69 64 78 6c 69 73 74 20 7b 73 71 6c 69 74 65   idxlist {sqlite
2940: 49 64 4c 69 73 74 44 65 6c 65 74 65 28 24 24 29  IdListDelete($$)
2950: 3b 7d 0a 25 74 79 70 65 20 69 64 78 69 74 65 6d  ;}.%type idxitem
2960: 20 7b 54 6f 6b 65 6e 7d 0a 0a 69 64 78 6c 69 73   {Token}..idxlis
2970: 74 28 41 29 20 3a 3a 3d 20 69 64 78 6c 69 73 74  t(A) ::= idxlist
2980: 28 58 29 20 43 4f 4d 4d 41 20 69 64 78 69 74 65  (X) COMMA idxite
2990: 6d 28 59 29 2e 20 20 0a 20 20 20 20 20 7b 41 20  m(Y).  .     {A 
29a0: 3d 20 73 71 6c 69 74 65 49 64 4c 69 73 74 41 70  = sqliteIdListAp
29b0: 70 65 6e 64 28 58 2c 26 59 29 3b 7d 0a 69 64 78  pend(X,&Y);}.idx
29c0: 6c 69 73 74 28 41 29 20 3a 3a 3d 20 69 64 78 69  list(A) ::= idxi
29d0: 74 65 6d 28 59 29 2e 0a 20 20 20 20 20 7b 41 20  tem(Y)..     {A 
29e0: 3d 20 73 71 6c 69 74 65 49 64 4c 69 73 74 41 70  = sqliteIdListAp
29f0: 70 65 6e 64 28 30 2c 26 59 29 3b 7d 0a 69 64 78  pend(0,&Y);}.idx
2a00: 69 74 65 6d 28 41 29 20 3a 3a 3d 20 49 44 28 58  item(A) ::= ID(X
2a10: 29 2e 20 20 20 20 20 20 20 20 20 20 20 7b 41 20  ).           {A 
2a20: 3d 20 58 3b 7d 0a 0a 63 6d 64 20 3a 3a 3d 20 44  = X;}..cmd ::= D
2a30: 52 4f 50 20 49 4e 44 45 58 20 69 64 28 58 29 2e  ROP INDEX id(X).
2a40: 20 20 20 20 20 20 20 7b 73 71 6c 69 74 65 44 72         {sqliteDr
2a50: 6f 70 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20  opIndex(pParse, 
2a60: 26 58 29 3b 7d 0a 0a 63 6d 64 20 3a 3a 3d 20 43  &X);}..cmd ::= C
2a70: 4f 50 59 20 69 64 28 58 29 20 46 52 4f 4d 20 69  OPY id(X) FROM i
2a80: 64 28 59 29 20 55 53 49 4e 47 20 44 45 4c 49 4d  d(Y) USING DELIM
2a90: 49 54 45 52 53 20 53 54 52 49 4e 47 28 5a 29 2e  ITERS STRING(Z).
2aa0: 0a 20 20 20 20 7b 73 71 6c 69 74 65 43 6f 70 79  .    {sqliteCopy
2ab0: 28 70 50 61 72 73 65 2c 26 58 2c 26 59 2c 26 5a  (pParse,&X,&Y,&Z
2ac0: 29 3b 7d 0a 63 6d 64 20 3a 3a 3d 20 43 4f 50 59  );}.cmd ::= COPY
2ad0: 20 69 64 28 58 29 20 46 52 4f 4d 20 69 64 28 59   id(X) FROM id(Y
2ae0: 29 2e 0a 20 20 20 20 7b 73 71 6c 69 74 65 43 6f  )..    {sqliteCo
2af0: 70 79 28 70 50 61 72 73 65 2c 26 58 2c 26 59 2c  py(pParse,&X,&Y,
2b00: 30 29 3b 7d 0a 0a 63 6d 64 20 3a 3a 3d 20 56 41  0);}..cmd ::= VA
2b10: 43 55 55 4d 2e 20 20 20 20 20 20 20 20 20 20 20  CUUM.           
2b20: 20 20 20 20 20 7b 73 71 6c 69 74 65 56 61 63 75       {sqliteVacu
2b30: 75 6d 28 70 50 61 72 73 65 2c 30 29 3b 7d 0a 63  um(pParse,0);}.c
2b40: 6d 64 20 3a 3a 3d 20 56 41 43 55 55 4d 20 69 64  md ::= VACUUM id
2b50: 28 58 29 2e 20 20 20 20 20 20 20 20 20 20 7b 73  (X).          {s
2b60: 71 6c 69 74 65 56 61 63 75 75 6d 28 70 50 61 72  qliteVacuum(pPar
2b70: 73 65 2c 26 58 29 3b 7d 0a                       se,&X);}.